В этом примере показано, как проредить изображение при помощи билинейного, bicubic, или алгоритм интерполяции Lanczos-2. Реализация использует архитектуру, подходящую для FPGAs.
В теории можно достигнуть точной реконструкции изображений путем изменения размеров изображения с помощью sinc ядра. Однако ядра sinc имеют бесконечную пространственную степень. Чтобы ограничить степень, реализации интерполяции используют более простые ядра, чтобы аппроксимировать sinc. Алгоритм билинейной интерполяции использует взвешенную сумму самых близких четырех пикселей, чтобы определить значения выходных пикселей. Bicubic и интерполяции Lanczos-2 являются приближениями sinc ядра. Бикубическая интерполяция является более в вычислительном отношении эффективной версией метода Lanczos-2.
По умолчанию, Image Processing Toolbox™ функционируют imresize
использует алгоритм бикубической интерполяции. Можно выбрать билинейные или алгоритмы интерполяции Lanczos-2 путем установки 'Method'
аргумент пары "имя-значение" 'bilinear'
или 'lanczos-2'
, соответственно.
v = VideoReader('rhinos.avi'); I = readFrame(v); Y = imresize(I,[160,256],'Method','bilinear'); figure; imshow(Y);
Билинейная интерполяция определяет вставленное пиксельное значение из взвешенного среднего этих четырех входных пикселей, самых близких к вставленному местоположению. и горизонтальный масштаб и вертикальная шкала, соответственно, и вычисляется независимо.
Значением для каждого выходного пикселя дают.
bicubic алгоритм вычисляет среднее значение этих 16 входных пикселей, самых близких к вставленному местоположению.
bicubic коэффициентами дают.
Эти уравнения показывают, что билинейные и bicubic алгоритмы вычисляют коэффициенты для каждого выходного пикселя.
Алгоритм Lanczos-2 предварительно вычисляет коэффициенты на основе изменить размер фактора. Модель вызывает lanczos2_coeffi.m
скрипт, чтобы вычислить и сохранить эти коэффициенты. Скрипт вычисляет коэффициенты Lanczos-2 с помощью 6 касаний и 32 фаз.
Этот рисунок показывает, что принцип, используемый, чтобы реализовать изображение, изменяет размер алгоритма для оборудования. Например, рассмотрите субдискретизацию изображения масштабным коэффициентом 3/4. Одна возможная реализация субдискретизации изображения 3/4 должна сверхдискретизировать на коэффициент 3 и затем проредить на коэффициент 4. Рисунок показывает пиксельные индексы после этих операций. Синие точки представляют исходные пиксели, и зеленые кресты представляют интерполированные пиксели после повышающей дискретизации.
Индексы после субдискретизации показывают, что не все интерполированные пиксели используются в выходном изображении. Этот пример реализует более эффективную версию прореживать шага путем генерации интерполированных пикселей только, когда они необходимы в выходном изображении.
Фаза, показанная в нижней строке фигуры, является индексом, который выбирает, какие пиксели необходимы для выходного изображения. Когда фаза 0, алгоритм возвращает исходное значение входного пикселя. Когда фаза равняется 1, алгоритм вычисляет коэффициенты, чтобы сгенерировать интерполированный пиксель в первом положении. Когда фаза равняется 2, алгоритм вычисляет коэффициенты, чтобы сгенерировать интерполированный пиксель во втором положении.
Подобно imresize
функция, imresize (прореживают) подсистему в этих поддержках модели два способа задать размер выходного изображения. Можно задать масштабный коэффициент в пределах от 1 000 к 127,999, или можно задать выходную ширину системы координат и высоту в пикселях. Дважды кликните imresize (прореживают) подсистему, чтобы установить ее параметры.
Чтобы постараться не искажать введенный путем понижения частоты дискретизации, модель включает фильтр lowpass, прежде чем imresize (проредят) подсистему. После того, как imresize (прореживают) подсистему, блок Pixel Stream FIFO консолидирует выходные пиксели в непрерывные линии допустимых пикселей, окруженных интервалами гашения недопустимых пикселей. Этот FIFO является дополнительным. Используйте FIFO, когда это необходимо, чтобы использовать в своих интересах увеличенный интервал гашения, чтобы выполнить дальнейшие расчеты на пиксельном потоке. Блок Measure Timing отображает размер выходных систем координат.
modelname = 'ImageResizeForFPGAHDL'; open_system(modelname); set_param(modelname,'SampleTimeColors','on'); set_param(modelname,'Open','on'); set(allchild(0),'Visible','off');
В imresize (прореживают) подсистему, input_conversion и output_conversion подсистемы преобразуют цветовое пространство пиксельного потока на основе параметра на маске. valid_gen_horizontal и valid_gen_vertical подсистемы возвращают управляющие сигналы, которые используются для генерации коэффициентов и восстановления шины элемента управления выводом. Если последняя линия изображения не содержит допустимых пикселей после того, как субдискретизация, ctrlBusRebuild подсистема восстановит шину управления для нового размера.
open_system([modelname '/imresize(downsample)'],'force');
Эта схема показывает ожидаемый выход от valid_gen_horizontal и valid_gen_vertical подсистем. Допустимый сигнал указывает на валидность текущего адреса и соответствующей фазы. Чтобы упростить восстановление шины управления, первая линия и строка каждой выходной системы координат всегда допустимы.
Содействующая подсистема генерации, coeffi_gen, является различной подсистемой, где билинейный, bicubic, и содействующие генераторы Lanczos-2 реализованы отдельно. Можно выбрать алгоритм из маски.
open_system([modelname '/imresize(downsample)/coeffi_gen'],'force');
resize_process_element подсистемы умножают коэффициенты с каждым пиксельным компонентом при помощи отделимого фильтра в вертикальном порядке и затем в горизонтальном порядке. trim_0_1 подсистема гарантирует, что результат между 0 и 1.
open_system([modelname '/imresize(downsample)/resize_process_element_H'],'force');
Эти таблицы показывают, что использование ресурсов для imresize (прореживает) подсистему с вводом видео на 240 пунктов и не включает фильтр lowpass или Пиксельный Поток FIFO. Проект синтезировался, чтобы достигнуть тактовой частоты 150 МГц.
Эта таблица показывает ресурсы для каждого из трех алгоритмов, когда прорежено в HSV-цветовом пространстве.
Эта таблица показывает ресурсы для каждого из трех алгоритмов, когда прорежено в цветовом пространстве RGB.
[1] Ключи, R. "Кубическая Интерполяция Свертки для Цифровой обработки изображений". Транзакции IEEE на Акустике, Речи и Обработке сигналов 29, № 6 (декабрь 1981): 1153-60. https://doi.org/10.1109/TASSP.1981.1163711.
[2] Смит, Альви Рэй. "Пары Преобразования Цветового охвата". В Продолжениях 5-й Ежегодной конференции по вопросам Компьютерной графики и Интерактивных Методов - SIGGRAPH '78, 12-19. Не Известный: Нажатие ACM, 1978. https://doi.org/10.1145/800248.807361.