《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05
第7章 图像平滑处理
7.2 方框滤波
OpenCV还提供了方框滤波方式,与均值滤波的不同在于,方框滤波不会计算像素均值。
- 在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。
- 而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。
7.2.1 基本原理
我们以5×5的邻域为例,在进行方框滤波时,如果计算的是邻域像素值的均值,则滤波关系如图7-15所示。
图7-15 方框滤波关系示例1
仍然以5×5的邻域为例,在进行方框滤波时,如果计算的是邻域像素值之和,则滤波关系如图7-16所示。
图7-16 方框滤波关系示例2
根据上述关系,如果计算的是邻域像素值的均值,则使用的卷积核为:
如果计算的是邻域像素值之和,则使用的卷积核为:
7.2.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大小的邻域均值作为图像均值滤波处理的结果,如下式所示。
- anchor是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
- normalize表示在滤波时是否进行归一化(这里指将计算结果规范化为当前像素值范围内的值)处理,该参数是一个逻辑值,可能为真(值为1)或假(值为0)。
- borderType是边界样式,该值决定了以何种方式处理边界。
7.2.3 程序示例
【例7.5】针对噪声图像,使用方框滤波函数cv2.boxFilter()去噪,将参数normalize的值设置为0,将卷积核的大小设置为2×2,显示滤波结果。
import cv2
o=cv2.imread("image\\lenaNoise.png")
r=cv2.boxFilter(o,-1,(2,2),normalize=0)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
7.2.4 结果
图7-19 【例7.5】对应的方框滤波结果
在本例中,卷积核大小为2×2,参数normalize=0。因此,本例中方框滤波计算的是2×2邻域的像素值之和,四个像素值的和不一定大于255,因此在计算结果图像中有部分像素点不是白色。如图7-19所示,左图是原始图像,右图是方框滤波处理结果。













网友评论