вторник, июля 26, 2011

Потеря супер-контраста при частотном разложении

Перед тем как выкладывать вчера в реестр GIMP свой скрипт, просмотрел еще раз обсуждения фильтров-аналогов и нашел вот такой любопытный комментарий, который даже не поленюсь процитировать и перевести:

This does not reproduce all images accurately. In the following example, it is actually grossly inaccurate (resulting in black pixels where there should be white): 1. create a new 16x16 image 2. fill with black 3. select 1 pixel brush, paint isolated white dots 4. run wavelet decompose (options do not matter) All pixels where the average difference from their 4 neighbours is >127.5 will be mangled in the output[1]. I realize this is a limitation of grain-merge; Would it be possible to detect this problem and flag it to the user when it occurs? [1] for example, isolated pixels, non-corner parts of L-formations, exact 90degree or 45degree 1pixel lines. 'hat transform': Does this have anything to do with the top-hat transform? http://en.wikipedia.org/wiki/Top-hat_transform I played around with Scipy which includes both black and white top-hat transforms, but was unable to replicate the results.

Перевод примерно такой:
Этот метод не воспроизводит все изображения достоверно. В следующем примере, он, вообще-то, совсем недостоверен(пиксели, которые должны быть белыми, становятся черными): 1. создайте новое изображение 16х16 2. заполните его черным 3. выберите кисть диаметром 1 пиксель и нарисуйте белые точки так, чтобы они не соприкасались друг с другом 4. выполните частотное разложение(настройки не имеют значения) Все пикселы отличающиеся от 4 соседних больше чем на 127.5 будут в итоге искажены. Я обнаружил, что это результат ограничения режима слоя grain-merge; [дальше идут предложения о том, как сигнализировать пользователю о такой ситуации и т. п.].

Я не поленился проверить эту ситуацию и да, действительно такая проблема есть в наличии. Увеличенный в 3000 раз прямоугольник 16х16, о котором говорил автор комментария:



Пользователи Photoshop, к сожалению, не могут вздохнуть с облегчением и сказать: "Ну, у нас-то всё в порядке!". К сожалению, у них те же самые проблемы, режим слоя GIMP "Grain merge" работает в итоге так же, как и режим слоя "Linear light" + понижение контраста в два раза в Photoshop:

Photoshop Linear Light:  R = S + 2(C — 128), в определении А. Журавлева
GIMP Grain merge: R = S + C -128, prooflink


Новая информация от А. Журавлева о том как этой проблемы можно избежать в Photoshop:

В качестве альтернативы High Pass надо:
  1. cделать две копии слоя с исходным изображением
  2. применить к нижней Gaussian Blur с желаемым радиусом
  3. к верхнему слою применить команду Apply Image, выбрав в качестве накладываемого изображения размытый слой, режим наложения — Subtract, в поле Offset ввести 128, в поле Scale ввести 2.
К сожалению, автоматического решения данной проблемы в GIMP я пока не вижу. Об этой проблеме просто нужно знать и пытаться её избегать, например "протирая по масочке" такие вот супер-контрастные зоны изображения.

2 комментария:

Ученик комментирует...

Любопытно, а мужики то (чтай Журавлёв и пр.) не знают! И эти люди запрещают нам (Linux юзерам) ковыряться в носу... брр... Напыщенно рассказывая что только Мак да РПП это супер пупер, а остальное тем более линуксовое поделки любителей...

oivanenko комментирует...

Не думаю, что "мужики" не знают. Просто проблема достаточно искусственная и в реальной жизни практически не возникающая. В смысле, получить такую фотографию, где были бы идеально белые точки на идеально черном фоне достаточно тяжело.

Насчет Мака и РПП -- да, наблюдаю форсирование этого тренда в ЖЖ с неизбывным интересом. Всё забавно.