对图像用3x3的中值滤波去噪代码matlab
时间: 2023-11-06 09:03:04 浏览: 192
中值滤波是一种常用的图像去噪方法,它通过计算像素点周围邻域内像素值的中值来替换掉原像素点的值。以下是一段用MATLAB实现3x3中值滤波的代码:
```MATLAB
function filtered_img = median_filter(img)
[m, n] = size(img); % 获取输入图像的尺寸
filtered_img = zeros(m, n); % 创建一个空白的输出图像
for i = 2:m-1
for j = 2:n-1
window = img(i-1:i+1, j-1:j+1); % 提取3x3邻域窗口
sorted_vals = sort(window(:)); % 对窗口内的像素值进行排序
median_val = sorted_vals(5); % 获取中值(第5个最小值)
filtered_img(i, j) = median_val; % 将中值赋给输出图像对应位置的像素点
end
end
filtered_img = uint8(filtered_img); % 将输出图像转换为8位无符号整型
figure, subplot(1,2,1), imshow(img), title('原图像'); % 在图像上方创建一个新的subplot,显示原始图像
subplot(1,2,2), imshow(filtered_img), title('中值滤波后图像'); % 在图像上方创建一个新的subplot,显示中值滤波后的图像
end
```
你可以通过调用上述函数,传入一个灰度图像(`img`),即可实现3x3的中值滤波去噪。函数会返回一个经过中值滤波处理后的图像(`filtered_img`)。最后,代码还会将原图像和滤波后的图像在两个子图中以比较的方式进行显示,方便查看滤波效果。
阅读全文