最大值滤波器和最小值滤波器

算法思想:
最大值滤波器将滤波器获得的值中找到最大值,将最大值存到中心元素位置对应的新矩阵中。
最小值滤波是将滤波器获得的值中找到最小值,将最小值存到中心元素位置对应的新矩阵中。
最大值滤波器

function maxf = maxfil(I,n)
%I为原图,n为滤波器的大小,最大值滤波器
[r,c]=size(I);  %图像的行和列
dI=double(I);
dt=n-1;  %边缘需要扩充的距离
f=zeros(r+dt,c+dt);  %对边缘进行0值处理,根据滤波器的大小把图像扩大
fi=zeros(r+dt,c+dt);
for i=1:r  
    for j=1:c
      f((i+dt/2),(j+dt/2))=dI(i,j);
    end
end
for i=1+dt/2:r+dt/2  %对中心元素进行均质化
    for j=1+dt/2:c+dt/2
        w=f((i-dt/2):(i+dt/2),(j-dt/2):(j+dt/2)); %滤波器选中元素
        mw=max(w(:)); %求最大值
        fi(i,j)=mw; %将与模板运算后的各元素的均值赋给模板中心位置的元素
    end
end
maxf=zeros(r,c); %裁剪
for i=1:r
    for j=1:c
        maxf(i,j)=fi(i+dt/2,j+dt/2);  %将扩大的图像转变为原图大小
    end
end
End

最小值滤波器

function minf = minfil(I,n)
%I为原图,n为滤波器的大小,最小值滤波器
[r,c]=size(I);  %图像的行和列
dI=double(I);
dt=n-1;  %边缘需要扩充的距离
f=zeros(r+dt,c+dt);  %对边缘进行0值处理,根据滤波器的大小把图像扩大
fi=zeros(r+dt,c+dt);
for i=1:r  
    for j=1:c
      f((i+dt/2),(j+dt/2))=dI(i,j);
    end
end
for i=1+dt/2:r+dt/2  %对中心元素进行均质化
    for j=1+dt/2:c+dt/2
        w=f((i-dt/2):(i+dt/2),(j-dt/2):(j+dt/2)); %滤波器选中元素
        miw=min(w(:));  %求最小值
        fi(i,j)=miw; %将与模板运算后的各元素的均值赋给模板中心位置的元素
    end
end
minf=zeros(r,c); %裁剪
for i=1:r
    for j=1:c
        minf(i,j)=fi(i+dt/2,j+dt/2);  %将扩大的图像转变为原图大小
    end
end
End

最大值滤波器对亮点比较敏感,但对边缘会移走部分的黑色像素,滤波器的尺寸越大,白色条带将变得越宽,当滤波器尺寸大于两个白色条带之间的间距17像素时,间距的黑色条带会被过滤掉。最大值滤波器可以有效去除椒噪声。
最小值滤波器对暗点比较敏感,但会从亮色物体边缘移走一些白色像素,滤波器尺寸越大,白色条带越细,当滤波器尺寸大于白色条带宽度7 时白色条带将会过滤掉。最小值滤波器适合于过滤盐噪声。
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最大值滤波器代码: ```python import cv2 import numpy as np def max_filter(img, kernel_size): # padding the image with zeros pad_size = kernel_size // 2 padded_img = np.pad(img, ((pad_size, pad_size), (pad_size, pad_size), (0, 0)), mode='constant') # create the kernel kernel = np.ones((kernel_size, kernel_size), dtype=np.uint8) # apply the maximum filter max_filtered = np.zeros_like(img) for i in range(img.shape[0]): for j in range(img.shape[1]): max_val = np.max(padded_img[i:i+kernel_size, j:j+kernel_size]) max_filtered[i, j] = max_val return max_filtered # load the image img = cv2.imread('image.jpg') # apply the maximum filter max_filtered = max_filter(img, 5) # display the original and filtered images cv2.imshow('Original Image', img) cv2.imshow('Maximum Filtered Image', max_filtered) cv2.waitKey(0) ``` 最小值滤波器代码: ```python import cv2 import numpy as np def min_filter(img, kernel_size): # padding the image with zeros pad_size = kernel_size // 2 padded_img = np.pad(img, ((pad_size, pad_size), (pad_size, pad_size), (0, 0)), mode='constant') # create the kernel kernel = np.ones((kernel_size, kernel_size), dtype=np.uint8) # apply the minimum filter min_filtered = np.zeros_like(img) for i in range(img.shape[0]): for j in range(img.shape[1]): min_val = np.min(padded_img[i:i+kernel_size, j:j+kernel_size]) min_filtered[i, j] = min_val return min_filtered # load the image img = cv2.imread('image.jpg') # apply the minimum filter min_filtered = min_filter(img, 5) # display the original and filtered images cv2.imshow('Original Image', img) cv2.imshow('Minimum Filtered Image', min_filtered) cv2.waitKey(0) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值