用MATLAB编写一个中值滤波函数:zzlb() , 用于滤除图像的椒盐噪声
时间: 2024-03-15 12:45:29 浏览: 92
好的,我会为您编写一个MATLAB的中值滤波函数zzlb(),用于滤除图像的椒盐噪声。以下是代码实现:
```matlab
function img_filtered = zzlb(img, kernel_size)
% img: 待滤波的图像
% kernel_size: 滤波窗口大小,必须为正奇数
% 获取图像大小
[rows, cols] = size(img);
% 创建一个全零数组,作为滤波后的图像
img_filtered = zeros(rows, cols);
% 计算滤波时需要偏移的距离
offset = floor(kernel_size/2);
% 对于图像边缘,不进行滤波操作
for i = offset+1:rows-offset
for j = offset+1:cols-offset
% 获取像素值
pixel = img(i-offset:i+offset, j-offset:j+offset);
% 对像素值排序并取中值
pixel_sorted = sort(pixel(:));
median_value = pixel_sorted(floor(kernel_size^2/2)+1);
% 将中值赋给滤波后的像素
img_filtered(i,j) = median_value;
end
end
% 将图像类型转换为 uint8
img_filtered = uint8(img_filtered);
end
```
使用方法:将待滤波的图像和滤波窗口大小作为参数传入函数zzlb(),即可得到滤波后的图像。例如:
```matlab
% 读入图像
img = imread('test_image.png');
% 对图像进行中值滤波
img_filtered = zzlb(img, 3); % 滤波窗口大小为3
% 显示原图和滤波后的图像
figure;
subplot(1,2,1); imshow(img); title('Original Image');
subplot(1,2,2); imshow(img_filtered); title('Filtered Image');
```
注意:在使用中值滤波时,滤波窗口大小必须为正奇数。如果窗口大小为偶数或负数,会导致程序报错。
阅读全文