去除摄像头斑点噪声的方法
技术领域
本发明涉及一种图像处理方法,特别是一种去除图像噪声的方法。
背景技术
目前,在芯片设计中图像处理的应用越来越广泛,比如:数码照相机、数码摄像机、手机、视频会议***等等。而图像处理一般包括预处理、压缩和后处理几个部分。视频图像去噪声是预处理的重要环节。
视频采集设备如普通摄像头由于考虑低功耗、低成本的要求,采用的都是CMOS(Complementary Metal Oxide Semiconductor互补型金属氧化物半导体)感光器,它在分辨率、动态范围和噪声等方面都存在不足。在低照度环境下,感光器件长时间感光,受到白噪声和暗电流的影响,采集输出的源视频图像容易产生随机噪声。
由于视频压缩算法是通过前后帧之间图像的差异实现压缩,随机噪声的存在不仅影响了图像的视觉效果,使得源视频图像出现斑点噪声,而且噪声在编码时被当作图像细节信息进行编码,严重地影响了视频压缩的效果,有时甚至造成码率成倍上升,将压缩算法的优点全部掩盖。因此,在预处理时合理有效地去除噪声不仅能够提高图像的视觉质量,而且能够有效地降低码率,使得中低档摄像头也能达到理想的压缩效果,特别在低照度环境下非常有意义。因此,研究一种有效去除摄像头斑点噪声的方法是我们所需要的。
降噪就是尽可能地去除图像中的噪声干扰,达到净化图像画面的一种方法。但降噪和保留细节是一对矛盾,降低噪声的同时也会丢失一部分图像细节信息。常用的降噪方法有均值滤波、中值滤波、加权中值滤波等。
均值滤波也称邻域平均,是一种空间域平滑技术。它的基本原理就是对于给定的图像中的每个像素点,取其邻域的M个像素的平均值作为处理后所得像素点的像素值。邻域平均法有效地抑制了噪声,但是由于平均引起了模糊现象,模糊程度与邻域半径成正比;
中值滤波是一种常用的非线性平滑滤波器,其基本原理是把数字图像或数字序列中一点的像素值用该点邻域各点的中值替换。中值滤波虽然能够保留一定的边缘和细节信息,但是由于在实际运算过程中不需要图像的统计特性,对所有像素采用相同的方式进行滤波,对一些细节多,特别是点、线、尖顶细节较多的图像也会造成一定的细节损失。同时,中值滤波和加权中值滤波需要对窗口数据进行排序,需要太多的比较操作,特别在窗口较大或采用加权中值滤波的情况下,排序计算量较大,不适合硬件实现。
发明内容
本发明要解决的技术问题是提供一种简单的适合硬件实现的去除摄像头斑点噪声的方法,能在有效去除摄像头斑点噪声的同时,保持图像边缘和细节清晰。
为解决上述技术问题,本发明去除摄像头斑点噪声的方法包括以下步骤:
步骤一,获取窗口数据,按照行扫描的顺序,取图像的非边缘区域的一个像素作为中心像素点,取该中心像素点和紧邻中心像素点的8个像素点构成一个3×3窗口,读取该9个像素点数据,所述非边缘区域是指图像中除第一行、第一列、最后一行、最后一列之外的行或列;
步骤二,滤波操作,对上述3×3窗口,分水平、垂直、对角线向下和对角线向上四个方向做滤波操作,每个方向的滤波操作分两个分支对三个像素点(a,b,c)进行,每个分支分别针对较亮的像素点和较暗的像素点进行滤波,(对于256色灰度图,0为黑色,1为白色,即灰度值越小,像素越暗,否则越亮);其中,像素点a,b,c对应关系为:水平方向时的左--中--右像素,垂直方向时的上--中--下像素,对角向下方向时的左上--中--右下像素,对角线向上方向时的右上--中--左下像素;
首先判断a,b,c三个像素点数值的相对大小关系,以决定进入哪个分支。若b在三个像素点中像素值最小,则b为较暗像素点,进入分支一;若b在三个像素点中像素值最大,则b为较亮像素点,进入分支二;若b在三个像素值中居中,则不做滤波操作,直接输出;
分支一:对于较暗像素点,做如下滤波:
if((a>b+T1)&&(b+T1<c)) b=b+T1;
else if((a>b+T2)&&(b+T2<c)) b=b+T2;
else if((a>b+T3)&&(b+T3<c)) b=b+T3;
else if((a>b+T4)&&(b+T4<c)) b=b+T4;
分支二:对于较亮像素点,做如下滤波:
if((a<b-T’1)&&(b-T’1>c)) b=b-T’1;
else if((a<b-T’2)&&(b-T’2>c)) b=b-T’2;
else if((a<b-T’3)&&(b-T’3>c)) b=b-T’3;
else if((a<b-T’4)&&(b-T’4>c)) b=b-T’4;
其中,a、b、c为3×3窗口中一个方向上取出的像素点数据,
T1、T2、T3、T4为对较暗点滤波的阈值强度,
T’1、T’2、T’3、T’4为对较亮点滤波的阈值强度,且
T1>T2>T3>T4,
T’1>T’2>T’3>T’4;
输出改变后的中心点像素值,作为下一个方向滤波操作的输入值;
步骤三,以一定步长移动3×3窗口,按步骤一获取窗口数据,按步骤二进行滤波操作。
本发明提出的降噪方法通过具体地分析中心像素点的像素值与8个相邻像素点的像素值之间的细微差别,分别针对较暗的像素点和较亮的像素点进行滤波,即使处理细节丰富的图像,仍能有效地保护图像的边缘与细节信息;同时滤波操作只包含比较和加减法运算,计算简单,非常适合硬件实现;试验表明,本发明提供的方法能快速有效地降低摄像头产生的斑点噪声,处理后的图像噪声基本被抑制,同时保持细节上的清晰,视觉效果良好。
附图说明
图1是应用本发明进行降噪处理的流程图;
图2是本发明中3×3滤波窗口的像素编号;
图3是本发明一个实例中对一个3×3窗口的滤波流程;
图4是按本发明所提供的方法对较暗像素点进行滤波操作的框图;
图5是按本发明所提供的方法对较亮像素点进行滤波操作的框图。
具体实施方式
下面结合附图对本发明作进一步详细的说明。
普通摄像头由于考虑低功耗、低成本的要求,采用的都是CMOS(Complementary Metal Oxide Semiconductor)感光器,分辨率,动态范围和噪声等方面存在不足,在低照度环境下容易产生随机噪声。摄像头的斑点噪声是因为图像中出现了外来像素,通常由电子干扰产生,特别是在低照度条件下表现得更为明显。从视觉效果上看,图像中布满了一些细小的噪点,彩色图像中出现了细小的色斑。
图像的降噪操作是一种非线性滤波过程。本发明去除摄像头斑点噪声的方法的基本原理来源于分析视频图像中斑点噪声的分布模型。斑点噪声之所以在人眼视觉上看来是斑点,就是因为采集设备在低照度环境下受到干扰,使得图像中某些像素点发生了突变(变暗或变亮),这些像素点改变了正常的像素分布规律,从而与周围像素点形成了较大的视觉反差。当受干扰的像素点较为密集时,形成了细小的斑点。本发明基于摄像头斑点噪声的不均匀分布,通过分析各个像素点与其周围8个像素点的像素值关系,适当调高或调低中心点的像素值,使其更能体现周围像素点的分布关系,从而达到滤波降噪的过程。
本发明所提供的方法同时适用于灰度图像和彩色图像的降噪处理。灰度图像用一个通道实现降噪操作,而彩色图像分Y、Cb和Cr三个通道独立实现降噪操作。每个通道的具体实现分以下几个步骤实现:
步骤一,获取窗口数据。按照行扫描的顺序读取图像中的一个像素(图像的边缘区域像素点,第一行、第一列、最后一行和最后一列不做滤波操作,直接输出),对该像素点(边缘图像数据不做操作)读取其周围8个像素点数据,构成一个3×3窗口,如附图2所示为3×3滤波窗口的像素编号。
步骤二,降噪滤波操作。图1为按本发明进行降噪处理的流程框图。对每个3×3窗口,分水平、垂直、对角线向下和对角线向上四个方向做滤波操作,如图3所示。每个方向的滤波操作分两个分支进行,分别针对较暗的像素点和较亮的像素点进行滤波,通过一系列判断改变中心点像素的值,达到滤波的过程。图4和图5分别为每个3×3窗口中针对较暗的像素点和较亮的像素点进行某一个方向的滤波操作的流程图。针对图像中较暗像素点和较亮像素点进行滤波的分支表达式分别为:
分支一,对于较暗像素点,做如下滤波:
if((a>b+T1)&&(b+T1<c)) b=b+T1;
else if((a>b+T2)&&(b+T2<c)) b=b+T2;
else if((a>b+T3)&&(b+T3<c)) b=b+T3;
else if((a>b+T4)&&(b+T4<c)) b=b+T4;
分支二,对于较亮像素点,做如下滤波:
if((a<b-T’1)&&(b-T’1>c)) b=b-T’1;
else if((a<b-T’2)&&(b-T’2>c)) b=b-T’2;
else if((a<b-T’3)&&(b-T’3>c)) b=b-T’3;
else if((a<b-T’4)&&(b-T’4>c)) b=b-T’4;
其中a,b和c为3×3窗口中一个方向上取出的图像数据,{T1,T2,T3,T4}和{T’1,T’2,T’3,T’4}为滤波的阈值强度,其中T1>T2>T3>T4,T’1>T’2>T’3>T’4。
在经过上述滤波操作后,输出改变后的中心点像素值,作为下一个点滤波操作的输入。
步骤三,以一定步长移动3×3窗口,按步骤一获取窗口数据,按步骤二进行滤波操作。重复执行直至整幅图像的像素点都做完一遍上述的滤波操作。接着判断本次滤波后噪声减少的程度,若噪声已经降低到允许的范围,则结束滤波过程,否则继续下一轮的滤波操作。这种迭代次数决定了滤波的强度。
以如下8×8彩色图像数据为例,三个通道(Y,Cb,Cr,4:2:0)数据独立进行滤波操作。下面主要介绍Y通道数据的滤波操作,另外两个通道滤波操作以此类推。
Y通道数据 Cb通道数据 Cr通道数据
首先获取窗口数据。以3×3模板在图像上以一定的步长进行移动,也就是对每个中心像素点,读取其周围8个邻域像素点数据,构成一个3×3窗口,作为滤波输入。图像边界像素点不做滤波操作。从第二行的第二列开始,从左到右,逐行取出3×3窗口像素数据送到降噪滤波操作模块。以上图Y窗口数据为例,从第二行第二列数据开始读取3×3窗口数据,第一个滤波窗口数据为:
29 |
23 |
16 |
23 |
14 |
18 |
30 |
10 |
20 |
然后进行降噪滤波操作。对上述3×3窗口,分水平、垂直、对角线向下和对角线向上四个方向做滤波操作,前一级滤波操作的输出作为下一级滤波操作的输入,逐级进行滤波。在前述3×3窗口中,读取中心点水平方向数据为:{23,14,18},分别作为a,b,c三点像素值,进入如图3和4所示的滤波操作流程。流程中对较暗的像素点和较亮像素点分两个分支进行滤波操作。每级滤波操作分4个步骤进行,每级判断有4个阈值{T1,T2,T3,T4}或{T’1,T’2,T’3,T’4}用于控制滤波操作的过程,其中T1>T2>T3>T4,T’1>T’2>T’3>T’4。两级滤波阈值{T1,T2,T3,T4}和{T’1,T’2,T’3,T’4}可以相同或不同,表达式前文已述及。
每一个方向滤波后将改变中心点像素的值,作为下一方向滤波的输入。假设T1=5,T2=4,T3=3,T4=2,根据分支一的计算((23>(14+3))&&((14+3)<18)),因此水平方向处理后中心点的像素由14变为17,则读取垂直方向的数据变为:{23,17,10}。接着进行垂直方向的滤波,两个对角线方向的滤波操作则以此类推。四个方向的滤波操作完成后,将中心点像素值(假设该示例中中心点像素最后为17)写回图像像素窗口。上述像素值将作为下一个滤波窗口的输入。
以一定步长移动3×3窗口,步长可根据斑点噪声分布而定,当噪声分布集中,颗粒小时采用小步长(如1),否则采用较大的步长(如2或更大整数),若不作判断,一般步长可定为1。现取步长为1移动窗口,按步骤一获取窗口图像数据,则下一个3×3窗口数据为:
23 |
16 |
11 |
17 |
18 |
0 |
10 |
20 |
14 |
进行下一步的滤波操作,直至整幅图像的三个通道数据都滤波完毕时,根据主客观评价的判断来决定是否进行下一轮的迭代滤波操作,迭代的次数控制了滤波的强度。当整幅图像做完上述的滤波操作后,通过一系列主客观评价分析降噪的效果,以决定是否进行下一轮的滤波操作。若噪声已经降低到允许的范围,则结束滤波过程,输出滤波后的图像数据;否则进行下一轮的滤波操作过程,直至噪声降低到允许的范围为止。
经本发明提供的方法处理后的图像,其背景噪声被有效抑制,背景变得光滑,降噪效果明显;同时能有效保留图像的边缘信息,保持图像的细节细腻清晰。另外,本发明的算法只有整数判断及加减法运算,无乘除法运算,计算简单,易于硬件实现。