Помогите с теорией позади алгоритма pixelate? - PullRequest
5 голосов
/ 29 октября 2010

Скажем, у меня есть изображение, которое я хочу «пикселировать». Я хочу, чтобы это четкое изображение было представлено сеткой, скажем, размером 100 х 100 квадратов. Поэтому, если исходная фотография имеет размер 500 px X 500 px, каждый квадрат имеет размер 5 px X 5 px. Таким образом, каждый квадрат будет иметь цвет, соответствующий группе пикселей размером 5 px X 5 px, которую он меняет на ...

Как мне выяснить, что это за один цвет, который лучше всего отражает материал, который он покрывает? Должен ли я просто взять числа R G и B для каждого из 25 пикселей и усреднить их? Или есть какой-то неясный другой способ, о котором я должен знать? Что обычно используется в функциях «пикселизации», например, в фотошопе?

Ответы [ 2 ]

12 голосов
/ 29 октября 2010

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

Для понижающей дискретизации в целом, для понижающей дискретизации с коэффициентом n изображение сначала фильтруется соответствующим фильтром нижних частот,и затем берется один образец из каждого n .«Идеальным» фильтром для использования является sinc filter , но из-за проблем с его реализацией Lanczos filter часто используется как близкая альтернатива.

Однако, для почти всех целей при выполнении пикселизации, использование простого box blur должно работать нормально и очень просто для реализации.Это всего лишь среднее из ближайших пикселей.

Если вам не нужно изменять выходной размер изображения, то это означает, что вы делите изображение на блоки (большие результирующие пиксели), которые равны k × k пикселей, а затем замените все пиксели в каждом блоке на среднее значение пикселей в этом блоке.

1 голос
/ 29 октября 2010

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

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

, чтобы узнать больше алгоритмов, проверьте многомерную интерполяцию

...