DSP上玩玩视频雨滴检测与消除

用陈年老DSP玩一下潮流的去雨算法

视频图像去雨是指从视频图像中检测雨滴并将其去除的一种关键技术,也是计算机视觉中 的一个重要研究分支,近年来已得到深入的研究,在目标检测、识别、追踪、分割和监控等领域有巨大的应用前景。随着计算机视觉技术的迅猛发展,户外视觉系统开始广泛应用于军事、交通及安 全监控等领域。然而,由于各类恶劣天气造成的图像模糊和信息覆盖等问题,会直接或间接影响户外视觉系统的性能。建立一个去除各种恶劣天气对视频图像带来影响的全天候户外视觉系统很有必要。
资源有限,就暂时不玩深度学习那一套了,下次一定!具体的主要考虑以下方案:首先采用符合人眼视觉的对数图像处理方法, 用灰色调替代传统的亮度值, 分析受雨滴影响的像素光度特征, 建立灰色调约束条件提取候选雨滴, 可以凸显雨滴信息, 检测效果更佳。为满足实时性, 实验中采用连续三帧图像进行雨滴检测.,为去除干扰噪声, 实验对候选雨滴倾斜方向和长宽比进行实时的约束去除干扰.。针对去雨过程中可能导致的边缘突变问题, 实验中采用一种加权重构方法,能够有效改善去雨后的图像质量。

理论介绍

LIP模型

在图像处理中,一般的“+”和“x”算术操作不适用于一些实际的图像处理工作,两幅图像直接进行相加(或相乘)所得的结果与人的视觉效果有一定的差距,并且会产生“超区间值”问题,文献[5]中提出的LIP模型,它提供了一种新的算术结构,该模型定义了新的加法、减法、乘法等向量运算 。应用该模型的图像灰度值都在[0,M)区间内, 从而避免产生超区间值的问题,也与人眼的视觉系统的饱和特性相一致。在LIP框架中,LIP图像与输入的实数空间图像f的映射关系如下所示:
在这里插入图片描述
在这里插入图片描述
其中,灰度值f定义在[0,M)的范围内,M为正值常数。 LIP模型曲线如图1所示。
在这里插入图片描述
由上述曲线得知,该非线性变化过程扩展低灰度值而压缩高灰度值,实现了图像灰度扩展和压缩的功能,让图像的灰度分布更加符合人的视觉特征。
加法运算:灰度值f与g的加法表示为:
在这里插入图片描述
减法运算:灰度值f与g的减法表示为:
在这里插入图片描述
数乘运算:灰度值f与正实数的数乘法表示为:
在这里插入图片描述
由于雨滴会折射大范围的环境光线, 因而场景被雨滴遮挡后的亮度往往高于该处原先前几帧的相对背景的速度;同时,由于雨滴的下降速度较快,同一个像素的位置很少在连续三帧的图像中同时出现雨滴遮挡的问题于LIP模型的雨滴的灰度变化函数是呈现亮度递增变化函数(式(1)),而图像受到雨滴遮挡时也是呈现同样的灰度递增。因此,利用连续三帧的雨滴LIP帧差的检测雨滴,如下式所示。
在这里插入图片描述

其中,f(n-1),f(n),f(n+1)是连续的三帧图像的LIP数据,运动LIP的差值运算相比于直接的亮度图像的差值运算来说,灰度值差值的权重和调整的灰度的差值是随着亮度值自适应调节的,相比于直接的帧亮度线性差值来说,具有非线性的特点,保留并凸显了更多雨滴及其信息。

连通域约束

由于受到重力因素的影响,在同一个场景中雨滴的长宽比往往呈现一个的有规律的分布特点。因此,在任意一副雨滴的帧差图(二值图)中,雨滴往往是呈现一个连通区域的分布。通过检测场景中雨滴的主成分分布方向,u1为第一主成分方向,u2为第二主成分方向,统计第一主成分方向上雨滴的长度和第二主成分方向上雨滴的宽度,计算雨滴的长宽比例,通过长宽比例的约束,可以大幅度的减少环境亮度噪点的影响。
在这里插入图片描述
令Ni为雨滴连通区域的像素个数。
在这里插入图片描述

其中,(xik,yik),k=1,2,3,…Ni是该雨滴中每个像素相对于该雨滴的质心的坐标。
令u1和u2为协方差矩阵的特征向量,分别计算器对应的特征值。u1即为雨滴长度方向,u2即为雨滴的宽度方向。令雨滴在图像中的水平宽度为l,垂直宽度为w,通过式(9)和式(8)即可得到雨滴的长度L和宽度W。
在这里插入图片描述

雨滴消除

为了从视频图像中去除雨滴, 需要估计当前帧被雨滴遮挡的背景的像素亮度值。由于大部分的雨滴的像素在相邻两帧基本不会同时被雨滴遮挡, 可利用前一帧及后一帧中该像素的平均值作为当前帧的值。
在这里插入图片描述

为了提高去雨后的图像质量,采用式 (11) 所示的加权重构法进行雨滴消除: 先对检测到的雨滴二值化图像实施高斯模糊, 然后, 将该图中确定的雨滴部分的数值归一化至 1, 再将该图作为权重w(x,y)进行图像的重建。

