基于ZYNQ的图像去雾
设计完成了ZYNQ的实时去雾处理硬件平台。主要包括了基于OV5640的图像采集模块,基于暗通道先验和引导滤波的图像去雾模块,视频显示模块。
图像采集模块通过PS端通过SCCB配置寄存器,完成数据输入。视频显示模块通过VDMA的读通道读出DDR的帧缓存数据,并将视频数据传输到video stream to video out ip核和VTC的时序信号配合下,将数据信号利用RGB-2DVI转换成HDMI差分信号。 完成HDMI显示。
暗通道先验和引导滤波去雾计算电路的设计。
首先,软件软件测试性能。再根据软件程序,通过verilog设计图像处理模块。图像去雾模块的主要理论是 雾天图像成像模型和暗通道理论。
雾天图像成像模型是说 有雾图像 = 无雾图像*透射率 + (1-透射率)*大气光值。
根据此理论得到求出透射率和大气光值可以根据有雾图像完成去雾。
借助于暗通道先验理论。对一张除天空区域的无雾图像,总存在某些像素点的颜色通道亮度值非常低,接近于0.
针对此: 借助于暗通道先验理论。
我们要对雾天图像成像模型同除以大气光值,同时两边用最小值算子做最小值运算得到。
透射率 = 1 - min(r,g,b)min输入图像处以大气光值 再加上一个常数参数保存一部分雾取0.85.
要求取透射率需要先对RGB三通道,做最小值滤波。我们在具体做的时候为了减少浮点数的计算等号两边同时扩大216倍。最后需要缩小216倍。
输入图像做最小值滤波,通过两个比较器求出三通道的最小值,得到最小值图像后,进行最小值滤波通过对图像数据进行行缓存,再通过移位寄存器形成窗口完成,最小值滤波。在图像窗口中通过行比较器和列表器。 先得到行最小值,再得到列最小值。
求取透射率时候,大气光值已知。大气光值求取,理论上是暗通道图像中亮度大小前0.1%的像素点的平均值。 我们这里是得到亮度最大的像素点作为大气光值的取值。
基于以上透射率和大气光值,根据雾天退化模型,可以求出去雾后的图像。
基于导向滤波器保留边缘并平滑图像。
引导滤波需要引导图像,理论是根据输出图像q = ak*I+bk. 输出q是引导图像在窗口中的一个线性变换。 再根据q = 输入p -n噪音。 由线性回归,最小二乘法,求出ak 和bk。
q= a平均+ b平均
我们做的是根据ak表达式 求出引导图像在窗口中的均值和方差。以及输入图像在窗口中的均值。以及引导图像和输入图像在窗口中乘机求和。
这里使用均值滤波来求取均值。6个均值滤波,对于引导滤波数据存在小数,进行移位处理,结束运算后,再通过移位调整到原数值大小。均值滤波电路设计以及求取a,b参数。
引导滤波实现的是每个窗口的方差和均值。
均值滤波通过行数据求和,列数据求和,做平均运算实现。 行缓存,寄存器,加法树和除法器。
解决的问题:
1 全局大气光值求取受限,暗通道图像中前0.1%的高亮像素点作为全局大气光的依据。在软件处理中需要通过排序求取。在PFGA存储资源有限,通过循环比较求出最大像素值,具体做法,行缓存后,行最大值,列最大值。得到大气光值近似值。
2 透射率是0-1之间的数据,浮点数的运算消耗资源大且速度受限。 左移10位,扩大1024倍。最后通过移位复原。
3 图像数据不同重复使用,设计行缓存电路。
验证:
上版验证,观察去雾效果。 不同场景下的输入图片,观察细节特征,细节更加清晰,整体画面较为通透,周边景物的复原效果也较好,图像对比度也得到了明显提高。
运行时间30ms。满足实时性要求。
使用:平均梯度、峰值信噪比、对比度进行去雾效果的评价。
主观评价和客观评价。
时钟频率: OV5640 100MHZ,分频为200khz满足sccb协议。 74.25像素时钟。
DDR3 150MHZ
去雾模块 100MHZ系统时钟
单幅图片运算时间为30ms。
1280 x 720 图片 OV5640 30fps 33.3ms输入一张图片。
输入灰度图像和粗估计透射率