Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эффект Twirl или "Закручивание", ... в граффике 
:(
    Опции темы
asmworm
  Дата 28.2.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.1.2004

Репутация: 1
Всего: 1



Всем привет smile

Столкнулся с такой проблемой: надо сделать преобразование изображения с эффектом Twirl(в фотошопе, или Whirl в GIMP)
Скиньте плиз алгоритм такого преобразования. Я в нэте нашёл только исходники....

И разжуйте плз как после преобразования делать наложение изображения smile
PM MAIL   Вверх
SoWa
Дата 28.2.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Каждый пиксель изображения очевидно поворачиваешь относительно центра картинки. Делишь картинку на линии толщиной в одну точку. И каждая точка более удаленная от центра вращается на больший градус.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
asmworm
Дата 28.2.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.1.2004

Репутация: 1
Всего: 1



Цитата(SoWa @ 28.2.2006, 20:02)
Каждый пиксель изображения очевидно поворачиваешь относительно центра картинки. Делишь картинку на линии толщиной в одну точку. И каждая точка более удаленная от центра вращается на больший градус.

Наоборот на меньший градус. Но тут много нюансов, и хотелось бы услышать более конкретные выкладки, тобишь конкретный алгоритм smile
PM MAIL   Вверх
NewDima
Дата 9.3.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Выбираешь центр Twirl(хватаешь [x, y])
Потом радиус-вектором рошагиваеш по каждому пикселу, ватаешь его цвет, в зависимости от того, как далеко он от [x, y], поворачиваешь на угол. Здесь чем больше расстояние от [x, y], тем меньшее перемещение по окружности этого пиксила с центром в [x, y].
Слушай, алгоритм простой, здесь писанина.
На чем пишешь?
Добавлено @ 10:51
Забыл напомнить, чтобы предыдущий рисунок загонял в буфер, и с него считывал, а заносил например на экран, или в другой буфер... smile удачи!
Добавлено @ 10:57
Если быть конкретнее, то можно прошагивать по cos и sin но здесь может быть накладка, из-за погрешности могут получиться пропущенные пикселы. Тогда лучше прошагивать все точки, и смотреть, удовлетворяют ли они уравнению окружности от TWIRL. Затем смотришь расстояние от [x, y] и в соответственно установленном тобой масштабе сдвигаешь пиксел по окружности, я типа такого делал, но Исхв не осталось. smile
PM ICQ   Вверх
asmworm
Дата 10.3.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.1.2004

Репутация: 1
Всего: 1



Цитата(NewDima @ 9.3.2006, 10:44)
Выбираешь центр Twirl(хватаешь [x, y])
Потом радиус-вектором рошагиваеш по каждому пикселу, ватаешь его цвет, в зависимости от того, как далеко он от [x, y], поворачиваешь на угол. Здесь чем больше расстояние от [x, y], тем меньшее перемещение по окружности этого пиксила с центром в [x, y].
Слушай, алгоритм простой, здесь писанина.
На чем пишешь?
Добавлено @ 10:51
Забыл напомнить, чтобы предыдущий рисунок загонял в буфер, и с него считывал, а заносил например на экран, или в другой буфер... smile удачи!
Добавлено @ 10:57
Если быть конкретнее, то можно прошагивать по cos и sin но здесь может быть накладка, из-за погрешности могут получиться пропущенные пикселы. Тогда лучше прошагивать все точки, и смотреть, удовлетворяют ли они уравнению окружности от TWIRL. Затем смотришь расстояние от [x, y] и в соответственно установленном тобой масштабе сдвигаешь пиксел по окружности, я типа такого делал, но Исхв не осталось. smile

А как быть с наложением пиксела в финальный буфер? Я так подозреваю что там должно быть какое-то усреднение, а то если без него то в итоге эффект получится зернистый.Просто посмотрел исходники GIMP smile? ,там идёт усреднение. Только по какому буферу усреднять? Брать пикселы из исходного или финального?
Просто ,как бы, если в финальный, то по идее если он залит черным цветом тогда интенсивность цвета пиксела, допустим на 1 шаге(тоесть 1 пиксела) резко упадёт. Если смешивать с исходным то тоже гамазня какаето получится.Или финальный буфер должен быть прозрачным?

П.С. пишу на С++ только вроде писанины стокоже smile , поэтому можно и в псевдокоде, я пойму smile

Это сообщение отредактировал(а) asmworm - 10.3.2006, 20:04
PM MAIL   Вверх
Kostt
Дата 10.3.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

Репутация: нет
Всего: 3



Понятное дело, надо усреднять по нескольким соседним пикселям. См. теорию компьютерную графики ( билинейная, трилинейная интерполяция и т.п.)
PM MAIL   Вверх
asmworm
Дата 10.3.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.1.2004

Репутация: 1
Всего: 1



Цитата(Kostt @ 10.3.2006, 20:24)
Понятное дело, надо усреднять по нескольким соседним пикселям. См. теорию компьютерную графики ( билинейная, трилинейная интерполяция и т.п.)

Вопрос собсно состоял так: по какому буферу надо усреднять, и каким должен быть финальный буфер если усреднять по нему
PM MAIL   Вверх
NewDima
Дата 11.3.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Финальный буфер делай прозрачным. Получается так, бирешь с исходника, кладешь в другой буфер преобразованное. Причем, если пиксель, который берешь, не входит в окружность твирла, то его кладешь без изменений.
smile Удачи
PM ICQ   Вверх
asmworm
Дата 11.3.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.1.2004

Репутация: 1
Всего: 1



Цитата(NewDima @ 11.3.2006, 10:22)
Финальный буфер делай прозрачным. Получается так, бирешь с исходника, кладешь в другой буфер преобразованное. Причем, если пиксель, который берешь, не входит в окружность твирла, то его кладешь без изменений.
smile Удачи

Ну тогда алгоритм я понял так:
Выбираем центр x,y
Выбираем радиус преобразования R
Вибираем угол преобразования A
Преобразование состоит в следующем: есть ф-ция f(_r) которая возвращает угол в зависимости от текущего радиуса который принадлежит промежутку [0;R].
Проводим преобразование по всему входному буферу при этом в финальном буфере делая усреднение по каждой преобразованной точке...

f(_r) - я так понимаю линейная ф-ция, ну мне так показалось после того как я заглянул в фотошоп, и f(_R)=0 , f(0+)"A. И радиус там выбирается таким образом: он делает преобразование не по окружности а по элипсу так что большая и малая полуось это половина соотвествующей стороны прямоугольника изображения.

Я всё правильно понял?

Это сообщение отредактировал(а) asmworm - 11.3.2006, 12:03
PM MAIL   Вверх
NewDima
Дата 11.3.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Все то все, только вот если по твоей логике судить, что преобразования проходят по эллипсу, то значит, что если рименить к изображению фильтр, то его наибольшее из измерений может измениться. На практике я этого не наблюдал.
Цитата

так что большая и малая полуось это половина соотвествующей стороны прямоугольника изображения

область обрабатываемого изображения Всегда получается квадратом, а это значит, что малая и большая полуоси - равны, а значит это окружность.

Цитата

ну мне так показалось после того как я заглянул в фотошоп

Если ты хочешь как можно точнее приблизить филтр к фотошопному, то нужно не заглядывать, а посиди порассматривай.
Я минут 30 сейчас сидел эксперементировал.
Код (сырой, но исполняющий) написал на паскале в течение 20 минут.
Пиши smile
PM ICQ   Вверх
asmworm
Дата 11.3.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 20.1.2004

Репутация: 1
Всего: 1



Цитата(NewDima @ 11.3.2006, 13:27)
Все то все, только вот если по твоей логике судить, что преобразования проходят по эллипсу, то значит, что если рименить к изображению фильтр, то его наибольшее из измерений может измениться. На практике я этого не наблюдал.
Цитата

так что большая и малая полуось это половина соотвествующей стороны прямоугольника изображения

область обрабатываемого изображения Всегда получается квадратом, а это значит, что малая и большая полуоси - равны, а значит это окружность.

Интерестно как это так он(фотошоп) применяет фильтр по окружности в прямоугольном изображении smile , кто не верит может сам заглянуть - там получается эллипс.
А то что в алгоритме не эллипс я то догадался smile
Ладно, вобщем я понял, спасибо
PM MAIL   Вверх
NewDima
Дата 13.3.2006, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Ну понял, молодец, только не цетирую фразы целиком
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1386 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.