В этом примере показано, как уменьшить выборку изображения с помощью алгоритма интерполяции bilinear, bicubic или Lanczos-2. В реализации используется архитектура, подходящая для FPGA.
Теоретически точную реконструкцию изображения можно добиться, изменив размер изображения с помощью ядра sinc. Однако ядра sinc имеют бесконечную пространственную протяженность. Для ограничения степени реализации интерполяции используют более простые ядра для аппроксимации sinc. Алгоритм билинейной интерполяции использует взвешенную сумму ближайших четырех пикселей для определения значений выходных пикселей. Бикубическая и Lanczos-2 интерполяция - аппроксимации ядра sinc. Бикубическая интерполяция является более вычислительно эффективным вариантом метода Lanczos-2.
По умолчанию функция 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. На рисунке показаны индексы пикселей после этих операций. Синие точки представляют исходные пикселы, а зеленые крестики - интерполированные пикселы после повышения дискретизации.

Индексы после понижающей дискретизации показывают, что не все интерполированные пиксели используются в выходном изображении. Этот пример реализует более эффективную версию шага понижающей выборки путем генерации интерполированных пикселей только тогда, когда они необходимы в выходном изображении.
Фаза, показанная в нижней строке рисунка, является индексом, который выбирает, какие пиксели необходимы для выходного изображения. Когда фаза равна 0, алгоритм возвращает исходное значение входного пикселя. Когда фаза равна 1, алгоритм вычисляет коэффициенты для генерации интерполированного пикселя в первой позиции. Когда фаза равна 2, алгоритм вычисляет коэффициенты для генерации интерполированного пикселя во второй позиции.
Аналогично imresize функция подсистемы imresize (downsample) в этой модели поддерживает два способа определения размера выходного изображения. Можно задать масштабный коэффициент в диапазоне от 1,000 до 127,999 или определить ширину и высоту выходного кадра в пикселях. Дважды щелкните подсистему imresize (downsample), чтобы задать ее параметры.
Чтобы избежать наложения путем снижения частоты дискретизации, модель включает фильтр нижних частот перед подсистемой imresize (downsample). После подсистемы imresize (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 возвращают управляющие сигналы, которые используются для генерации коэффициентов и восстановления выходной шины управления. Если последняя строка изображения не содержит действительных пикселей после понижающей дискретизации, то подсистема, используемая для этого, перестраивает шину управления для нового размера.
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');

Эти таблицы показывают использование ресурсов для подсистемы imresize (downsample) с входным видео 240p и не включают фильтр нижних частот или Pixel Stream FIFO. Конструкция была синтезирована для достижения тактовой частоты 150 МГц.
В этой таблице показаны ресурсы для каждого из трех алгоритмов при пониженной дискретизации в цветовом пространстве HSV.

В этой таблице показаны ресурсы для каждого из трех алгоритмов при пониженной дискретизации в цветовом пространстве RGB.

[1] Клавиши, R. «Интерполяция кубического свертывания для обработки цифрового изображения». Транзакции IEEE по акустике, речи и обработке сигналов 29, № 6 (декабрь 1981): 1153-60. https://doi.org/10.1109/TASSP.1981.1163711.
[2] Смит, Альви Рэй. «Пары преобразования цветовой гаммы». В материалах пятой ежегодной конференции по компьютерной графике и интерактивным методам - SIGGRAPH '78, 12-19. Неизвестно: ACM Press, 1978. https://doi.org/10.1145/800248.807361.