matlab 中值滤波代码
时间: 2023-08-18 14:06:24 浏览: 133
MATLAB 中可以使用 medfilt2 函数实现二维中值滤波,示例代码如下:
```matlab
% 读取图像
I = imread('lena.png');
% 添加椒盐噪声
J = imnoise(I, 'salt & pepper', 0.02);
% 中值滤波
K = medfilt2(J);
% 显示结果
subplot(1, 2, 1), imshow(J), title('添加噪声的图像');
subplot(1, 2, 2), imshow(K), title('中值滤波后的图像');
```
上述代码中,首先读取一张图像并添加椒盐噪声,然后使用 medfilt2 函数进行中值滤波,最后显示原图和处理后的图像。其中,medfilt2 函数的参数可以指定滤波器的大小,例如:
```matlab
K = medfilt2(J, [3 3]); % 3x3 的滤波器
```
这将使用 3x3 的滤波器进行中值滤波。
相关问题
matlab中值滤波代码
以下是MATLAB中的一个简单的中值滤波器实现代码:
```matlab
function img_filtered = median_filter(img, kernel_size)
% img: 输入图像
% kernel_size: 滤波器的大小
% img_filtered: 滤波后的图像
[m, n] = size(img);
img_filtered = zeros(m, n);
% 补0操作,使得滤波器能够作用于图像边缘
img_padded = padarray(img, [floor(kernel_size/2), floor(kernel_size/2)], 'symmetric');
for i = 1:m
for j = 1:n
% 取出 kernel_size x kernel_size 的邻域
neighborhood = img_padded(i:i+kernel_size-1, j:j+kernel_size-1);
% 计算邻域中像素的中值
img_filtered(i, j) = median(neighborhood(:));
end
end
end
```
这个函数实现了一个基本的中值滤波器,输入图像img和滤波器的大小kernel_size,输出滤波后的图像img_filtered。这个代码使用了一个嵌套的for循环来遍历整个图像并计算每个像素的中值。为了能够在图像边缘正确地进行滤波操作,图像被用symmetric方式进行填充。
能帮我写一个不用库函数的matlab 中值滤波代码吗,保持维度与原图像一致
当然可以。在MATLAB中,中值滤波是一种非线性平滑处理,常用于去除噪声。以下是一个基本的中值滤波器实现,它会保留原始图像的维度:
```matlab
function filtered_image = median_filtering(image, filter_size)
% 确保filter_size是奇数
if mod(filter_size, 2) == 0
warning('Filter size must be odd. Adding 1.');
filter_size = filter_size + 1;
end
[rows, cols] = size(image);
% 初始化一个新的同样大小的滤波后的图像
filtered_image = zeros(rows, cols);
% 对于图像中的每一个像素
for i = 1:rows
for j = 1:cols
% 定义邻域窗口
neighborhood = image(max(1, i-filter_size/2):min(rows, i+filter_size/2), max(1, j-filter_size/2):min(cols, j+filter_size/2));
% 计算并保存中位数作为当前像素的值
filtered_image(i,j) = median(neighborhood(:));
end
end
end
```
这个函数接受一个二维图像`image`和一个奇数大小的滤波窗口`filter_size`作为输入,返回一个同样大小的经过中值滤波后的图像。注意,这个版本的代码假设输入图像的维度是行优先的(高度x宽度)。如果你想以列优先(宽度x高度)存储,你可以稍作修改。
**相关问题--:**
1. 中值滤波器是如何工作的?
2. 这段代码能处理彩色图像吗?如何处理?
3. 对于非常大的图像,这种实现效率如何?有没有优化方法?
阅读全文