2014-01-27 2 views
3

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

supersampling Я имею в виду метод, который делит исходное изображение на равные прямоугольники, каждый прямоугольник, соответствующий пикселю в целевом изображении. На мой взгляд, это самый естественный и точный метод. Он учитывает все пиксели исходного изображения, тогда как билинейные могут пропускать некоторые пиксели. Насколько я вижу, качество также очень высокое, сопоставимое с lanczos.

Почему популярные библиотеки изображений (такие как GraphicsMagic, GD или PIL) не реализуют этот алгоритм? Я нашел реализацию только в проектах Intel IPP и AMD Framewave. Я знаю, по крайней мере, один недостаток: его можно использовать только для уменьшения масштаба, но я пропущу что-то еще?

Для сравнения это уменьшенное изображение размером 4.26x. Слева направо: GraphicsMagic Sinc фильтр (910ms), Framewave Супер метод (350 мс), GraphicsMagic треугольник фильтр (320ms):

http://i.stack.imgur.com/Csvg8.png

ответ

1

Теперь я знаю ответ. Потому что pixel is not a little square. И именно поэтому изменение размера суперсэмплинга дает aliased результат. Это видно на тонких струях воды на образце. Это не фатально, и суперсэмплинга может использоваться для масштабирования до 2x, 3x и т. Д., Чтобы резко уменьшить размер изображения до изменения размера до точных размеров с помощью другого метода. Этот метод используется в jpeglib для открытия изображений меньшего размера.

Конечно, мы все еще можем думать о пикселях как квадратах, и на самом деле, библиотека GD. Это imagecopyresampled - истинная суперсэмплинг.

0

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

1

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

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

Ответ на ваш вопрос - рассмотрение скорости. Учитывая скорость вашего CPU/GPU, размер изображения и желаемую частоту кадров, вы можете легко вычислить, сколько операций вы можете выполнить для каждого пикселя. Например - с размером 2 ГГц и размером изображения [Gpix] вы можете делать только несколько расчетов для каждого пикселя каждую секунду. Учитывая количество разрешенных вычислений - вы выбираете наилучшие алгоритмы. Поэтому решение обычно не зависит от качества изображения, а скорее от соображений скорости.

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

Более того - я не знаю, знакомы ли вы с обратной проекцией. Это способ интерполяции изображения из пункта назначения в источник вместо источника в пункт назначения. Используя обратную проекцию, вы можете увеличить изображение в 10 раз, использовать билинейную интерполяцию и по-прежнему быть математически корректным.

+0

«Ответ на ваш вопрос - это рассмотрение скорости». Но в моем примере суперсэмплинг он в 2,5 раза быстрее, чем sinc и дает лучшее качество, чем треугольник. – homm

+0

Я не знаком с вашими испытаниями, вашим CPU и размером изображения. Но билинейный может выполняться всего несколько раз медленнее, чем просто копировать изображение. Другими словами, это, вероятно, займет несколько миллисекунд, а не сотни миллисекунд. На моем ноутбуке (Intel i7) изменение размера изображения размером 1.5 [mpix] до 0,24 [mpix] (размер изображения, который вы отправили) занимает около 9 [мсек] – DanielHsH

+0

Это часть измененного изображения. Здесь он [оригинал] (http://en.wikipedia.org/wiki/File:Louvre_Cour_Carree.jpg). – homm

0

Короткий ответ: они супер-выборки. Я думаю, что проблема - это терминология.

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

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

Лично меня всегда путал Adobe Photoshop, который спрашивает меня, хочу ли я «бикубический» или «билинейный», когда масштабируюсь. Но Bilinear, Bicubic и Lanczos являются методами интерполяции, а не методами прореживания.

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

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