本程序介绍如何在MATLAB中实现图像处理中的均值滤波算法,通过滑动窗口计算像素点的平均值来减少噪声,适用于初学者理解和应用。
自己编写的均值滤波器程序源代码如下:
```matlab
clc;
clear;
% 彩色图像灰度化
a = imread(C:\Users\wk\Desktop\2\IMG_20130423_143258.bmp);
g = rgb2gray(a);
figure(1)
imshow(g)
title(灰度图像);
g = uint16(g);
[m, n] = size(g);
f = zeros(m, n);
% 边缘像素处理
f(1, 1) = g(1, 1) + g(1, 2) + g(2, 1) + g(2, 2);
f(m, 1) = (g(m-1, 1)+g(m-1, 2)+g(m, 1)+g(m, 2))/4;
f(1,n)= (g(1,n-1)+g(1,n)+g(2,n-1)+g(2,n))/4;
f(m,n) = (g(m-1,n-1)+ g(m-1, n)+ g(m, n-1) + g(m, n))/4;
% 边缘像素处理
for i= 2:m - 1
f(i, 1)= (g(i-1, 1)+g(i, 1)+g(i+1, 1)+g(i-1, 2)+g(i ,2) + g(i+1, 2))/6;
f(i,n)=(g(i - 1,n )+ g( i ,n )+ g (i + 1,n )+ g (i - 1,n-1 )+ g (i , n-1)+g (i + 1, n-1 ))/6 ;
end
for j=2:n-1
f(1,j) = (g(1,j - 1)+g( 1 ,j )+g( 1 ,j + 1)+ g (2,j - 1)+ g (2, j )+ g (2, j + 1))/6;
f(m,j)= (g(m-1,j - 1) + g(m-1, j )+g(m-1,j + 1)+g( m ,j - 1)+g( m ,j )+g( m ,j + 1))/6 ;
end
% 中间像素处理
for i=2:m-1
for j =2:n-1
f(i, j)= ( g(i-1,j - 1) + g(i,j - 1)+g(i+1,j - 1)+g( i-1 ,j )+g( i ,j )+g( i+1 ,j )+g( i-1 ,j + 1)+ g (i, j + 1)+ g (i+1, j + 1))/9;
end
end
f = uint8(f);
figure(2)
imshow(f);
title(均值滤波后的灰度图像);
```