主要内容

图像金字塔

这个例子展示了如何从输入流生成多级图像金字塔像素流。该模型通过使用高斯滤波在水平和垂直方向上对原始图像进行下采样来派生多个像素流。这种类型的过滤器可以避免混叠。实现使用了适合fpga的架构。

图像金字塔被用于许多图像处理应用,如图像压缩,使用卷积神经网络(CNN)或聚合通道特征(ACF)等技术进行目标检测和识别。图像金字塔也类似于尺度空间表示。

示例模型接受一个240p视频输入,并产生三个输出流:160x120、80x60和40x30。

modelname =“ImagePyramidHDL”;open_system (modelname);set_param (modelname“SampleTimeColors”“上”);set_param (modelname“SimulationCommand”“更新”);set_param (modelname“开放”“上”);集(allchild (0)“可见”“关闭”);

金字塔的每一层都包含一个行缓冲块和一个下采样滤波器。

open_system ([modelname“/ ImagePyramidTop / ResamplingPyramidFilter”),“力”);

滤波器系数

近似高斯滤波系数[1]已经在一些图像金字塔的实现中使用过。这些系数由:

格式Hh = [1 4 6 4 1]./16;Hv = Hh';Hg = Hv*Hh
Hg =列1到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列4到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(“高斯”5, 1.0817797)
高频=列1到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列4到5 0.016606534868404 0.004609023214619 0.059834153028525 0.016606534868404 0.091728830511040 0.025458671096979 0.059834153028525 0.016606534868404 0.016606534868404 0.004609023214619

过滤器,Hg,显然是可分离的,因为它是由水平向量和垂直向量构成的。因此,可分离过滤器实现是一个很好的选择。许多系数值是2的幂,或者仅仅是2的2的幂的组合。这些值意味着过滤器实现可以用移位和添加技术代替乘法,例如规范有符号数字(CSD)。可分离表示中的每个向量也是对称的,因此过滤器实现使用对称预加法器来进一步减少操作的数量。

降采样

在用上面的近似高斯滤波器进行低通滤波后,模型在水平和垂直方向上分别对像素流进行两个下采样。这主要是通过每隔一个像素交替有效信号来实现的。该模型还可以重新创建另一个模型pixelcontrol总线信号。

该模型包括水平和垂直计数器,用于将输出像素和行数与活动像素和行的掩码参数进行比较。该模型使用这些计数来重新创建行结束(hEnd)和帧结束(vEnd)信号。

在降采样一次之后pixelcontrol总线有效信号每隔一个像素交替高电平和低电平。在第二次下采样之后,它交替使用一个有效像素后面跟着三个无效像素的模式。在某些应用程序中,您可能希望将所有有效像素收集到一个连续有效的时间段中。像素流FIFO块用于下采样阶段之间,为每一行生成连续的有效像素。

每个ResamplingPyramidFilter子系统接受输出帧大小的参数。这些数字必须是整数,并且要比输入图像小两倍。如果每行输入的像素数是奇数而不是偶数,则四舍五入到下一个整数。例如,如果输入大小为每行25像素,则请求的输出大小必须为每行12像素。

要进一步

传统图像金字塔中使用的高斯滤波核并不是唯一的低通滤波器。使用具有不同内核大小的边保持低通滤波器,如双边滤波器,将保留金字塔中的更多细节。

有时计算图像金字塔的两个层次之间的差异是有帮助的。这种算法被称为拉普拉斯金字塔。将较小的水平上采样到与较大水平相同的大小,并进行过滤。该滤波器通常是该模型中使用的近似高斯滤波器的缩放版本。层与层之间的差异表示在降采样过程中丢失的信息。拉普拉斯金字塔可用于除噪的取心,合成不同时间或不同焦距拍摄的图像,以及许多其他应用。

该模型的一个潜在限制是输出流之间有相当高的延迟。出现这种延迟是因为第二层和第三层依赖于前一层的输出。这可以通过在更多行上创建并行过滤器来避免。这个例子实现了一个5乘5的过滤器,每个级别存储5行。低延迟并行实现对于两级过滤器需要13行存储,对于三级过滤器需要103行存储。这通常不是一个划算的权衡。

在fpga上,行缓冲存储器通常使用块ram实现。更小的内存可以在FPGA结构中实现,被称为分布式ram。综合工具根据设备的资源选择块RAM或分布式RAM。由于下采样,线尺寸变得更小,分布式ram可以更有效。在这个例子中,每一层的行缓冲块为每行保留高达2k像素的空间。这个大小是行缓冲区的默认大小,可以容纳最多1080p格式的视频。为目标分布式ram指定2的小次幂行缓冲区大小参数。在本例中,您可以将这三个级别的行缓冲区大小设置为256、128和64。

参考文献

[1]伯特,P.和E.阿德尔森。"拉普拉斯金字塔作为一个紧凑的图像代码"IEEE通讯汇刊31日。4(1983年4月):532-40。