MATLAB手写中值滤波代码,设定多个不同的窗口大小,并可视化,不要调库
时间: 2024-03-10 13:48:20 浏览: 56
以下是MATLAB的手写中值滤波代码,其中包括了多个不同的窗口大小,并且进行了可视化处理。这里是不使用MATLAB自带的`medfilt2`函数,而是手动实现中值滤波。
```matlab
% 设置输入图像
img = imread('example.jpg');
% 定义窗口大小
windows = [3, 5, 7, 9];
% 创建可视化窗口
figure;
% 循环遍历所有窗口大小
for i = 1:length(windows)
% 获取当前窗口大小
window_size = windows(i);
% 创建一个空的输出图像
img_med = zeros(size(img));
% 循环遍历所有像素
for x = 1:size(img, 1)
for y = 1:size(img, 2)
% 获取当前像素的窗口
x_min = max(1, x - floor(window_size/2));
y_min = max(1, y - floor(window_size/2));
x_max = min(size(img, 1), x + floor(window_size/2));
y_max = min(size(img, 2), y + floor(window_size/2));
window = img(x_min:x_max, y_min:y_max);
% 对窗口内的像素进行排序,并取中间值作为当前像素的值
sorted_window = sort(window(:));
img_med(x, y) = sorted_window(floor(length(sorted_window)/2) + 1);
end
end
% 在可视化窗口中显示当前中值滤波结果
subplot(2, 2, i);
imshow(uint8(img_med));
title(sprintf('Window size: %d', window_size));
end
```
在上述代码中,我们首先设置了输入图像,然后定义了多个不同的窗口大小。接下来,我们创建了一个可视化窗口,并使用循环遍历所有窗口大小。在每次循环中,我们获取当前窗口大小,并手动实现了中值滤波算法。具体来说,我们循环遍历所有像素,并获取当前像素的窗口。然后,我们对窗口内的像素进行排序,并取中间值作为当前像素的值。最后,我们在可视化窗口中显示当前中值滤波结果,并使用`title`函数添加窗口大小的标签。
运行上述代码后,您将获得一个可视化窗口,其中包括了不同窗口大小下的中值滤波结果。
阅读全文