matlab实现中值滤波不用预定义函数
时间: 2023-08-06 16:25:23 浏览: 177
中值滤波是一种常用的图像处理方法,可以用于去除图像中的噪声。下面是一个简单的Matlab实现中值滤波的方法:
```matlab
% 读入图像
img = imread('lena.png');
% 中值滤波,以3x3的窗口为例
[m, n] = size(img);
filtered_img = zeros(m, n);
for i = 2:m-1
for j = 2:n-1
% 取3x3窗口内的像素值
window = img(i-1:i+1, j-1:j+1);
% 对窗口内的像素值排序,取中间值
filtered_img(i, j) = median(window(:));
end
end
% 显示原图和中值滤波后的图像
subplot(1, 2, 1), imshow(img), title('原图');
subplot(1, 2, 2), imshow(filtered_img), title('中值滤波后的图像');
```
在这个例子中,我们使用了一个嵌套的for循环来遍历图像的每个像素,并取3x3窗口内的像素值。然后,我们对这个窗口内的像素值进行排序,取中间值作为中值滤波的结果。最后,我们显示原图和中值滤波后的图像。
需要注意的是,这个例子仅仅是一个简单的中值滤波实现,可能存在一些效率上的问题。在实际应用中,我们可能需要考虑更加高效的算法来实现中值滤波。
相关问题
用matlab写中值滤波,不要用函数
以下是使用Matlab编写中值滤波算法的示例代码:
```matlab
% 读入图像
img = imread('lena.bmp');
% 显示原始图像
subplot(1,2,1);
imshow(img);
title('原始图像');
% 定义滤波器大小
winSize = 3;
% 计算边缘扩展大小
border = floor(winSize/2);
% 边缘扩展
imgBorder = padarray(img,[border border],'symmetric','both');
% 中值滤波
for i = 1:size(img,1)
for j = 1:size(img,2)
% 提取当前像素点的邻域
window = imgBorder(i:i+2*border,j:j+2*border);
% 对邻域进行排序
windowSort = sort(window(:));
% 取中间值作为滤波结果
imgFiltered(i,j) = windowSort((winSize^2+1)/2);
end
end
% 显示滤波结果
subplot(1,2,2);
imshow(imgFiltered);
title('中值滤波结果');
```
该代码中,首先读入了一张图像,并显示了原始图像。然后定义了滤波器大小和边缘扩展大小,并进行了边缘扩展。接着使用两个for循环遍历图像中的每个像素点,提取当前像素点的邻域,对邻域进行排序,取中间值作为滤波结果。最后显示滤波结果。
matlab实现中值滤波
好的,针对您的问题,中值滤波是一种常用的图像处理方法,可以有效地去除图像中的噪声。下面是 MATLAB 中实现中值滤波的代码:
```matlab
% 读取图像
img = imread('lena.png');
% 设置滤波器大小
filter_size = 3;
% 对图像进行中值滤波
img_median = medfilt2(img, [filter_size, filter_size]);
% 显示原图和中值滤波后的图像
subplot(1, 2, 1);
imshow(img);
title('Original Image');
subplot(1, 2, 2);
imshow(img_median);
title('Median Filtered Image');
```
其中,`medfilt2` 函数用于进行中值滤波,第一个参数为输入图像,第二个参数为滤波器大小。
阅读全文