matlab中值滤波源代码
时间: 2023-08-07 17:42:22 浏览: 51
以下是 Matlab 中实现中值滤波的示例代码:
```matlab
function img_filtered = median_filter(img, kernel_size)
% 中值滤波
% img: 待滤波图像
% kernel_size: 滤波器大小
% 获得图像尺寸
[rows, cols] = size(img);
% 计算滤波器的半径
r = floor(kernel_size / 2);
% 复制边缘像素
img_padded = padarray(img, [r, r], 'symmetric');
% 初始化输出图像
img_filtered = zeros(rows, cols);
% 对每个像素进行中值滤波
for i = 1:rows
for j = 1:cols
% 获取滤波器窗口
window = img_padded(i:i+2*r, j:j+2*r);
% 计算窗口中所有像素的中值
img_filtered(i, j) = median(window(:));
end
end
end
```
在上述代码中,我们首先定义了一个名为 `median_filter` 的函数,该函数接受两个输入参数:待滤波图像 `img` 和滤波器大小 `kernel_size`。函数的输出为滤波后的图像 `img_filtered`。
在函数中,我们首先获得了图像的尺寸,并计算了滤波器的半径。然后,我们使用 `padarray` 函数在图像的边缘复制了像素,以便在滤波时处理边缘像素。
接下来,我们初始化了一个输出图像 `img_filtered`,并使用两个嵌套的循环遍历图像中的每个像素。对于每个像素,我们获取了以该像素为中心的滤波器窗口,并计算了窗口中所有像素的中值。最后,我们将该中值作为该像素的输出值。
值得注意的是,在上述代码中,我们使用了 `symmetric` 参数对 `padarray` 函数进行调用,以便在边缘处使用对称复制。这种复制方式可以避免出现边缘效应,从而得到更加平滑的输出图像。