Этот пример показывает, как сгенерировать многоуровневые пиксельные потоки пирамиды изображений от входного потока. Эта модель выводит несколько пиксельных потоков путем субдискретизации оригинального изображения и в горизонтальных и в вертикальных направлениях, использования Гауссовой фильтрации. Этот тип фильтра старается не искажать артефакты.
Пирамида изображений используется во многих приложениях для обработки изображений, таких как сжатие изображения, обнаружение объектов и распознавание с помощью методов, таких как сверточная нейронная сеть (CNN) или совокупные функции канала (ACF). Пирамида изображений также подобна представлению пробела шкалы.
Модель в качестве примера берет ввод видео на 240 пунктов и производит три потока вывода: 160x120, 80x60, и 40x30.
modelname = 'ImagePyramidHDL'; open_system(modelname); set_param(modelname,'SampleTimeColors','on'); set_param(modelname,'SimulationCommand','Update'); set_param(modelname,'Open','on'); set(allchild(0),'Visible','off');
Каждый уровень пирамиды содержит блок Line Buffer и фильтр субдискретизации.
open_system([modelname '/ImagePyramidTop/ResamplingPyramidFilter'],'force');
Аппроксимированные Гауссовы коэффициенты фильтра в [1] использовались во многих реализациях пирамиды изображений. Этими коэффициентами дают:
format long
Hh = [1 4 6 4 1]./16;
Hv = Hh';
Hg = Hv*Hh
Hg = Columns 1 through 3 0.003906250000000 0.015625000000000 0.023437500000000 0.015625000000000 0.062500000000000 0.093750000000000 0.023437500000000 0.093750000000000 0.140625000000000 0.015625000000000 0.062500000000000 0.093750000000000 0.003906250000000 0.015625000000000 0.023437500000000 Columns 4 through 5 0.015625000000000 0.003906250000000 0.062500000000000 0.015625000000000 0.093750000000000 0.023437500000000 0.062500000000000 0.015625000000000 0.015625000000000 0.003906250000000
Результаты подобны, но не точно то же самое как Гауссово ядро с 1,0817797 стандартными отклонениями. Так, Hg
является аппроксимированным Гауссовым ядром.
Hf = fspecial('gaussian',5,1.0817797)
Hf = Columns 1 through 3 0.004609023214619 0.016606534868404 0.025458671096979 0.016606534868404 0.059834153028525 0.091728830511040 0.025458671096979 0.091728830511040 0.140625009648116 0.016606534868404 0.059834153028525 0.091728830511040 0.004609023214619 0.016606534868404 0.025458671096979 Columns 4 through 5 0.016606534868404 0.004609023214619 0.059834153028525 0.016606534868404 0.091728830511040 0.025458671096979 0.059834153028525 0.016606534868404 0.016606534868404 0.004609023214619
Фильтр, Hg
, очевидно отделим, поскольку он был создан из горизонтальных и вертикальных векторов. Поэтому отделимая реализация фильтра является хорошим выбором. Многие содействующие значения являются степенями двойки или комбинацией только двух степеней двойки. Эти значения означают, что реализация фильтра может заменить умножение на сдвиг и добавить методы, такие как каноническая цифра со знаком (CSD). Каждый вектор в отделимом представлении также симметричен, таким образом, реализация фильтра использует предварительный сумматор симметрии, чтобы далее сократить количество операций.
После фильтрации низкой передачи с аппроксимированным Гауссовым фильтром выше, модель затем субдискретизирует пиксельный поток два и в горизонтальных и в вертикальных направлениях. Это, в основном, выполняется путем чередования допустимого любого пикселя сигнала. Модель также воссоздает другие сигналы шины pixelcontrol
.
Модель включает горизонталь и вертикальные счетчики, которые сравнивают количество выходных пикселей и строк с параметрами маски для активных пикселей и строк. Модель использует эти количества, чтобы воссоздать конец строки (hEnd), и конец кадра (продают) сигналы.
После субдискретизации однажды, шина pixelcontrol
допустимый сигнал чередуется высоко и затем низкий любой пиксель. После того, как вторые субдискретизируют, это чередуется с шаблоном одного допустимого пикселя, сопровождаемого тремя недопустимыми пикселями. В некоторых приложениях можно хотеть собрать все допустимые пиксели в постоянно допустимый промежуток времени. Блок Pixel Stream FIFO, используемый между, субдискретизирует этапы, производит непрерывные допустимые пиксели для каждой строки.
Каждая подсистема ResamplingPyramidFilter принимает параметры для выходного формата кадра. Эти числа должны быть целыми числами и фактором двух меньших, чем входное изображение. Если входное количество пикселей на строку нечетно, а даже не, то округлите в меньшую сторону до следующего целого числа. Например, если входной размер составляет 25 пикселей на строку, требуемый выходной размер должен составить 12 пикселей на строку.
Гауссово ядро фильтра, используемое в традиционной пирамиде изображений, не является единственным фильтром нижних частот, который мог использоваться. Используя сохраняющий ребро фильтр нижних частот, такой как двусторонний фильтр, с различными размерами ядра, сохранил бы больше детали в пирамиде.
Иногда полезно вычислить различие между двумя уровнями пирамиды изображений. Этот алгоритм называется Лапласовой пирамидой. Меньший уровень сверхдискретизирован к тому же размеру как больший уровень и отфильтрован. Фильтр обычно является масштабированной версией того же аппроксимированного Гауссова фильтра, используемого в этой модели. Различие между слоями представляет информацию, потерянную в процессе субдискретизации. Лапласова пирамида может использоваться для приложений включая удаление сердцевины для удаления шума, составляя изображения, взятые в разное время или с различными фокусными расстояниями и многими другими.
Потенциальное ограничение этой модели - то, что существует довольно высокая задержка между потоками вывода. Эта задержка происходит, потому что вторые и третьи уровни зависят от вывода от предыдущего уровня. Этого можно было избежать путем создания параллельных фильтров, работающих с большим количеством строк. Этот пример реализует фильтр 5 на 5, который хранит 5 строк на каждом уровне. Более низкая реализация параллели задержки требует 13 строк устройства хранения данных для двухуровневого фильтра или 103 строк для трехуровневого фильтра. Это обычно не экономически эффективный компромисс.
На FPGAs буферная память строки обычно реализуется с помощью блока RAM. Меньшая память может быть реализована в матрице FPGA и известна как распределенные RAM. Ваш инструмент синтеза выбирает блок или распределил RAM в зависимости от ресурсов вашего устройства. Когда размер строки становится меньшим из-за субдискретизации, распределенные RAM могут быть более эффективными. В этом примере Буфер Строки блокируется на каждом резервном пробеле уровня для до 2k пикселей на строку. Этот размер является размером по умолчанию для Буфера Строки и размещает видео формата на 1 080 пунктов. Чтобы предназначаться для распределенных RAM, задайте маленькую степень двойки для параметра buffer size Строки. В этом примере вы могли установить буферные размеры строки этих трех уровней к 256, 128, и 64.
[1] Берт, P. и Э. Адельсон. "Лапласова Пирамида как Компактный Код Изображений. "Транзакции IEEE на Коммуникациях 31, № 4 (апрель 1983): 532-40.