非局部均值滤波matlab
时间: 2023-10-16 20:23:09 浏览: 223
非局部均值滤波(NLM)-matlab程序
非局部均值滤波(Non-local Means Filtering)是一种图像去噪方法,它利用图像中相似区域的信息对每一个像素进行滤波。这种方法可以保留图像的细节,同时去除噪声。Matlab中可以使用“nlfilter”函数实现非局部均值滤波。下面是一个示例代码:
```matlab
% 读取图像
img = imread('lena.png');
% 添加高斯噪声
noise_img = imnoise(img, 'gaussian', 0.01);
% 定义滤波器大小和相似窗口大小
filter_size = [5 5];
window_size = [11 11];
% 定义非局部均值滤波函数
nlm_filter = @(x) mean2(x) + std2(x - mean2(x)) * mean2(abs(x - mean2(x))) / (std2(x) + eps);
% 应用非局部均值滤波
denoise_img = nlfilter(noise_img, window_size, nlm_filter);
% 显示原始图像和去噪后的图像
figure;
subplot(1, 2, 1);
imshow(noise_img);
title('Noisy Image');
subplot(1, 2, 2);
imshow(denoise_img);
title('Denoised Image');
```
在这个示例中,我们首先读取了一张图像,并添加了高斯噪声。然后,定义了滤波器大小和相似窗口大小,并使用“nlfilter”函数应用了非局部均值滤波。最后,我们显示了原始图像和去噪后的图像。
阅读全文