写一个基于时域的图像椒盐噪声去除,以及基于频域的正弦波噪声去除的matlab算法
时间: 2024-02-17 07:04:22 浏览: 245
以下是一个基于时域的图像椒盐噪声去除的MATLAB算法:
```matlab
% 读入图像
img = imread('lena.png');
img = rgb2gray(img);
% 添加椒盐噪声
img_noisy = imnoise(img,'salt & pepper',0.02);
% 基于时域的去噪
img_filtered = medfilt2(img_noisy);
% 显示结果
subplot(1,2,1), imshow(img_noisy), title('添加椒盐噪声的图像');
subplot(1,2,2), imshow(img_filtered), title('去噪后的图像');
```
该算法首先读入一张灰度图像,然后利用`imnoise`函数添加了椒盐噪声。接着利用MATLAB内置函数`medfilt2`进行基于时域的去噪操作。最后用`subplot`函数将添加噪声的图像和去噪后的图像分别显示出来。
以下是一个基于频域的正弦波噪声去除的MATLAB算法:
```matlab
% 读入图像
img = imread('lena.png');
img = rgb2gray(img);
% 生成正弦波噪声
[row, col] = size(img);
noise = 5*sin(2*pi*0.05*(1:col))' * sin(2*pi*0.05*(1:row));
% 添加正弦波噪声
img_noisy = double(img) + noise;
% 基于频域的去噪
fft_img = fft2(img_noisy);
H = zeros(row, col);
H(1:10, 1:10) = 1;
H(end-9:end, 1:10) = 1;
H(1:10, end-9:end) = 1;
H(end-9:end, end-9:end) = 1;
img_filtered = real(ifft2(fft_img .* H));
% 显示结果
subplot(1,2,1), imshow(uint8(img_noisy)), title('添加正弦波噪声的图像');
subplot(1,2,2), imshow(uint8(img_filtered)), title('去噪后的图像');
```
该算法首先读入一张灰度图像,然后生成了一个正弦波噪声。接着将原图像转换成`double`型,并将噪声与原图像相加得到添加噪声后的图像。然后将图像进行傅里叶变换,并手动构造一个频率域滤波器`H`,将滤波器与傅里叶变换后的图像相乘得到频域去噪后的结果,并将其进行反傅里叶变换。最后用`subplot`函数将添加噪声的图像和去噪后的图像分别显示出来。
阅读全文