Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм работы фильтра Surface Blur

416
15 декабря 2009 года
MaitreDesir
380 / / 02.01.2008
Возникла задача - реализовать в программе размытие подлжоки (см. Surface Blur в Photoshop CS2 и выше). Несколько часов гугления так и не дали результата.
Сам принцип фильтра заключается в следующем - мы выбираем некоторую поверхность (приблизительно одних цветов), в ней уравниваем, выбираем следующую и так далее. Но как это сделать - не могу придумать.
Проблемы такие:
1. Как выбрать поверхность? По какому принципу определять границы поверхности (edges)? Если определять границу по разнице цветов - то шум, который надо закрасить, не будет попадать в нужную поверхность (особенно когда будет на границах двух поверхностей).
2. Как размывать? Определяется средний цвет, или цвета меняются по распределению типа Гауссовского?
В общем, если у кого-нибудь есть хоть какое то описание алгоритма - буду очень благодарен. Если нет - пожалуйста подскажите, как решить эти две проблемы (именно алгоритм).
1.9K
16 декабря 2009 года
andriano
474 / / 10.01.2008
Это форум художников или программистов? Или ты считаешь, что у каждого программиста должен стоять Photoshop CS2? Он, между прочим, $699 стоит.
Я что, должен его купить, установить, разобраться в документации, где искать нужный тебе эффект?
Приведи картинки до эффента и после, опиши, на что нужно обращать внимание...
А описание алгоитма знают в Adobe, только не факт, что захотят делиться.
416
16 декабря 2009 года
MaitreDesir
380 / / 02.01.2008
Это раздел Графика форума программистов, а значит здесь вроде как люди должны что то знать о графике. Если что обработка изображений тоже кг, не только построение изображений. Так что не надо флудить об adobe.
1.9K
16 декабря 2009 года
andriano
474 / / 10.01.2008
Программисты, работающие с графикой, используют DirectX/OpenGL, а не Photoshop.

Опищи результат работы хоты бы словами, если не можешь привести картинку.
416
16 декабря 2009 года
MaitreDesir
380 / / 02.01.2008
Цитата: andriano
Программисты, работающие с графикой, используют DirectX/OpenGL, а не Photoshop.


Улыбнуло. Че, реально больше ничего не делают, только dx с gl'ом крутят? я потрясен....

Цитата: andriano
Опищи результат работы хоты бы словами, если не можешь привести картинку.


Читаем внимательно первый пост:
[QUOTE=MaitreDesir]мы выбираем некоторую поверхность (приблизительно одних цветов), в ней уравниваем, выбираем следующую и так далее.[/QUOTE]

1.9K
16 декабря 2009 года
andriano
474 / / 10.01.2008
Думаю, римерно так.
Ты, вероятно, указываешь точку, с которой начать.
От нее подобно заливке выделяем область, в которой цвет отличается от цвета выбранной точки менее чем на заданный порог. Потом в выделенной области делаем блур. Как раз радиус и порог указаны на скриншоте.
416
16 декабря 2009 года
MaitreDesir
380 / / 02.01.2008
Нет, так не получится.
Допустим, есть две области (упростим - квадраты 5х5), на которых встречаются только близкие цвета (на каждой - свои). На их границе - две точки резко отличаются (шум). Эти точки в области не войдут и не размоются. А должны. Вопрос в том, при каком условии сильно отличающиеся по цвету точки должны входить в область. Если взять только условие по количеству окружающих пикселей, то:

ff0000 ff0000 ff0000
ff0000 0000ff 00ff00
00ff00 00ff00 00ff00

Куда синий присоединять? В зеленую или красную область?
1.9K
16 декабря 2009 года
andriano
474 / / 10.01.2008
(Борьба с шумом - это немного другая проблема.)

Ну, тут два варианта:
1. Мы считаем точку самостоятельной единицей (скажем, как границы между цветами на перегородчатой эмали) и ничего с ней не делаем.
2. Мы определенно решили, что данная точка - шум. Тогда наиболее естественным будет (после того, как мы обработаем области) принять ее как нечто среднее между окружающими точками. В данном случае 7f7f00.

Т.о. ни втом, ни в другом варианте точка не присоединяется ни к одной из областей.
416
16 декабря 2009 года
MaitreDesir
380 / / 02.01.2008
Хм, а вот два - это мысль. Чето я протупил. Спс.
Насчет другой проблемы - в том и дело, что надо убить двух зайцев :)
1.9K
17 декабря 2009 года
andriano
474 / / 10.01.2008
Цитата: MaitreDesir
Насчет другой проблемы - в том и дело, что надо убить двух зайцев :)

Возможно, алгоритм будет многпроходным или вообще итерационным. Например:
1. Выделяем однородные области и выглаживаем их.
2. Обнаруживаем шумовые точки и исправляем их.
3. Если на этапе 2 сделано более N исправлений, идем на 1.
В частном случае N может быть равно 0.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог