给某图像加入高斯或椒盐噪声,使用不同的空间域和频域滤波器对图像进行滤波处理MATLAB代码
时间: 2024-10-19 15:07:56 浏览: 29
在MATLAB中,你可以使用内建函数来给图像添加高斯噪声或椒盐噪声,并应用空间域和频域滤波器。以下是简单的示例:
1. **添加噪声**:
```matlab
% 加载图像
img = imread('your_image.jpg');
% 高斯噪声
sigma = 5; % 高斯噪声的标准差
noisy_img_gaussian = img + sigma * randn(size(img));
% 椒盐噪声
salt_noise_prob = 0.05; % 盐噪声的概率
noisy_img_saltpepper = imnoise(img, 'salt & pepper', salt_noise_prob);
% 保存结果
imwrite(noisy_img_gaussian, 'gaussian_noisy_img.jpg');
imwrite(noisy_img_saltpepper, 'salt_pepper_noisy_img.jpg');
```
2. **空间域滤波器(例如均值滤波)**:
```matlab
% 均值滤波
filtered_img = imfilter(noisy_img_gaussian, ones(3) / 9, 'replicate'); % 3x3 窗口
% 保存滤波后的图像
imwrite(filtered_img, 'mean_filtered_img.jpg');
```
3. **频域滤波器(例如低通滤波)**:
```matlab
% 将图像转换为频率域(离散傅里叶变换)
frequencies = fft2(img);
freq_domain_img = abs(frequencies);
% 设定低通截止频率
cutoff_freq = round(size(freq_domain_img, 1) / 4); % 取四分之一作为阈值
% 使用布尔矩阵表示高频部分并进行衰减
low_pass_mask = freq_domain_img < cutoff_freq;
% 应用低通滤波(将高频部分设为零)
filtered_freq_domain = low_pass_mask .* freq_domain_img;
filtered_img_back = ifft2(filtered_freq_domain);
% 保存结果
imwrite(double(reshape(filtered_img_back, size(img))), 'lowpass_filtered_img.jpg');
```
阅读全文