用matlab,采用4x4模板,自定义函数实现对图像进行均值滤波和中值滤波
时间: 2024-10-01 19:11:50 浏览: 37
脚本.zip_offer4x9_图像剪裁_均值滤波
在MATLAB中,你可以使用内置的imfilter函数结合自定义函数来实现图像的均值滤波和中值滤波。这两种滤波都是平滑图像噪声、去除椒盐噪声常用的方法。
1. **均值滤波**:
均值滤波通过每个像素周围指定大小(如4x4)的邻域取平均值来平滑图像。以下是简单的步骤:
```matlab
% 定义4x4模板
template = ones(4) / 16;
% 自定义函数 (假设img是输入图像)
function smoothed_img = mean_filter(img, template)
% 使用imfilter函数,第一个参数是输入图像,第二个是模板,第三个是选项
smoothed_img = imfilter(img, template, 'replicate');
end
% 调用自定义函数并应用到图像上
filtered_img = mean_filter(original_image, template);
```
2. **中值滤波**:
中值滤波则是替换每个像素点的值为其周围像素值的中位数,对于抗椒盐噪声更有效。由于中值滤波是排序操作,所以通常需要稍微复杂一些:
```matlab
% 自定义函数 (这里可以先创建一个辅助函数计算中值)
function median_val = find_median(values)
values = sort(values);
if mod(length(values), 2) == 0
median_val = (values(end/2) + values(end/2 - 1)) / 2;
else
median_val = values(end/2 + 1);
end
end
function filtered_img = median_filter(img, kernel_size)
% 将4x4窗口转换为向量
kernel = reshape(ones(kernel_size), [kernel_size^2, 1]);
% 计算每行和每列的中值
row_meds = cellfun(@find_median, mat2cell(img, ones(1, size(img, 2)), kernel_size));
col_meds = cellfun(@find_median, mat2cell(img', kernel_size, ones(1, size(img, 1))));
% 应用中值滤波
for i = 1:size(img, 1)
for j = 1:size(img, 2)
filtered_img(i, j) = median_val(row_meds{i, j}, col_meds{j, i});
end
end
end
% 使用中值滤波
filtered_img = median_filter(original_image, 4);
```
阅读全文