2009-05-18 2 views
11

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

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

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

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

+0

У вашего редактирования есть правильная идея. 1,2,3,4,5,6 -> 1,5, 3,5, 5,5. Другим примером является 6,0,6,0,6,0 -> 3, 3, 3; который лучше 0,0,0 или 6,6,6. – tom10

ответ

5

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

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

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

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

alt text

+0

Таким образом, одномерный алгоритм масштабирования, который подсчитывает среднее значение, может выглядеть так (6 баллов до 3 баллов): 1,2,3,4,5,6 = (1 + 2)/2, (3 + 4)/2 , (5 + 6)/2. Верный? Здесь сетка выборки включает в себя две точки в масштабе, но должен ли я пробовать больше точек в большем количестве направлений? – Mizipzor

+0

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

+2

Я думаю, что изображения отсутствуют. Или вы действительно хотите отобразить этот образ обложки DVD? Не могли бы вы повторить образы? Это очень помогло бы. – Joerg

8

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

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

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

+0

Но при масштабировании четным делителем (2, 4, 8) простым отбрасыванием данных также возникают ошибки выборки, правильно? – Mizipzor

+1

Да, это определенно не будет таким же, как «на самом деле» повторная выборка исходных данных. Тем не менее, интерполяция «догадывается», где могут быть, но это не гарантирует, что они на самом деле там. Вам нужно будет повторно просмотреть исходные данные, если вы хотите, чтобы они были точными. – sybreon

+2

«Усреднение» лучше, чем отбрасывание - это может привести к более плавному уменьшению результата. В некоторых случаях более сложные фильтры используются для взвешивания групп точек при масштабировании. При уменьшении масштабирования двухмерного изображения вам придется класть много точек, а не только несколько соседних точек. –

9

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

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

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

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

Не думайте о центрах снова ... центры новых пикселей находятся в (3/4) n и в (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).

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

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

+1

Очень хороший ответ, мне понадобилось перо и бумага, чтобы поехать, но я думаю, что у меня это получилось. Но предположим, что мы делим размер с некоторым четным числом (2,4,8), так что сетка образцов идеально выравнивается со старой сеткой пикселей. Будет ли я тогда всегда брать равное количество пиксельных данных от каждого пикселя в каждой ячейке сетки выборки? – Mizipzor

+0

если это даже вы могли бы усреднить. Существует много разных способов масштабирования изображения. – Demi

+1

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

6

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

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

+0

Можете ли вы восстановить изображение? – nobar

+0

@nobar: извините, но я понятия не имею, куда пошло изображение и, конечно же, нет 5-летней копии. Надеюсь, SO или imageshack восстановит его ... знаете ли вы, как долго он исчез? В противном случае, я могу получить возможность повторить его, но у меня его нет. – tom10

2

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

Давайте один ряд пикселей:

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 

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

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

1

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

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

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

Смежные вопросы