Этот пример показывает, как уменьшить изображение с помощью билинейного, бикубического или Lanczos-2 алгоритма интерполяции. Реализация использует архитектуру, подходящую для ПЛИС.
В теории можно добиться точной реконструкции изображения, изменив размер изображения с помощью ядра sinc. Однако ядра sinc имеют бесконечную пространственную протяженность. Чтобы ограничить степень, реализации интерполяции используют более простые ядра, чтобы аппроксимировать sinc. Алгоритм билинейной интерполяции использует взвешенную сумму ближайших четырех пикселей, чтобы определить значения выходных пикселей. Бикубическая и 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);
Билинейная интерполяция определяет значение вставленного пикселя из взвешенного среднего значения четырёх входов пикселей, ближайших к вставленному местоположению. и являются горизонтальной шкалой и вертикальной шкалой, соответственно, и вычисляются независимо.
Значение для каждого выходного пикселя задается как.
Бикубический алгоритм вычисляет среднее значение 16 входных пикселей, ближайших к вставленному местоположению.
Бикубические коэффициенты заданы как.
Эти уравнения показывают, что билинейный и бикубический алгоритмы вычисляют коэффициенты для каждого выходного пикселя.
Алгоритм Lanczos-2 предварительно вычисляет коэффициенты на основе коэффициента изменения размера. Модель вызывает lanczos2_coeffi.m
скрипт, чтобы вычислить и сохранить эти коэффициенты. Скрипт вычисляет коэффициенты Lanczos-2 с помощью 6 отводов и 32 фаз.
Этот рисунок показывает принцип, используемый для реализации алгоритма изменения размера изображения для оборудования. Для примера рассмотрите понижение дискретизации изображения в шкалу множитель 3/4. Одной из возможных реализаций понижающей дискретизации изображения на 3/4 является увеличение в 3 раза, а затем понижение в 4 раза. Рисунок показывает индексы пикселей после этих операций. Синие точки представляют исходные пиксели, а зеленые кресты представляют интерполированные пиксели после увеличения дискретизации.
Индексы после понижающей дискретизации показывают, что не все интерполированные пиксели используются в выходном изображении. Этот пример реализует более эффективную версию шага downsample путем генерации интерполированных пикселей только тогда, когда они необходимы в выходном изображении.
Фаза, показанная в нижней линии рисунка, является индексом, который выбирает, какие пиксели необходимы для выходного изображения. Когда фаза равна 0, алгоритм возвращает исходное входное значение пикселя. Когда фаза равна 1, алгоритм вычисляет коэффициенты, чтобы сгенерировать интерполированный пиксель в первой позиции. Когда фаза равна 2, алгоритм вычисляет коэффициенты, чтобы сгенерировать интерполированный пиксель во второй позиции.
Подобно imresize
function, подсистема imesize (downsample) в этой модели поддерживает два способа определения размера выходного изображения. Можно задать коэффициент шкалы в диапазоне от 1,000 до 127,999, или можно задать выход системы координат ширину и высоту в пикселях. Дважды кликните подсистему imesize (downsample), чтобы задать ее параметры.
Чтобы избежать сглаживания, введенного снижением частоты дискретизации, модель включает lowpass перед подсистемой imresize (downsample). После подсистемы imesize (downsample) блок 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 (downsample) 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, является подсистемой вариантов, где генераторы билинейных, бикубических и 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');
Эти таблицы показывают использование ресурсов для подсистемы imesize (downsample) с видео входа 240p и не включают lowpass фильтр или Pixel Stream FIFO. Проекты синтезировали для достижения тактовой частоты 150 МГц.
Эта таблица показывает ресурсы для каждого из трех алгоритмов при понижающей дискретизации в пространстве цветов HSV.
Эта таблица показывает ресурсы для каждого из трех алгоритмов при понижающей дискретизации в пространстве цветов RGB.
[1] Ключи, R. «Кубическая сверточная интерполяция для цифровой обработки изображений». Транзакции IEEE по акустике, речи и обработке сигналов 29, № 6 (декабрь 1981): 1153-60. https://doi.org/10.1109/TASSP.1981.1163711.
[2] Смит, Элви Рэй. «Преобразование цветовой гаммы Пар». В Трудах V Ежегодной конференции по компьютерной графике и интерактивным Методам - SIGGRAPH '78, 12-19. Не известно: ACM Press, 1978. https://doi.org/10.1145/800248.807361.