利用Matlab写出中值滤波法3*3,且不用自带函数
时间: 2024-05-05 15:15:55 浏览: 94
以下是利用Matlab实现中值滤波法3*3的代码:
```matlab
%读取原始图像
I = imread('lena.jpg');
%将图像转换为灰度图像
I = rgb2gray(I);
%将图像转换为双精度类型
I = double(I);
%获取图像大小
[m, n] = size(I);
%定义卷积核(3*3的矩阵)
kernel = [1 1 1; 1 1 1; 1 1 1];
%定义输出图像
J = zeros(m, n);
%进行中值滤波
for i = 2:m-1
for j = 2:n-1
%获取3*3的像素矩阵
pixels = [I(i-1, j-1) I(i-1, j) I(i-1, j+1)
I(i, j-1) I(i, j) I(i, j+1)
I(i+1, j-1) I(i+1, j) I(i+1, j+1)];
%将像素矩阵按照升序排列
sorted_pixels = sort(pixels(:));
%取中间值作为输出图像的像素值
J(i, j) = sorted_pixels(5);
end
end
%将输出图像转换为灰度图像
J = uint8(J);
%显示原始图像和滤波后的图像
subplot(1, 2, 1), imshow(uint8(I)), title('原始图像');
subplot(1, 2, 2), imshow(J), title('中值滤波后的图像');
```
在上述代码中,首先读取了原始图像,并将其转换为灰度图像和双精度类型。然后定义了一个3*3的卷积核,以及一个输出图像。接着进行了中值滤波,遍历了每个像素,并获取了周围3*3的像素矩阵,将其按照升序排列,取中间值作为输出图像的像素值。最后将输出图像转换为灰度图像,并显示原始图像和滤波后的图像。
阅读全文