基于MATLAB计算数字图像中用巴特沃斯低通滤波滤波方法的去噪前后的信噪比 的完整代码
时间: 2024-12-24 09:34:27 浏览: 7
在MATLAB中,巴特沃思低通滤波通常用于数字信号处理中的噪声去除,通过平滑图像减少高频噪声。以下是使用巴特沃斯滤波器对图像去噪并计算前后信噪比的一个简单示例:
```matlab
% 导入图像
img = imread('your_image_file.jpg'); % 替换为你要处理的图像文件名
% 验证图像是否已读取
if ~isnumeric(img)
error('Image could not be loaded.');
end
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 定义滤波器参数 (例如,50 Hz截止频率,6次阶)
cutoff_freq = 50;
filter_order = 6;
% 创建巴特沃斯滤波器
[b, a] = butter(filter_order, cutoff_freq/(imfinfo(gray_img).Frequencies(2)), 'low');
% 应用滤波器
filtered_img = filter(b, a, gray_img);
% 计算原图像的均值和标准差作为信噪比基准
noise_std = std(gray_img(:));
noisy_avg = mean(gray_img(:));
% 对滤波后的图像做同样的计算
filtered_avg = mean(filtered_img(:));
filtered_noise_std = std(filtered_img(:));
% 计算信噪比 (SNR) 去除和保留部分
snr_before = -10 * log10(noise_std^2 / noisy_avg);
snr_after = -10 * log10(filtered_noise_std^2 / filtered_avg);
% 显示原始图像和滤波后的图像
subplot(1,2,1), imshow(gray_img, []); title('Original Image');
subplot(1,2,2), imshow(filtered_img, []); title('Filtered Image');
% 输出信噪比
fprintf('Original SNR: %.2f dB\n', snr_before);
fprintf('Filtered SNR: %.2f dB\n', snr_after);
%
阅读全文