中点滤波和中值滤波的源代码分别是
时间: 2024-03-08 22:48:33 浏览: 72
以下是MATLAB中实现中点滤波的源代码:
```matlab
function J = midpoint_filter(I, n)
% I: 输入图像
% n: 滤波器大小
% J: 输出图像
% 获取滤波器大小
sz = floor(n/2);
% 获取输入图像大小
[row, col] = size(I);
% 创建输出图像
J = zeros(row, col);
% 对输入图像进行边界填充
I_pad = padarray(I, [sz sz], 'symmetric');
% 对每个像素进行滤波操作
for i = 1:row
for j = 1:col
% 获取滤波器窗口
window = I_pad(i:i+n-1, j:j+n-1);
% 对窗口中的像素进行排序,并取中间值作为输出像素值
J(i, j) = (min(window(:)) + max(window(:))) / 2;
end
end
% 调整输出图像数据类型
J = uint8(J);
end
```
在这个代码中,与中值滤波的代码类似,使用了MATLAB内置函数padarray来对输入图像进行边界填充,使用了双线性插值的方式来填充边界像素值。然后对每个像素进行滤波操作,获取滤波器窗口并将窗口中的像素值排序,计算窗口中像素值的最大值和最小值,然后将它们的平均值作为输出像素值。最后,将输出图像的数据类型调整为uint8类型。
以下是MATLAB中实现中值滤波的源代码:
```matlab
function J = median_filter(I, n)
% I: 输入图像
% n: 滤波器大小
% J: 输出图像
% 获取滤波器大小
sz = floor(n/2);
% 获取输入图像大小
[row, col] = size(I);
% 创建输出图像
J = zeros(row, col);
% 对输入图像进行边界填充
I_pad = padarray(I, [sz sz], 'symmetric');
% 对每个像素进行滤波操作
for i = 1:row
for j = 1:col
% 获取滤波器窗口
window = I_pad(i:i+n-1, j:j+n-1);
% 对窗口中的像素进行排序,并取中间值作为输出像素值
J(i, j) = median(window(:));
end
end
% 调整输出图像数据类型
J = uint8(J);
end
```
在这个代码中,使用了与中点滤波的代码类似的方式对输入图像进行边界填充,并对每个像素进行滤波操作,获取滤波器窗口并将窗口中的像素值进行排序,最后取中间值作为输出像素值。最后,将输出图像的数据类型调整为uint8类型。
阅读全文