Алгоритм работы фильтра Surface Blur
Сам принцип фильтра заключается в следующем - мы выбираем некоторую поверхность (приблизительно одних цветов), в ней уравниваем, выбираем следующую и так далее. Но как это сделать - не могу придумать.
Проблемы такие:
1. Как выбрать поверхность? По какому принципу определять границы поверхности (edges)? Если определять границу по разнице цветов - то шум, который надо закрасить, не будет попадать в нужную поверхность (особенно когда будет на границах двух поверхностей).
2. Как размывать? Определяется средний цвет, или цвета меняются по распределению типа Гауссовского?
В общем, если у кого-нибудь есть хоть какое то описание алгоритма - буду очень благодарен. Если нет - пожалуйста подскажите, как решить эти две проблемы (именно алгоритм).
Я что, должен его купить, установить, разобраться в документации, где искать нужный тебе эффект?
Приведи картинки до эффента и после, опиши, на что нужно обращать внимание...
А описание алгоитма знают в Adobe, только не факт, что захотят делиться.
Это раздел Графика форума программистов, а значит здесь вроде как люди должны что то знать о графике. Если что обработка изображений тоже кг, не только построение изображений. Так что не надо флудить об adobe.
Опищи результат работы хоты бы словами, если не можешь привести картинку.
Цитата: andriano
Программисты, работающие с графикой, используют DirectX/OpenGL, а не Photoshop.
Улыбнуло. Че, реально больше ничего не делают, только dx с gl'ом крутят? я потрясен....
Цитата: andriano
Опищи результат работы хоты бы словами, если не можешь привести картинку.
Читаем внимательно первый пост:
[QUOTE=MaitreDesir]мы выбираем некоторую поверхность (приблизительно одних цветов), в ней уравниваем, выбираем следующую и так далее.[/QUOTE]
Ты, вероятно, указываешь точку, с которой начать.
От нее подобно заливке выделяем область, в которой цвет отличается от цвета выбранной точки менее чем на заданный порог. Потом в выделенной области делаем блур. Как раз радиус и порог указаны на скриншоте.
Допустим, есть две области (упростим - квадраты 5х5), на которых встречаются только близкие цвета (на каждой - свои). На их границе - две точки резко отличаются (шум). Эти точки в области не войдут и не размоются. А должны. Вопрос в том, при каком условии сильно отличающиеся по цвету точки должны входить в область. Если взять только условие по количеству окружающих пикселей, то:
ff0000 ff0000 ff0000
ff0000 0000ff 00ff00
00ff00 00ff00 00ff00
Куда синий присоединять? В зеленую или красную область?
Ну, тут два варианта:
1. Мы считаем точку самостоятельной единицей (скажем, как границы между цветами на перегородчатой эмали) и ничего с ней не делаем.
2. Мы определенно решили, что данная точка - шум. Тогда наиболее естественным будет (после того, как мы обработаем области) принять ее как нечто среднее между окружающими точками. В данном случае 7f7f00.
Т.о. ни втом, ни в другом варианте точка не присоединяется ни к одной из областей.
Насчет другой проблемы - в том и дело, что надо убить двух зайцев :)
Цитата: MaitreDesir
Насчет другой проблемы - в том и дело, что надо убить двух зайцев :)
Возможно, алгоритм будет многпроходным или вообще итерационным. Например:
1. Выделяем однородные области и выглаживаем их.
2. Обнаруживаем шумовые точки и исправляем их.
3. Если на этапе 2 сделано более N исправлений, идем на 1.
В частном случае N может быть равно 0.