计算机视觉中的图像滤波

图像处理:均值与中值滤波在MATLAB和OpenCV中的应用,

对下图进行滤波处理(均值滤波、中值滤波)

1.基本思想

(1)均值滤波:任意一点的像素值,是周围n*n个像素值的均值

①选择适当的卷积核n*n,比如3*3,5*5,7*7,与原图像卷积;

②得到的结果除以n*n,代替中间的像素的灰度值;

③滑动卷积核,重复第②步,直到遍历图像结束。

(2)中值滤波:任意一点的像素值,是周围n*n个像素值的中间值

①选择适当的卷积核n*n,比如3*3,5*5,7*7

②按灰度值升或降序排列,取位于中间的灰度值来代替中间点的灰度值

③滑动卷积核,重复第②步,直到遍历图像结束。

2.代码实现(matlab)

(1)均值滤波

img = imread('face.png');

n = 7;  %卷积核尺寸

kernel = 1 / (n * n) .* ones(n, n); %n*n的核

[h, w] = size(img);    %图片尺寸

x1 = double(img);

x = x1;

%均值滤波

for i = 1:h-n+1

    for j = 1:w-n+1

        ave = sum( sum( x(i:i+n-1,j:j+n-1) .* kernel)); %卷积核与图像卷积

        x(i+(n-1)/2,j+(n-1)/2) = ave;

    end

end

g = uint8(x);

subplot(1 ,2, 1);

imshow(img)

subplot(1 ,2, 2);

imshow(g);

(2)中值滤波

img = imread('face.png');

n = 7;      %卷积核尺寸

[h, w] = size(img);     %图片尺寸

x1 = double(img);   %转double为了矩阵运算

x = x1;

%中值滤波

for i = 1:h-n+1

    for j = 1:w-n+1

        c = x1(i:i+n-1,j:j+n-1);

        a = [ ];

        for k = 1:n

            a = [a, c(k, :)];%把矩阵转变成一个一维向量

        end

        tmp = median(a);

        x(i+(n-1)/2,j+(n-1)/2) = tmp;

    end

end

g = uint8(x);      %取整,转int8

subplot(1 ,2, 1);

title('原图像')

imshow(img)

subplot(1 ,2, 2);

imshow(g);

3.运行结果


均值滤波对比

中值滤波对比

调用OpenCv中的blur和medianBlur函数实现滤波功能

import cv2

img = cv2.imread(r"C:/Users/pc/Desktop/face.png",0)

cv2.imshow('img',img)

#均值滤波

new_img1 = cv2.blur(img,(7,7))

cv2.imshow('new_img1',new_img1)

#中值滤波

new_img2 = cv2.medianBlur(img,7)

cv2.imshow('new_img2',new_img2)

                 原灰度图
结果如下

               

                       中值滤波

                       均值滤波

4.思考和总结

       滤波使图像变得平滑,噪声得以去除,均值滤波使图像变得更加模糊,中值滤波是非线性滤波,能更好的处理椒盐噪声,此外,适当地选取卷积核的大小可以有效地改善滤波的效果。

### 计算机视觉中的滤波概念 #### 导向滤波的技术原理与应用 导向滤波是一种先进的计算机视觉算法,在图像处理领域广泛应用,特别是在图像增强和恢复方面表现出色。该方法不仅能够有效减少噪声干扰,还能很好地保留甚至强化图像边界特征[^1]。 对于一幅输入图片\(I\)及其指导图\(G\),导向滤波器输出的结果\(Q\)可通过如下公式计算得出: \[ Q(p)=a_k*I(p)+b_k \] 其中,\(p\)表示像素位置;\((a_k,b_k)\)代表局部线性模型参数,它们由最小化误差平方和准则求解得到;而窗口大小\(k×k\)决定了邻域范围内的平滑程度。这种机制使得导向滤波可以在抑制噪音的同时维持重要的结构信息不变。 ```python import cv2 import numpy as np def guided_filter(I, p, r=8, eps=0.01): """ 实现导向滤波功能 参数: I : 输入引导图像 (灰度或彩色) p : 待过滤的目标图像 (单通道或多通道) r : 局部区域半径,默认值为8 eps: 正则项系数 返回: q : 过滤后的图像 """ mean_I = cv2.boxFilter(I,-1,(r,r)) mean_p = cv2.boxFilter(p,-1,(r,r)) corr_I = cv2.boxFilter(I * I,-1,(r,r)) corr_Ip = cv2.boxFilter(I*p,-1,(r,r)) var_I = corr_I-mean_I*mean_I cov_Ip = corr_Ip-mean_I*mean_p a = cov_Ip/(var_I+eps) b = mean_p-a*mean_I mean_a = cv2.boxFilter(a,-1,(r,r)) mean_b = cv2.boxFilter(b,-1,(r,r)) q = mean_a*I + mean_b return q ``` #### 中值滤波的作用及特点 不同于导向滤波侧重于结构性质的维护,中值滤波更专注于对抗特定类型的随机扰动——尤其是椒盐类脉冲型杂音。通过对目标区域内所有像素按亮度排序取中间值得到新中心点的方式工作,从而达到净化效果而不破坏原始轮廓特性[^2]。 #### 傅立叶变换下的频率域滤波方式 借助快速傅里叶变换FFT技术可以轻松完成时/空域到频谱空间之间的转换过程。在此基础上定义了多种基于频率响应特性的筛选手段:低通、高通以及带通三种模式分别对应着让较低振荡率分量顺利穿过、阻止较高变化速率部分或是仅限一定范围内波动得以留存下来的操作逻辑[^3]。 综上所述,不同的滤波策略各有千秋,适用于解决各类实际问题场景下对质量改善的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值