Алгоритмы интерполяции при масштабировании

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

Но масштабирование? Я не могу видеть, как там может быть использован любой метод интерполяции. Нет пробелов для заполнения!

Я застрял с этим далеко недолго, дайте мне толчок в правильном направлении. Как вы интерполируете, когда вы фактически удаляете известные данные?

Изменить. Предположим, мы имеем одномерное изображение с одним цветным каналом на точку. Алгоритм масштабирования масштабирования от 6 до 3 баллов по среднему значению пикселей выглядит следующим образом: 1,2,3,4,5,6 = (1 + 2)/2, (3 + 4)/2, (5 + 6)/2 Я здесь, на правильном пути? Является ли эта интерполяция уменьшением масштаба, а не просто отбрасыванием данных?

Ответ 1

Здесь у вас есть исходное изображение сверху, затем алгоритм наивного удаления в середине и интерполирующий снизу внизу.

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

Нет, и то же самое происходит с логотипом stackoverflow. Как вы можете видеть при первом уменьшении масштаба, изображение потеряло мягкость по краям и выглядит ужасно. Второе масштабирование сохраняло гладкость по краям путем усреднения окружения пикселов.

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

alt text

Ответ 2

Если один концептуализирует исходный пиксель с шириной n, то центр пикселя равен n/2 от любого края.

Можно предположить, что эта точка, в центре пикселя, определяет цвет.

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

Пример: скажем, ваше изображение имеет высоту 1 пиксель и 3 пикселя в ширину, и вы будете только горизонтально уменьшаться. Допустим, вы собираетесь изменить это на 2 пикселя в ширину. Теперь исходное изображение 3n, и вы поворачиваете его на 2 пикселя, поэтому каждый новый пиксель будет занимать (3/2) исходного пикселя изображения.

Не задумывайтесь о центрах снова... центры новых пикселей находятся в (3/4) n и at (9/4) n [который равен (3/4) + (3/2)]. Исходные пиксельные центры были в (1/2) n, (3/2) n и (5/2) n. Таким образом, каждый центр находится где-то между тем, где мы находим исходные центры пикселей - не совпадают с центрами исходных пикселей. Посмотрим на первый пиксель в (3/4) n - это (1/4) n от исходного первого пикселя и (3/4) n от исходного второго пикселя.

Если мы хотим поддерживать гладкое изображение, используйте обратное соотношение: возьмите (3/4) значения цвета первого пикселя + (1/4) значений цвета второго, так как новый центр пикселей, концептуально, будет ближе к первому исходному центру пикселей (n/4), чем к второму (3n/4).

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

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

Ответ 3

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

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

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

Ответ 4

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

alt text http://img391.imageshack.us/img391/3310/downsampling.png

Ответ 5

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

Позволяет взять одну строку пикселей:

P     P     P     P     P     P     P     P     P

и мы, тем не менее, хотим знать значения пикселей для использования в промежуточных точках:

P   P   P   P   P   P   P   P   P   P   P   P   P

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

P       P       P       P       P       P       P

(Конечно, мы хотим сделать это в двух измерениях, а не в одном, но это тот же принцип.)

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

Ответ 6

Если вы используете оконный фильтр sinc, например lanczos, он фактически отфильтровывает детали высокой частоты, которые не могут быть представлены при более низком разрешении. Фильтр усреднения не делает этого, вызывая артефакты. Фильтр sinc также производит более четкое изображение и работает как для масштабирования, так и для масштабирования.

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

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