题目26利用图像滤波算法实现对高椒盐噪声的去噪处理(新算子)
网络寻找具有高椒盐噪声的代表图片,然后进行处理。
要求:
1、掌握椒盐噪声的概率特点;
2、选用适当的滤波方式对图像进行滤波;
3、运用迭代方法提高滤波效果;
4、改进算子,使图像达到标准对照图像效果。1、要求:文档撰写的主要内容包括但不限于课题的背景与意义、课题的主要内容、课题的设计过程或思路、源代码及注释、实验结果及分析、结论、参考文献。
2、报告格式:文档采用正规论文的撰写方式,页边距:上—2.5 cm,下—2.0 cm,左—2.0 cm,右—2.0 cm。页码按阿拉伯数字(1,2,3,……)连续编排,页码位于页面底端,采用五号Times New Roman居中书写。
(1)标题(如:××××课程设计),黑体三号。
(2)顺序号及标题(如:一、课程设计目的),宋体小四加粗,缩进2字符、不采用自动编号,单独一行。下级顺序号依次采用1.(1)1),缩进2字符,不采用自动编号。
(3)正文内容,宋体小四,首行缩进2字符,中文标点;数字、英文采用Times New Roman字体,小四。
(4)全文采用A4页面,页边距和版式采用默认设置,段落1.5倍行距。
(5)表格中的文字,宋体五号,半角字符、英文标点;数字、英文采用Times New Roman字体,五号。
3、公式用公式编辑器统一编写,从(1)开始连续编排,公式字体为Times New Roman体。图从图1开始连续编排,写上图题(如:图1 灰度化图像)。
4、需要设置目录页,包括一级标题、二级标题、三级标题(如果没有二级、三级标题可以不写),目录中各级标题的字体字号同正文中标题字体字号。两千字以上% 小波去噪程序
clc; clear; close all; % 清空命令行、工作区并关闭图形窗口
% 模式选择与信号生成
use_real_audio = 0;
% 模式1:生成模拟语音信号
if ~use_real_audio
fs = 8000; % 采样率(符合语音信号处理的常用标准)
t = 0:1/fs:3; % 生成3秒时长的时间序列
% 合成语音信号:包含500Hz正弦波(0.5幅值)和1200Hz余弦波(0.3幅值)
clean = 0.5*sin(2*pi*500*t) + 0.3*cos(2*pi*1200*t);
noise_intensity = 0.2; % 噪声强度参数(控制高斯噪声幅度)
noise = noise_intensity * randn(size(clean)); % 生成高斯白噪声(与信号等长)
noisy = clean + noise; % 构建含噪信号(任务书要求的加噪过程)
% 模式2:加载真实语音文件
else
[clean, fs] = audioread('C:\Users\86155\Downloads\beijing.wav'); % 读取WAV文件
clean = clean(:,1); % 提取单声道
clean = clean / max(abs(clean)); % 信号归一化(幅值范围[-1,1],避免计算溢出)
noise = 0.1 * randn(size(clean)); % 添加较低强度噪声
noisy = clean + noise;
end
% 小波去噪核心处理
level = 3; % 分解层数
wavelets = {'db4', 'haar'}; % 使用的小波类型
denoised_signals = cell(1,2); % 单元格数组存储去噪结果
for i = 1:2
wname = wavelets{i}; % 循环提取小波基名称('db4'和'haar')
% 自动获取全局阈值(使用ddencmp函数)
[thr, sorh, keepapp] = ddencmp('den', 'wv', noisy);
% 参数说明:
% 'den'表示去噪任务,'wv'表示小波变换,noisy为输入含噪信号
% thr-全局阈值,sorh-阈值策略('s'软阈值,'h'硬阈值,默认硬阈值)
% keepapp-是否保留近似系数(1保留,0不保留,默认保留)
% 执行全局阈值去噪并重构信号(任务书要求使用wdencmp函数)
denoised_signals{i} = wdencmp('gbl', noisy, wname, level, thr, sorh, keepapp);
% 参数说明:
% 'gbl'-全局阈值模式,使用统一阈值处理所有细节系数
% noisy-输入含噪信号,wname-小波基,level-分解层数
% thr/sorh/keepapp-来自ddencmp的输出参数
end
% 信号长度对齐(避免因采样差异导致绘图错位)
min_len = min([length(clean), length(denoised_signals{1}), length(denoised_signals{2})]);
clean = clean(1:min_len); % 截断原始信号至最小长度
noisy = noisy(1:min_len); % 截断含噪信号至最小长度
denoised_db4 = denoised_signals{1}(1:min_len); % 提取db4去噪结果并截断
denoised_haar = denoised_signals{2}(1:min_len); % 提取Haar去噪结果并截断
% 信噪比(SNR)计算
% 信噪比公式:SNR = 10*log10(信号功率/噪声功率)
% 其中:信号功率=clean²的累加和,噪声功率=(含噪信号-clean)²的累加和
snr_noisy = 10*log10(sum(clean.^2)/sum((noisy - clean).^2));
snr_db4 = 10*log10(sum(clean.^2)/sum((denoised_db4 - clean).^2));
snr_haar = 10*log10(sum(clean.^2)/sum((denoised_haar - clean).^2));
% 结果输出与可视化
disp('========== 去噪性能 ==========');
fprintf('加噪信号SNR: %.2f dB\n', snr_noisy); % 保留两位小数
fprintf('db4去噪后SNR: %.2f dB\n', snr_db4);
fprintf('Haar去噪后SNR: %.2f dB\n', snr_haar);
% 时域波形对比图
figure('Position', [100, 100, 800, 600]); % 设置图形窗口位置和大小
subplot(4,1,1); plot(clean);
title('原始信号'); xlim([1 min_len]); % 显示原始信号波形
% 说明:xlim限制显示范围,避免因信号截断导致左侧空白
subplot(4,1,2); plot(noisy);
title(['加噪信号 (SNR=', num2str(snr_noisy, '%.1f'), 'dB)']);
xlim([1 min_len]); % 显示含噪信号波形并标注SNR值
subplot(4,1,3); plot(denoised_db4);
title(['db4去噪结果 (SNR=', num2str(snr_db4, '%.1f'), 'dB)']);
xlim([1 min_len]); % 显示db4去噪结果波形
subplot(4,1,4); plot(denoised_haar);
title(['Haar去噪结果 (SNR=', num2str(snr_haar, '%.1f'), 'dB)']);
xlim([1 min_len]); % 显示Haar去噪结果波形
% 频域频谱分析图
figure('Position', [200, 200, 800, 400]); % 新建频谱分析窗口
nfft = 2^nextpow2(min_len); % 计算最小2的幂次长度(优化FFT计算效率)
f = fs/2*linspace(0,1,nfft/2+1); % 生成频率轴(0到fs/2的Nyquist频率)
subplot(1,2,1);
Y_clean = fft(clean, nfft); % 对原始信号进行FFT变换
plot(f, abs(Y_clean(1:nfft/2+1))); % 绘制单边幅度谱(取前半部分)
title('原始信号频谱'); xlabel('Frequency (Hz)'); % 标注频谱图
subplot(1,2,2);
Y_noisy = fft(noisy, nfft); % 含噪信号FFT
Y_denoised = fft(denoised_db4, nfft); % db4去噪信号FFT
plot(f, abs(Y_noisy(1:nfft/2+1))); % 绘制含噪信号频谱
hold on;
plot(f, abs(Y_denoised(1:nfft/2+1)), 'r'); % 叠加db4去噪频谱(红色曲线)
title('去噪前后频谱对比'); legend('加噪信号', 'db4去噪'); 完成报告