平台参数

仿真平台
操作系统:WINDOWS 8.1
仿真软件:MATLAB 2015
硬件平台
操作系统:WINDOWS XP(VMWARE)
硬件芯片:ICETEK-DM642
开发软件:CCS2.2.1

DSP平台图像采集接口

人眼对亮度信息是敏感的,主要通过亮度差别来分辨物体形状的细节,而对彩色信息是不敏感的,人眼区分不出物体颜色上的细小的变化,或者说人眼不容易觉察出来图像的色彩的细节部分的变化。在计算机中,彩色视频信号首先分解为亮度信号 Y 和色度信号,色度信号再分解为 U色差信号和 V 色差信号,最后由 YUV 三个分量经过矩阵运算变换为 RGB 信号,以便在显像管上显示。在嵌入式领域,数字视频也是可以应用的,比如用单片机或 DSP 来处理数字视频数据。模拟视频信号解码并量化成连续的数字视频流后所包含的一些信号元素:模拟视频信号每秒 25 帧,每帧周期 40ms,而每帧又分为 2 场,每场 20ms,先输出的是奇场,然后是偶场,奇场的行号为第 1 至 312.5 行,偶场的行号为第 312.5 至 625 行,其中,奇场的第23.5 至 310 行包含有效的视频信号,偶场的第 336 至 622.5 行包含有效的视频信号。把模拟视频信号解码为 YUV 分量后,分别进行 A/D 量化采样,转换为数字视频流,时间上也应该是按上面的顺序依次输出。

图象传输格式(H.26x):

  • SQCIF: Sub-QCIF, 128x96
  • QCIF: Quarter-CIF(1/4 x CIF Resolution), 176x144
  • CIF: Common Intermediate Format, 352x288
  • 4CIF: 4 x CIF Resolution, 704x576(本实验使用)
  • 16CIF: 16 x CIF Resolution, 1408x1152

ICETEK-DM642-AVM 板上的视频接口

(1) 视频输入:视频信号为标准 PAL/NTSC 制电视模拟信号。每路信号经过视频解码芯片(AD 转换芯片)TVP5150A 解码成数字并行信号 BT656 码流送 DM642 的视频接口。
(2) 视频存储: DM642 的视频接口解码 BT656 码流,得到图象,自动通过 EDMA 传输到SDRAM 中存储。
(3)图象处理: DM642 的 CPU 通过访问 SDRAM 中的图象,进行处理后送输出缓冲区(SDRAM 中)。
(4) 视频输出: DM642 的视频接口(输出)自动通过 EDMA 从 SDRAM 中的输出缓冲区取得数据后形成 BT656 码流送出。
(5) TV 输出:视频编码芯片(DA 转换芯片)SAA7104 接收输出 BT656 码流,转换成标准电视信号输出。

DSP平台视频驱动接口

(1)DDK
DSP/BIOS Driver Developer’s Kit,提供 C 语言接口的 DSP 片上或扩展的外围设备的驱动,它是 CSL 的补充, DDK 使用 CSL 提供的接口初始化和操作这些外设。例如它提供音频编码解码(Codecs)、 PCI 控制器、视频接口(Video Ports)的驱动程序。

(2) 设备驱动程序在应用程序中的位置
在这里插入图片描述
(3)在程序中使用设备驱动程序

①在 DSP/BIOS 设置程序中添加用户定义设备(Device Drivers -> User Defined Devices)。
②在 DSP/BIOS 设置程序中添加或在程序运行时添加 PIO/DIO/GIO 的驱动实例。
③在程序中通过设备驱动程序初始化设备。
④在程序中使用设备驱动程序功能调用实现对外设的操作。

(4)VPort 接口的设备驱动程序
在这里插入图片描述

程序设计

算法使用MATLAB脚本语言和DSP(标准c语言)共同编写,前期通过MATLAB平台进行算法的仿真和调试,后期通过搭载DSP(DM-642)芯片实现。算法的整体流程如下(简单点)在这里插入图片描述

核心算法

(1)LIP帧差函数
MATLAB版本

M=255.0;
a =uint8( -M * log(1-(f0/M)));
b=uint8( -M * log(1-(f1/M)));
function c = lipsub(a,b,M)
    c = M * ((a - b)/(M - b));
    if(c<0)
        c=-c;
    end
End

DSP版本

void deltaImg()
{
   
	int i,j;
    float y1,y2,y3;
    unsigned int t1,t2;
    unsigned char *py1,*py2,*py3,*pyout;
	
	for ( i=0;i<SIMGHEIGHT;i++ )   //行数,每行一次
	{
      
		for ( j=0;j<SIMGWIDTH/2;j++ )   //列720点
		{
   
			py1 = m_dbFrameY_1 + i*SIMGWIDTH + j;
			py2 = m_dbFrameY_2 + i*SIMGWIDTH + j;
			py3 = m_dbFrameY_3 + i*SIMGWIDTH + j;
			pyout = m_dbFrameY_out 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值