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

Какой хороший алгоритм для создания полутоновых изображений (например, this )? Быстрый поиск в Google выдает кучу статей по этому вопросу, но трудно судить, какие из них хороши, эффективны и т. Д. Есть ли лучший способ сделать это?

Ответы [ 4 ]

16 голосов
/ 11 августа 2009
  • Отфильтруйте до разрешения, которое вы хочу, чтобы "точки" разделялись.
  • Получите среднюю интенсивность группа пикселей в этой области.
  • Нарисуйте точку так, чтобы поверхность Площадь точки равна процентов от белого до черного средняя интенсивность.

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

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

4 голосов
/ 25 августа 2009

Полутона очень эффективны.

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

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

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

Если вы хотите поэкспериментировать, растровое изображение Photoshop с полутоновым методом экрана (см. Этот учебник ) имеет внутренний генератор экрана и будет отображать изображение в градациях серого в растровое изображение, как в вашем примере.

Методы сглаживания, предложенные другими, включают в себя больше вычислений на пиксель, и выходные данные не похожи на ваш пример полутонов с экранированием в виде кластерных точек.

2 голосов
/ 24 ноября 2016

Существует множество реализаций алгоритмов с открытым исходным кодом для создания полутоновых изображений. Вы можете взглянуть на исходные коды. Ниже представлены несколько реализаций, разработанных на Java с использованием Marvin Image Processing Framework .

входное изображение:
enter image description here

Распространение ошибок ( источник ):
enter image description here

Риландерс ( источник ):
enter image description here

Дизеринг ( источник ):
enter image description here

Круги ( Источник ):
enter image description here

0 голосов
/ 11 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...