Qt+opencv图像线性滤波之方框滤波、均值滤波、高斯滤波

图像方框滤波、均值滤波、高斯滤波

图像滤波概念

由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染。
图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
线性滤波有方框滤波、均值滤波、高斯滤波这几种,常用的线性滤波器有:

1.低通滤波器:允许低频率通过
2.高通滤波器:允许高频率通过
3.带通滤波器:允许一定范围频率通过
4.带阻滤波器:阻止一定范围频率通过并允许其他频率通过
5.全通滤波器:允许所有频率通过,仅改变相位
6.陷波滤波器:阻止一个狭窄频率范围通过

图像模糊概念:一般来说低通就是模糊,高通就是锐化。
领域算子(局部算子)是利用给定像素周围的像素值,决定此像素的最终输出值的一种算子。线性领域滤波是一种常用的领域算子。像素的输出值取决于输入像素的加权和。
在这里插入图片描述
h(k, l)称为内核,是滤波器的加权系数。

均值滤波

void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT );
参数说明:
src 输入图像
dst 输出图像
ksize 内核大小
anchor 锚点(被平滑的点); 默认 Point(-1,-1) 表示取内核中心点为锚点。
borderType :用于推断图像外部的某种边界模式

均值滤波输出的每一个像素是核窗口输入像素的平均值(所有像素加权系数相等),相当于归一化的方框滤波。均值滤波本身也有缺点,没那就是不能好好保护图像细节,在图像去噪的同时也破坏 了图像的细节部分,从而使图像变模糊,不能很好的去除噪声点。

内核如下:
在这里插入图片描述
测试效果:
在这里插入图片描述

方框滤波

void boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT );

参数说明:
src 输入图像
dst 输出图像
ddepth 输出图像深度
ksize 内核大小
anchor 锚点(被平滑的点); 默认 Point(-1,-1) 表示取内核中心点为锚点。
normalize :默认为true。
borderType :用于推断图像外部的某种边界模式

方框滤波用的核如下:
在这里插入图片描述
当normalize 为true时,方框滤波归一化处理,其效果跟均值滤波一样。
当normalize 为false时,用于计算每个像素领域的积分特性。
上代码:

void PhotoBlur::cvHomogeneousBlur(int k_size)
{
    Mat srcImage = imread("F:/work/opencv/photoblur/add.jpg");
    /* void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor = Point(-1,-1),
                        int borderType = BORDER_DEFAULT );
    */
    Mat dstImage = srcImage.clone();
    boxFilter(srcImage,dstImage,-1,Size(k_size,k_size),Point(-1,-1),true);
    bgrMat2Image(dstImage);
}

当normalize 为true时,方框滤波归一化时效果:
在这里插入图片描述
当normalize 为false时,即:boxFilter(srcImage,dstImage,-1,Size(k_size,k_size),Point(-1,-1),false);
效果如下:

在这里插入图片描述

高斯滤波

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
参数说明:
src 输入图像
dst 输出图像
ksize 内核大小,需要是基数
sigmaX 高斯核函数在X方向的偏差
sigmaY 高斯核函数在Y方向的偏差,若为0,则设为sigmaX。如果sigmaX和sigmaY都为0,那么就由ksize.width 和 ksize.height计算出来
borderType :用于推断图像外部的某种边界模式

高斯滤波可能是最有用的过滤器(虽然不是最快的)。高斯滤波是通过将输入数组中的每个点与高斯核进行卷积来完成的,然后将它们相加以产生输出数组。高斯滤波就是对整幅图像进行加权平均的过程,每一个像素的点值,都由其本身和领域内的其他像素值经过加权平均后得到。

一维零均值高斯函数:

G(x)=exp(-x2/2sigma2),sigma决定了高斯函数的高度。

二维高斯函数:
在这里插入图片描述
测试效果:
在这里插入图片描述

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正

OpenCVQt中,均值滤波可以使用boxFilter函数来实现。boxFilter函数使用一个方框滤波器,该滤波器可以对图像进行平滑处理,类似于一个简化版的高斯滤波器。在这个函数中,可以设置normalize参数来控制是否对滤波结果进行归一化处理。 下面是一个示例代码片段,展示了如何在OpenCVQt中使用均值滤波器: ``` void PhotoBlur::cvHomogeneousBlur(int k_size) { Mat srcImage = imread("F:/work/opencv/photoblur/add.jpg"); Mat dstImage = srcImage.clone(); boxFilter(srcImage, dstImage, -1, Size(k_size, k_size), Point(-1, -1), true); bgrMat2Image(dstImage); } ``` 在这个例子中,cvHomogeneousBlur函数使用boxFilter函数对图像进行均值滤波。输入图像srcImage会被克隆到dstImage中,并在dstImage上进行滤波操作。函数中的k_size参数表示滤波器的大小,可以根据需要进行调整。 通过调用该函数,你可以实现在OpenCVQt中对图像进行均值滤波的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Qt+opencv图像线性滤波方框滤波均值滤波高斯滤波](https://blog.youkuaiyun.com/haohaohaihuai/article/details/106279456)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++基于 OpenCV+Qt 库实现的图像处理软件源代码+详细项目文档,可实现对图像的灰度化、二值化、均值滤波、...](https://download.youkuaiyun.com/download/shiyunzhe2021/88196583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值