opencv学习笔记(十七)——线性滤波

本文详细介绍了OpenCV中的线性滤波,包括方框滤波、均值滤波和高斯滤波的原理、API及使用实例。线性滤波主要目的是图像去噪,但可能造成图像细节模糊。方框滤波实际上是特殊形式的均值滤波,高斯滤波在减噪的同时保持边缘清晰。
摘要由CSDN通过智能技术生成

图像线性滤波:

  • 图像滤波:指尽量在保存图像细节特征的条件下对目标图像的噪声进行抑制。
  • 图像滤波的目的:一是抽出对象的特征作为图像识别的特征模式;二是消除图像中混入的噪声。
  • 图像滤波的要求:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。
  • 滤波和模糊的区别:拿高斯滤波来举例:滤波一般可以分为高通滤波和低通滤波,对于高斯低通滤波就会产生模糊效果,如果对于高斯高通滤波就会产生锐化的效果。所以通常是:高斯滤波就是指使用高斯函数进行滤波;高斯模糊就是指低通滤波。
  • 线性过滤器:即两个信号之和的响应和它们各自响应之和相等,换句话说,每个像素的输出值是一些输入像素的加权和,使用乘积和的计算,例如:R = w1z1 + w2z2 + … + wnzn
    高通:边缘增强、边缘提取
    低通:钝化图像、去除噪音
    带通:删除特定频率、增强中很少用

方框滤波(boxfilter)

方框滤波的原理:

方框滤波的核表示如下:
这里写图片描述
这里写图片描述
h代表该点的像素值
hsize代表滤波核
这里的normalize默认为ture,normalize为ture时,方框滤波其实就是均值滤波了
假设滤波核大小为3*3的的,锚点坐标为(x,y),则在目标图像上对应(x,y)这点的像素值为:
h = (f(x-1,y-1) + f(x,y-1)+ f(x+1,y-1) + f(x-1,y) + f(x,y) + f(x+1,y) + f(x-1,y+1) + f(x,y+1) + f(x+1,y+1))/(3*3)

Boxfilter函数API介绍:

C++: void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )
  • 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
  • 第二个参数,OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
  • 第三个参数,int类型的ddepth,输出图像的深度,-1代表使用原图深度,即src.depth()。
  • 第五个参数,Point类型的anchor,表示锚点(即被平滑的那个点),注意他有默认值Point(-1,-1)。如果这个点坐标是负值的话,就表示取核的中心为锚点,所以默认值Point(-1,-1)表示这个锚点在核的中心。
  • 第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT。

使用实例:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
    cv::Mat srcimage = cv::imread("test.png");

    cv::namedWindow("源图像");
    cv::namedWindow("滤波后");
    std::cout << std::endl;
    std::cout << std::endl;
    std::cout <<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值