写一段代码在matlab使用蒙特卡洛法进行理想低通滤波器的图像降噪
时间: 2024-05-04 17:17:46 浏览: 109
以下是使用蒙特卡洛法进行理想低通滤波器的图像降噪的 MATLAB 代码:
```matlab
% 读取图像
img = imread('lena.png');
% 转换为灰度图像
img = rgb2gray(img);
% 添加高斯噪声
noisy_img = imnoise(img, 'gaussian', 0, 0.01);
% 定义滤波器半径和采样点数
r = 10;
n = 100000;
% 生成随机采样点
x = randi([1 size(img, 1)], 1, n);
y = randi([1 size(img, 2)], 1, n);
% 计算采样点在理想低通滤波器下的响应值
d = sqrt((x - size(img, 1)/2).^2 + (y - size(img, 2)/2).^2);
h = double(d <= r);
% 对采样点响应值进行平均,得到滤波器的频率响应
H = mean(h);
% 对图像进行傅里叶变换
F = fft2(noisy_img);
% 将频率响应矩阵扩展到与图像频域相同的大小
H = fftshift(H);
H = repmat(H, size(F, 1), 1);
% 将滤波器应用于图像频域
G = H .* F;
% 对滤波后的图像进行傅里叶反变换
filtered_img = real(ifft2(G));
% 显示原始图像、加噪声后的图像和滤波后的图像
subplot(1, 3, 1);
imshow(img);
title('Original Image');
subplot(1, 3, 2);
imshow(noisy_img);
title('Noisy Image');
subplot(1, 3, 3);
imshow(filtered_img, []);
title('Filtered Image (Ideal Lowpass)');
```
这段代码将生成随机采样点,并计算其在理想低通滤波器下的响应值。通过对采样点响应值进行平均,得到滤波器的频率响应。然后,将频率响应矩阵扩展到与图像频域相同的大小,并将滤波器应用于图像频域。最后,对滤波后的图像进行傅里叶反变换,得到降噪后的图像。
阅读全文