Алгоритм для создания полутоновых изображений?

C++ BlackBook. KISS полностью до

11
задан Paul Wicks 11 August 2009 в 01:22
поделиться

3 ответа

  • Фильтр до разрешения, которое вы хотите, чтобы «точки» были разделены.
  • Получите среднюю интенсивность группа пикселей в этой области.
  • Нарисуйте точку так, чтобы поверхность площадь точки равна процент от белого к черному средняя интенсивность.

Думайте о группах пикселей как о шестиугольной сетке. Используйте функцию круга, чтобы решить, какие пиксели входят в группу. Вы можете настроить перекрытие кругов, чтобы настроить черный цвет / насыщенность вывода. Это действительно предназначено для вывода с высоким разрешением, такого как печать. Если вы делаете это для отображения на экране в качестве визуального эффекта, убедитесь, что вы используете процедуру рисования круга со сглаживанием, чтобы компенсировать низкое разрешение дисплея. (По сравнению с печатью, даже HD на самом деле не так высок.)

Если вы делаете это, потому что вам нравится эффект, это круто. Но если вы просто хотите перейти к черно-белому изображению, рассмотрите возможность использования дизеринга «Флойд-Стейнберг». Он обеспечивает высококачественные результаты и распределяет ошибку по изображению. http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

16
ответ дан 3 December 2019 в 05:13
поделиться

Самый простой способ сделать это - перейти по пикселям и использовать случайность: для каждого пикселя вероятность его обратного окрашивания = затемнение исходного цвета.

Это может дать вам двухстрочный алгоритм дизеринга. Он не будет выглядеть так красиво, как Флойд-Стейнберг (потому что он отслеживает ошибки), или столь же художественно, как «плитка, а затем вставлять диски в каждую плитку так, чтобы доля черного = средняя темнота в исходной плитке», но на практике это работает довольно хорошо.

0
ответ дан 3 December 2019 в 05:13
поделиться

Halftoning is very efficient.

Single-level halftone: Ввод: пиксели с вашего изображения; заранее сконструированный «экран», содержащий пороговые значения. Во время выполнения: для каждого цветового канала для каждого пикселя выберите одно пороговое значение (индекс в пороговом массиве по модулю размеров массива). Одно сравнение между пикселем и порогом определяет, включено или выключено выходное значение.

Оно также распространяется на многоуровневый вывод с использованием нескольких экранов.

Интересной частью является построение экранов (пороговых массивов) ). Существует множество вариаций - кластерные точки (AM), стохастические (FM), множество вариаций и гибридов, включая синий шум и зеленый шум (AM / FM). И обычно вам нужен отдельный экран для каждого цветового канала. Традиционные групповые точечные экраны размещают свои точки в прямоугольной сетке, которую можно описать по их частоте (низкая частота = большие точки) и углу (обычно 15 ° для голубого, 75 ° для пурпурного, 90 ° для желтого и 45 ° для черного) .

4
ответ дан 3 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: