Что такое хороший алгоритм для создания полутоновых изображений (например, this)? Быстрый поиск в Google вызывает кучу бумаг на эту тему, но трудно судить, какие из них хорошие, эффективные и т.д. Есть ли лучший выбор для такого рода вещей?
Алгоритм создания полутоновых изображений?
Ответ 1
- Отфильтруйте до разрешения, которое вы хотите, чтобы "точки" были разделены.
- Получите среднюю интенсивность пиксельной группы в этой области.
- Нарисуйте точку так, чтобы поверхность площадь точки равна процентов от белого до черного средняя интенсивность.
Подумайте о группах пикселей как шестиугольной сетке. Используйте функцию круга, чтобы определить, какие пиксели входят в группу. Вы можете настроить перекрытие кругов, чтобы настроить черный/насыщенный выход. Это действительно предназначено для вывода высокого разрешения, такого как печать. Если вы делаете это для отображения на экране в качестве визуального эффекта, убедитесь, что вы используете процедуру сглаживания кругового изображения, чтобы компенсировать низкое разрешение дисплея. (По сравнению с печатью даже HD не так высок.)
Если вы делаете это, потому что вам нравится эффект, это круто. Но если вы просто хотите сбежать до черно-белого изображения, подумайте об использовании "Floyd-Steinberg". Он обеспечивает высокое качество результатов и распространяет ошибку на изображении. http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering
Ответ 2
Полутонация очень эффективна.
Одноуровневый полутоновый режим: Вход: пиксели с вашего изображения; предварительно сконфигурированный "экран", содержащий пороговые значения. Во время выполнения: для каждого цветного канала для каждого пикселя выберите одно пороговое значение (индекс в пороговый массив по модулю размеров массива). Одно сравнение между пикселем и порогом определяет, включено или выключено выходное значение.
Он также обобщает многоуровневый вывод, используя несколько экранов.
Интересной частью является построение экранов (пороговых массивов). Существует множество вариаций - кластерная точка (AM), стохастическая (FM), множество вариаций и гибридов, включая синий шум и зеленый шум (AM/FM). И обычно вам нужен другой экран для каждого цветного канала. Традиционные кластерные точечные экраны помещают свои точки в прямоугольные сетки, которые могут быть описаны по их частоте (низкая частота = большие точки) и углу (обычно 15 ° для голубого, 75 ° для Magenta, 90 ° для желтого и 45 ° для черных).
Если вы хотите поэкспериментировать, Photoshop Bitmap с методом полутонового экрана (см. этот tutorial) имеет встроенный генератор экрана и будет отобразите изображение в оттенках серого в растровое изображение точно так же, как ваш пример.
Методы сглаживания, предложенные другими, требуют большего количества вычислений на пиксель, и результат не похож на пример с полутоновым отображением с кластеризованной точкой.
Ответ 3
Существует много вариантов реализации алгоритмов с открытым исходным кодом для создания полутоновых изображений. Вы можете посмотреть исходные коды. Ниже представлены несколько реализаций, разработанных на Java, с использованием Marvin Image Processing Framework.
Диффузия ошибок (источник):
Rylanders (источник):
Сглаживание (источник):
Круги (источник):
Ответ 4
Самый простой способ сделать это - пойти по пикселям по пикселям и использовать случайность: для каждого пикселя, вероятность его раскрашивания = темнота исходного цвета.
Это может дать вам двухлинейный алгоритм сглаживания. Это не будет выглядеть так же хорошо, как Флойд-Штейнберг (потому что тот отслеживает ошибки) или столь же артистичен, как "плитка", а затем кладет диски в каждую плитку, чтобы фракция черного = средняя темнота в исходной плитки ", но на практике он работает довольно хорошо.