Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Искажение Bitmap по синусу. Сглаживание. сглаживание изображения 
V
    Опции темы
x2bool
  Дата 5.1.2012, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Битмап, простое искажение по синусу.
Код

new_y = (int) (old_y + amplitude * sin(old_x));


Естественно, что синус не дает целое число, а битмап не может принимать дробь в качестве координаты. Приходится округлять или попросту отбрасывать (как в примере) дробную часть. Результат ожидаемый - алгоритм работает, но изображение получается очень ступенчатым.

Как можно сгладить?
PM MAIL   Вверх
Pavia
Дата 5.1.2012, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Делается по другому.
Вначале вычисляешь размеры нового изображения.
Потом идешь по пиксельно перебираешь координаты нового изображения. 
По этим новым координатам находишь старые координаты, с плавающей точкой.
Вот получив старые координаты находишь цвет в этом. Для сглаживания используешь интерполирование. Линейное или кубическое или сплайнами.
К примеру линейное. берешь координаты находишь целую часть и дробную.
Old_X_I=int(Old_X);
Old_Y_I=int(Old_Y);
alfa=Old_X-Old_X_I;
betta=Old_Y-Old_Y_I;

a00=map[Old_X_I+0,Old_Y_I+0];
a10=map[Old_X_I+1,Old_Y_I+0];
a01=map[Old_X_I+0,Old_Y_I+1];
a11=map[Old_X_I+1,Old_Y_I+1];
New_Value=a00*(1-alfa)*(1-betta)+a10*(alfa)*(1-betta)+a01*(1-alfa)*(betta)+a11*(alfa)*(betta);

http://en.wikipedia.org/wiki/Bilinear_interpolation
http://en.wikipedia.org/wiki/Bicubic_interpolation

Примерно так. Остальное думаю сам додумаешь.

PM MAIL   Вверх
x2bool
Дата 7.1.2012, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Я ходил вокруг да около, но почему-то думал, что интерполяция только для ресайза изображений.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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