均值滤波原理及matlab实现代码

一、基本原理

噪声点像素的灰度与其邻域内像素的灰度显著不同,根据噪声点的这一特性,可以使用邻域均值滤波来降低噪声。
利用一个大小为m×n的模板对一幅大小为M×N的图像进行均值滤波可以表示为如下公式,其中m=2a+1,n=2b+1:
均值滤波原理及matlab实现代码_第1张图片
在实际应用中,可以根据不同需要选择不同的模板尺寸,如3×3、5×5、7×7等。常用的3×3模板如下,模板中心对应需要进行处理的像素。
均值滤波原理及matlab实现代码_第2张图片

二、实现步骤

(1)生成一个大小为m×n的模板,模板中所有元素的值均为1/mn;
(2)将模板在图像中漫游,并将模板中心与某像素重合;
(3)将模板系数与模板下对应的像素相乘;
(4)将所有乘积相加;
(5)将上述求和结果赋予模板中心对应像素。

三、效果演示

(1)使用大小为3×3的模板进行均值滤波;
均值滤波原理及matlab实现代码_第3张图片
(2)使用大小为11×11的模板进行均值滤波;
均值滤波原理及matlab实现代码_第4张图片
(3)使用大小为31×31的模板进行均值滤波;
均值滤波原理及matlab实现代码_第5张图片

四、matlab实现代码

%% 均值滤波,模板的大小可以改变
clear,close all
srcImg = imread('均值滤波用.tif');
a = 1;% 模板行数为2*a+1
b = 1;% 模板列数为2*b+1
dstImg = average_Filter(srcImg,a,b);% 调用均值滤波函数
h = figure(1);
size = get(0,'ScreenSize');
set(h,'position',size)
subplot(121);
imshow(srcImg);
title('原始图像','fontsize',24);
subplot(122);
imshow(dstImg);
title(sprintf('均值滤波后的图像(模板大小为%d×%d)',2*a+1,2*b+1),'fontsize',24);
function dstImg = average_Filter(srcImg,a,b)
    srcImg = double(srcImg);% 注意
    [rows,cols] = size(srcImg);
    dstImg = srcImg;
    m = 2*a+1;% 模板行数
    n = 2*b+1;% 模板列数
    mask(1:m,1:n)=1;
    for i = 1:rows-m+1
        for j = 1:cols-n+1
            masked = srcImg(i:i+m-1,j:j+n-1);% 被模板覆盖的图像区域
            temp = mask.*masked;% 模板与图像区域对应位置的像素相乘
            temp = sum(temp(:));
            temp = temp/(m*n);
            dstImg(i+a,j+b) = temp;
        end
    end
    dstImg = uint8(dstImg);
end

你可能感兴趣的:(matlab,均值算法)