При применении диффузии к изображению, как управлять «процентом» искажения, как это делает Photoshop?

#image-processing #python-imaging-library

#обработка изображений #python-imaging-library

Вопрос:

Чтобы применить диффузию к изображению, можно использовать алгоритм, подобный Floyd Steinberg (FS), но как контролировать «процент» искажения, как у Photoshop есть опция в устаревшей функции «Сохранить для Интернета»? В Python с помощью PIL можно использовать im.convert(‘1’) для преобразования изображения в черно-белое и автоматического применения FS-сглаживания. Но, похоже, искажение будет 100%. Я бы хотел, чтобы это более точно соответствовало эффекту Photoshop 88%. Как этого добиться? (используя библиотеку или модифицируя алгоритм FS)

введите описание изображения здесь

Примеры влияния dither% на изображение (сгенерированное с помощью Photoshop):

Искажение 25%:

Искажение 25%

Искажение 50%:

введите описание изображения здесь

Искажение 75%:

введите описание изображения здесь

Искажение 100%:

введите описание изображения здесь

Комментарии:

1. Я не знаком с diffusion в Photoshop. Можете ли вы объяснить поведение, к которому вы привыкли в Photoshop, когда вы устанавливаете процент ниже? Искажает ли это только часть изображения? Делает ли это какое-то затухание между размытым изображением и тем, которое не размыто? Может быть, вы можете предоставить серию изображений, демонстрирующих отсутствие размытия, полное размытие и различные проценты, такие как 25%, 50% и 75%?

2. @B.Eckles, спасибо за отзыв, я добавил его к сообщению.

3. Спасибо, @E.W. Hm, это увлекательно. Первые две идеи, которые приходят на ум, заключаются в том, что они изменяют количество ошибок, передаваемых на соседние ячейки (в Floyd-Steinberg), или же они делают что-то вроде масштабирования цветов изображения перед применением алгоритма.

4. Поискав вокруг, я нашел одну небольшую ссылку на то, что они могли бы делать: dynamicpdf.com/Support/NET_Help_Library_16_06/… В нем говорится о «количестве пикселей», которые размыты. Не совсем уверен, что это значит, но это может помочь вам / кому-то / нам подсказать идею.

5. На этой странице есть целая куча информации, которую у меня не было времени прочитать, но, в частности, смотрите Связанный раздел: imagemagick.org/Usage/quantize/#monochrome Это в сочетании с предыдущей ссылкой, которую я опубликовал, наводит меня на мысль, что, возможно, процент определяет, какой процент «средних» цветов размывается. Другими словами, если цвета выше или ниже определенного порога, они просто устанавливаются на верхний или нижний крайний. Однако, если они находятся в пределах этой средней области, они размыты.

Ответ №1:

Я не уверен точно, что происходит в Photoshop, но из моих поисков и того, что я немного описал в комментариях к вопросу, у меня появилась идея, которая кажется обоснованной. Так что это может быть неправильный ответ, но это может быть ответ аналогичного типа.

Я опишу идею в режиме преобразования оттенков серого в монохромный (сопоставление интервала [0,1] с заданным {0,1} ), который, конечно, может быть экстраполирован на цветной вариант.

Пусть p это желаемый процент (такой, который p находится в [0,1] ). Алгоритм должен был бы выполнять Floyd-Steinberg, но передавать ошибку только соседям, которые находятся в интервале [(1-p)/2, (1-p)/2 p] . Итак, если все мои соседи находятся за пределами этого диапазона, моя ошибка просто удаляется. В противном случае моя ошибка будет перенесена на те, которые находятся в пределах этого диапазона (с теми же пропорциями, которые обычно указывает Флойд-Стейнберг).

Я сомневаюсь, даст ли это желаемый результат (я не уверен на 100%), но, по крайней мере, похоже. Дайте мне знать, как продвигается ваше расследование!

Комментарии:

1. Еще одной идеей было бы отфильтровать изображение перед выполнением Floyd Steinberg. Увеличьте контрастность, например, чтобы получить «меньший процент искажения», и уменьшите его, чтобы получить более высокий процент. Понятия не имею, даст ли это желаемый результат, но это еще одно место для изучения.