qt图像均值滤波 c++_图像处理之滤波(下)

fd864530af0bad3d06313eb66da078bd.png

[toc]目录

一、常规滤波

  • 低通
  • 高通
  • 带通
  • 带阻

二、非局部均值滤波

三、维纳滤波

四、卡尔曼滤波


前言

所谓滤波,其实就是从混合在一起的诸多信号中提取出所需要的信号。

信号的分类:

  • 确定型信号,可以表示为确定的时间函数,可确定其在任何时刻的量值。(具有确定的频谱);一般可通过低通、高通、带通、带阻等模拟滤波器或其他常规滤波算法实现。
  • 随机信号,不能用确定的数学关系式描述,不能预测其未来任何瞬时值,其值的变化服从统计规律。(频谱不确定,功率谱确定);根据有用信号和干扰信号的功率谱设计滤波器——维纳滤波(Wiener Filtering)或卡尔曼滤波(Kalman Filter)。

一、常规滤波

在图像处理或者计算机应用中,在正式对图像爱那个进行分析处理前一般需要一个预处理的过程。预处理是对图像作一些诸如降维、降噪的操作,主要是为后续处理提供一个体积合适、只包含所需信息的图像,通常会用到一些滤波处理手法。滤波,实际上就是信号处理,而图像本身可以看作是一个二维信号,其中像素点灰度的高低代表信号的强弱。对应的高低频的意义:

高频:图像中灰度变化强烈的点,一般是轮廓或者是噪声。

低频:图像中平坦的,灰度变化不大的点,图像中的大部各区域。

而根据图像的高频与低频的特征,可以设计相应的高通和低通滤波器,高通滤波可以检测图像中尖锐、变化明显的地方,而低通滤波可以让图像变得光滑,滤除图像中的噪声、OpenCv中提供的低通滤波有线性的均值滤波器、高斯滤波器,非线性的双边滤波器、中值滤波器;高通滤波有基于Canny,Sobel算子的各种滤波。其实很多时候低通滤波和高通滤波其实是相互矛盾的,很多时候在边缘检测前需要通过低通滤波降噪,这里就需要调节参数在保证高频的边缘不丢失的前提下尽可能多的去处图像的噪点。

这里使用频域的高通和低通滤波。

  • 低通

理想的低通滤波器的模版为:

其中,

表示通带半径,
是到频谱中心的距离(欧式距离),计算公式如下:
,M和N表示频谱图像的大小,
即为频谱中心。
def low_pass_filter(img, radius=100):
    r = radius

    rows, cols = img.shape
    center = int(rows / 2), int(cols / 2)

    mask = np.zeros((rows, cols, 2), np.uint8)
    x, y = np.ogrid[:rows, :cols]
    mask_area = (x - center[0]) ** 2 + (y - center[1]) ** 2 <= r * r
    mask[mask_area] = 1
    return mask

Butterworth低通滤波器为:

149350b1b33266ace6a39d355340b6c7.png
def Butterworth(src, d0, n, ftype):
    template = np.zeros(src.shape, dtype=np.float32)  # 构建滤波器
    r, c = src.shape
    for i in np.arange(r):
        for j in np.arange(c):
            distance = np.sqrt((i - r/2)**2 + (j - c/2)**2)
            template[i, j] = 1/(1 + (distance/d0)**(2*n))  # Butterworth 滤波函数
            template[i, j] = np.e ** (-1 * (distance**2 / (2 * d0**2)))  # Gaussian滤波函数
    if ftype == 'high':
        template = 1 - template
    return template

高斯低通滤波器:

,1减去低通滤波器模板即可得到高通滤波器。

9dcd0dc9eab94bd57e7f331d2c23902a.png
# 定义函数,高斯高/低通滤波模板
def Gaussian(src, d0, ftype):
    template = np.zeros(src.shape, dtype=np.float32)  # 构建滤波器
    r, c = src.shape
    for i in np.arange(r):
        for j in np.arange(c):
            distance = np.sqrt((i - r / 2) ** 2 + (j - c / 2) ** 2)
            template[i, j] = np.e ** (-1 * (distance ** 2 / (2 * d0 ** 2)))  # Gaussian滤波函数
    if ftype == 'high':
        template = 1 - template
    return template
  • 带通
  • 带阻
def bandreject_filters(img, r_out=300, r_in=35):
    rows, cols = img.shape
    crow, ccol = int(rows / 2), int(cols / 2)

    radius_out = r_out
    radius_in = r_in

    mask = np.zeros((rows, cols, 2), np.uint8)
    center = [crow, ccol]
    x, y = np.ogrid[:rows, :cols]
    mask_area = np.logical_and(((x - center[0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenCV和Qt中,均值滤波可以使用boxFilter函数来实现。boxFilter函数使用一个方框滤波器,该滤波器可以对图像进行平滑处理,类似于一个简化版的高斯滤波器。在这个函数中,可以设置normalize参数来控制是否对滤波结果进行归一化处理。 下面是一个示例代码片段,展示了如何在OpenCV和Qt中使用均值滤波器: ``` 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参数表示滤波器的大小,可以根据需要进行调整。 通过调用该函数,你可以实现在OpenCV和Qt中对图像进行均值滤波的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Qt+opencv图像线性滤波之方框滤波均值滤波、高斯滤波](https://blog.csdn.net/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.csdn.net/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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值