数字图像处理 平滑滤波

实验题目:

分别采用均值、中值、最大值、最小值滤波器对下边两幅图像进行平滑处理,输出处理结果并进行比较。


实验程序

clear;clc;
I1=imread('images\butterfly.bmp');
I2=imread('images\x.tif');
I1=rgb2gray(I1);
I2=rgb2gray(I2);
n=5; c=5;
mask=ones(n,n);
[r1,c1]=size(I1);[r2,c2]=size(I2);
subplot(2,5,1);imshow(I1);title('原图');
subplot(2,5,c+1);imshow(I2);
I1=double(I1);I2=double(I2);
I1_mean=I1;I2_mean=I2;
I1_max=I1;I2_max=I2;
I1_min=I1;I2_min=I2;
I1_median=I1;I2_median=I2;
mid=floor(n/2);
 %=======处理图片1================
for u=1:r1-n+1
    for v=1:c1-n+1
        A=I1(u:u+n-1,v:v+n-1);A=A.*mask;
        I1_mean(u+mid,v+mid)=mean(mean(A));
        I1_max(u+mid,v+mid)=max(max(A));
        I1_min(u+mid,v+mid)=min(min(A));
        I1_median(u+mid,v+mid)=median(median(A));
    end
end
%======处理图片2==================
for u=1:r2-n+1
    for v=1:c2-n+1
        B=I2(u:u+n-1,v:v+n-1);B=B.*mask;
        I2_mean(u+mid,v+mid)=mean(mean(B));
        I2_max(u+mid,v+mid)=max(max(B));
        I2_min(u+mid,v+mid)=min(min(B));
        I2_median(u+mid,v+mid)=median(median(B));
    end
end
subplot(2,5,2);imshow(I1_mean(mid+1:r1-mid,mid+1:c1-mid),[]);title('均值');
subplot(2,5,c+2);imshow(I2_mean(mid+1:r2-mid,mid+1:c2-mid),[]);   
subplot(2,5,3);imshow(I1_max(mid+1:r1-mid,mid+1:c1-mid),[]);title('最大值');
subplot(2,5,c+3);imshow(I2_max(mid+1:r2-mid,mid+1:c2-mid),[]);
subplot(2,5,4);imshow(I1_min(mid+1:r1-mid,mid+1:c1-mid),[]);title('最小值');
subplot(2,5,c+4);imshow(I2_min(mid+1:r2-mid,mid+1:c2-mid),[]);
subplot(2,5,5);imshow(I1_median(mid+1:r1-mid,mid+1:c1-mid),[]);title('中值');
subplot(2,5,c+5);imshow(I2_median(mid+1:r2-mid,mid+1:c2-mid),[]);




在Python中,实现数字图像处理平滑滤波有多种方法: ### 高斯滤波 高斯滤波通过调节`sigma`的值来调整滤波效果,可使用`skimage`库中的`gaussian_filter`函数。示例代码如下: ```python from skimage import data, filters import matplotlib.pyplot as plt img = data.astronaut() edges1 = filters.gaussian_filter(img, sigma=0.4) # sigma=0.4 edges2 = filters.gaussian_filter(img, sigma=5) # sigma=5 plt.figure('gaussian', figsize=(8, 8)) plt.subplot(121) plt.imshow(edges1, plt.cm.gray) plt.subplot(122) plt.imshow(edges2, plt.cm.gray) plt.show() ``` 此代码展示了同`sigma`值下高斯滤波的效果,`sigma`值越大,图像越模糊 [^1]。 ### 均值滤波 均值滤波器是一种简单的线性空间滤波器,将每个像素值替换为其周围像素的平均值。可使用`cv2``numpy`库实现,示例代码如下: ```python import cv2 import numpy as np def mean_filter(image, kernel_size): # 获得图像的行列数 rows, cols = image.shape[:2] # 创建大小为kernel_size*kernel_size的平均滤波器 kernel = np.ones((kernel_size, kernel_size), np.float32) / (kernel_size**2) # 使用cv2.filter2D函数进行卷积运算 filtered_image = cv2.filter2D(image, -1, kernel) # 返回滤波后的图像 return filtered_image ``` 该函数通过`cv2.filter2D`函数进行卷积运算,将图像中每个像素值替换为其周围像素的平均值 [^2]。 ### 掩模消噪法 卷积运算中的卷积核就是模板运算中的模板,卷积是做加权过程。邻域中的每个像素分别与卷积核中的每一个元素相乘,乘积求所得结果即为中心像素的新值。改变卷积核中的加权系数会影响到总的数值与符号,从而影响到所求像素的新值 [^4]。 ### 有选择保边缘平滑滤波 这种滤波方法主要针对盐噪声或者胡椒噪声,其特点是保边缘,但因处理这两种噪声时统计排序滤波更具优势,所以实际中较少使用 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值