请选择 进入手机版 | 继续访问电脑版

图像处理作业(四)

[复制链接]
蝶蝶已蝶已蝶蝶 发表于 2021-1-2 11:46:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
题目1. 以lena图像为例,编程实现小波域维纳滤波(详细算法见十二讲ppt)小波变动可以使用matlab自带的dwt2.
1. 基于小波的维纳滤波算法原理

假设图像的观测模子
 ,满意最大后验概率模子,即求解

在维纳滤波中 和 都满意高斯分布。

 
而模子中方差的估计由如下式子给出:

2. 算法步调

Step1:

首先需要对原始图像举行高斯噪声的叠加,得到一张带有噪声的图像,再调用编写的wienerFilter函数举行维纳滤波的处置处罚。
Step2:

在主要的wienerFilter函数中,首先使用matlab自带的dwt2函数举行噪声图像的小波分解,分解的标准为3次,如下述代码所示:
  1. [CA,CH,CV,CD] = dwt2(img_noise,'bior2.2');[CA2,CH2,CV2,CD2] = dwt2(CA,'bior2.2');%再对低通CA举行分解[CA3,CH3,CV3,CD3] = dwt2(CA2,'bior2.2');
复制代码
此中,CA, CH, CV,CD分别为低频分量,水平高频,垂直高频,对角线高频。而高频的值(CH, CV,CD)包罗在一个元组中。
Step3:

再对每次迭代产生的CH,CV,CD三个高频分量举行方差 的估计,此时调用的是编写的calParameter函数,其盘算的代码如下。
  1. function CX = calParameter(CX)%CALPARAMETER :模子中方差的估计%   CX为传入的高频分量Yi = sort(CX(:));[col,cow] = size(CX);M=col*cow;HH= CX(:);% 将二维矩阵扁平化m = median(abs(HH));%取中值sigma_n = m/0.6745;% 盘算的得到sigma_nsigma = sum(sum(Yi.^2))/(M) - sigma_n*sigma_n;CX = CX*(sigma/(sigma_n^2+sigma));end
复制代码
Step4:

盘算完CH,CV,CD三个高频分量之后,使用matlab自带的idwt函数举行小波逆变动,与低频举行重构复原。
3. 代码

(1)main函数测试代码

Main函数用于调用,其代码如下所示:
  1. clc;img = imread('lena.jpg');imshow(img);title('原始图像');img_nose=imnoise(img,'gaussian',0,0.01);% 对原始图像添加高斯噪声imshow(img_nose);result=wienerFilter(img_nose);imshow(uint8(result));title('自界说函数wienerFilter维纳滤波');K1=wiener2(img_nose,[3 3]);imshow(K1);title('自带的wiener2函数滤波效果');imshow(uint8(result)-K1,[]);title('差值图像');
复制代码
(2)完整的wienerFilter函数

  1. function X0 = wienerFilter(img_noise)%wienerFilter 用于对图像举行维纳滤波% 1. 使用dwt2函数举行小波分解,分解三次后[CA,CH,CV,CD] = dwt2(img_noise,'bior2.2');[CA2,CH2,CV2,CD2] = dwt2(CA,'bior2.2');%再对低通CA举行分解[CA3,CH3,CV3,CD3] = dwt2(CA2,'bior2.2');% (cA, (cH, cV, cD))分别为低频分量,水平高频,垂直高频,对角线高频。而高频的值包罗在一个元组中% 2 . 再举行维纳滤波,使用自界说的calParameter函数对方差举行估计等CH3=calParameter(CH3);CV3=calParameter(CV3);CD3=calParameter(CD3);CH2=calParameter(CH2);CV2=calParameter(CV2);CD2=calParameter(CD2);CH=calParameter(CH);CV=calParameter(CV);CD=calParameter(CD);% 3. 盘算完CH,CV,CD三个高频分量之后,使用idwt小波逆变动,与低频举行重构复原。X2 = idwt2(CA3,CH3,CV3,CD3,'bior2.2');X1 = idwt2(X2(1:131,1:131),CH2,CV2,CD2,'bior2.2');X0 = idwt2(X1,CH,CV,CD,'bior2.2'); %X0为重建完成的图像end(3)模子方差估计的calParameter函数function CX = calParameter(CX)%CALPARAMETER :模子中方差的估计%   CX为传入的低频高频分量Yi = sort(CX(:));[col,cow] = size(CX);M=col*cow;HH= CX(:);% 将二维矩阵扁平化m = median(abs(HH));%取中值sigma_n = m/0.6745;% 盘算的得到sigma_nsigma = sum(sum(Yi.^2))/(M) - sigma_n*sigma_n;CX = CX*(sigma/(sigma_n^2+sigma));end
复制代码
4. 实验效果

 
  
     
     图1  实验运行效果     
为了比力自界说函数wienerFilter和系统自带的wiener2函数维纳滤波的效果,将两张图做差得到如下图像:
     
     图2  自界说函数与wiener2函数效果差值图像     
可以看出,除了在边沿上灰度值有略微的差别,在图像其他部分,自界说函数都实现了较好的滤波效果,与自带函数根本一致。
未经允许克制转载~

来源:https://blog.csdn.net/Toky_min/article/details/112004570
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )