当前位置: 首页>前端>正文

二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题

1.基本原理

与均值滤波不同的是,方框滤波不会计算像素的均值。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。

以5×5的邻域为例,在进行方框滤波时,如果计算的是邻域像素值的均值,则滤波关系如图1-1所示;如果计算的是邻域像素值之和,则滤波关系如图1-2所示。

二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_均值算法,第1张


图1-1  方框滤波关系示例–计算邻域像素值均值



二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_归一化_02,第2张


图1-2  方框滤波关系示例–计算邻域像素值之和



根据上述关系,如果计算的是领域像素值的均值,则使用的卷积核如图1-3所示


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_opencv_03,第3张


图1-3  计算邻域像素值均值所用的卷积核示例



如果计算的是邻域像素值之和,则使用的卷积核如图1-4所示:


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_python_04,第4张


图1-4  计算邻域像素值之和所用的卷积核示例

2.函数语法

在OpenCV中,实现方框滤波的函数是cv2.boxFilter(),其语法格式为:

dst = cv2.boxFilter( src, ddepth, ksize, anchor, normalize, borderType )


参数解析


dst

:返回值,表示经过方框滤波处理后的结果。


src

:需要被处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度可以是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。


ddepth

:处理后结果图像的深度,一般使用-1表示与原始图像使用相同的图像深度。


ksize

:滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高度和宽度。例如,滤波核的值可以为(3,3),表示以3×3大小的邻域均值作为图像均值滤波处理的结果,如下图2-1所示。


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_邻域_05,第5张


图2-1  3×3大小的滤波核



anchor

:锚点,默认值为(-1, -1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。


normalize

:表示在滤波时是否进行归一化(这里指将计算结果规范化为当前像素值范围内的值)处理,该参数是一个逻辑值,可能为真(值为 1)或假(值为 0)


  当参数

normalize=0

时,

表示不需要进行归一化处理,直接使用邻域像素值的和


  当参数

normalize=1

时,

表示要进行归一化处理,要用邻域像素值的和除以面积



通常情况下,针对方框滤波,卷积核可以如下图2-2表示:


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_均值算法_06,第6张


图2-2  方框滤波卷积核示意图



上述对应关系如图2-3所示:


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_邻域_07,第7张


图2-3  卷积核中的对应关系



例如,针对5×5邻域,当参数normalize=1时,要进行归一化处理,此时计算的就是均值滤波。这种情况下,函数 cv2.boxFilter()和函数 cv2.blur()的作用是一样的。此时,对应的卷积核如图2-4所示:


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_归一化_08,第8张


图2-4  参数 normalize=1时的卷积核



同样针对5×5邻域,当参数normalize=0时,不进行归一化处理,此时滤波计算的是邻域像素值之和,使用的卷积核如图2-5所示:


二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_opencv_09,第9张


图2-5  参数normalize=0时的卷积核



当 normalize=0时,由于不进行归一化处理,

因此滤波得到的值很可能超过当前像素值范围的最大值,从而被截断为最大值



通常情况下,在使用方框滤波函数时,对于参数

anchor

normalize

borderType

,直接采用其默认值即可。因此,函数 cv2.boxFilter()的常用形式为:

dst = cv2.boxFilter( src, ddepth, ksize )

3.程序示例

针对一幅噪声图像,使用方框滤波函数 cv2.boxFilter()内将参数 normalize 的值分别设置为0和1,分别显示其滤波处理结果。

import cv2
Gn=cv2.imread("Gaussian_noise.jpg") 
Bf0=cv2.boxFilter(Gn,-1,(2,2),normalize=0)
Bf1=cv2.boxFilter(Gn,-1,(2,2),normalize=1)
cv2.imshow("噪声图像",Gn)
cv2.imshow("不进行归一化处理",Bf0)
cv2.imshow("进行归一化处理",Bf1)
cv2.waitKey()
cv2.destroyAllWindows()

二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_python_10,第10张

图3-1  噪声图像



二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_均值算法_11,第11张


图3-2  不进行归一化处理的结果图像



二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题,二位图像利用均值滤波法计算灰度值不是整数 3×3均值滤波 计算题_opencv_12,第12张


图3-3  进行归一化处理的结果图像



从图3-3可以看出,

设置参数normalize为1时(默认值) 时,滤波结果与函数均值滤波cv2.blur()的结果是完全相同的



从图3-2是将参数normalize设置为0的滤波处理结果,即没有对图像进行归一化处理。所以在进行滤波时,计算的是 2×2 邻域的像素值之和,图像的像素值基本都会超过当前像素值的最大值 255。因此,最后得到的图像接近纯白色,部分点处有颜色。

部分点有颜色是因为这些点周边邻域的像素值均较小,邻域像素值在相加后仍然小于255



https://www.xamrdz.com/web/25r1951576.html

相关文章: