算法分析
对原图像矩阵边界填充(填充的行列根据滤波器模板大小来设置),这里使用3*3的模板,所以向外扩充一圈,行和列增加2,这里使用的是复制边界的填充方式‘replicate‘(直接调用的padarray函数),也可以直接通过矩阵赋值的方法实现边界填充
遍历原图像每个通道的每个像素点,取扩充边界后图像中滤波器大小的像素点个数,求得中值,将中值赋给当前遍历的像素点
输出图像的大小是新开辟的和原图像大小相等的矩阵,求得的中值应该赋值给新矩阵中每个元素
function outputimg = mymedfilt2(A)
% 利用中值滤波去噪
% 参数A是加噪的图像矩阵
% outputimg是输出中值滤波后的图像
[H,W,CH] = size(A);
N = 3; %设置中值滤波器的大小为3*3
M = zeros(H+2,W+2,CH);
%对彩色图的每一个通道都进行边界填充
for i = 1 : CH
%直接调用padarray,在原图的每一维度的第一个元素和最后一个元素后,以复制边界的方式进行填充
M(:,:,i) = padarray(A(:,:,i),[1,1],‘replicate‘);
end
%矩阵赋值法,复制边界型填充
% M(2:height+1,2:width+1) = A(1:height,1:width);%原矩阵直接复制到新矩阵中心
% %使用直接复制最边界的层
% M(1,2:width+1) = A(1,:); %将M的第一行
% M(heigh