基于维纳滤波图像复原的设计与实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像在形成、传输和记录过程中,由于受多种原因的影 响,图像的质量会有所下降,典型表现为图像模糊、失真、 有噪声等,这一过程称为图像的退化。引起图像退化的原因 有很多,比如大气湍流效应、传感器特性的非线性、光学系 统的像差、成像设备与物体之间的相对运动等。
1 图像退化模型
图 1 图像退化模型
图像复原试图利用退化现象的某种先验知识,即退化模
pixel = (unsigned char)*lpSrc; fftSrc[(2*lLineBytes)*j+2*i+1]=(double)pixel; fftSrc[(2*lLineBytes)*j+2*i+1]=0.0; if(i<5&&j==0) { fftKernel[(2*lLineBytes)*j+2*i+1]=1/5.0; } else { fftKernel[(2*lLineBytes)*j+2*i+1]=0.0; } fftKernel[(2*lLineBytes)*j+2*i+2]=0.0; if(i+j==((int)((i+j)/8))*8) { fftNoise[(2*lLineBytes)*j+2*i+1]= -16.0; } else { fftNoise[(2*lLineBytes)*j+2*i+1]=0.0; } fftNoise[(2*lLineBytes)*j+2*i+2]=0.0; } } Srand((unsigned)time(NULL)); fourn((fftSrc,nn,2,1);//对源图像进行 FFT fourn((fftKernel,nn,2,1);//对卷积核图像进行 FFT fourn((fftNoise,nn,2,1);//对噪声图像进行 FFT for(i=1;i<lHeight*lLineBytes*2;i+=2) { a=fftSrc[i]; b=fftSrc[i+1];
F
(u, v)
=
⎡ ⎢ ⎢⎣
S
f
H (u, v)
* (u , v)S f | H (u, v)
(u, v)
⎤
|2
+
S
n
(
u
,
v
)
⎥ ⎥⎦
G
(
u
,
v
)
=
⎡ ⎢ ⎢⎣ |H Nhomakorabea(u, v)
|2
H * (u, v) + Sn (u, v)
/
S
f
⎤ ⎥ (u , v ) ⎥⎦
G (u, v)
=
⎡ ⎢ ⎢⎣
H
1 (u, v)
(1)
其中,f(x,y)、g(x,y)、n(x,y)是随即场,并假定噪声
的统计特性已知。因此,在给定了 g(x,y),仍然不能精确求 ∧
解 f(x,y),只能找出 f(x,y)的一个估计值 f (x, y) ,使得均方
误差最小,即
∧
e2 = E{[ f ( x, y ) − f ( x, y )]2}
关于维纳滤波方法的实现,首先仍要确定点扩散函数 h,
选取的 h 仍为
11111
11111
h =1/25 1 1 1 1 1
(5)
11111
11111
维纳滤波方法的实现步骤如下: (1)对退化图像为 g(x,y)及点扩散函数 h(x,y)进行傅 里叶变换,得到 G(u,v)和 H(u,v); (2)计算出 | H (u, v) |2 、 Sn (u, v) 、 S f (u, v) ,并将式 3 分 子 和 分 母 同 时 乘 以 H*(u,v) , 式 2.1.3 可 简 化 为 βH*(u,v)G(u,v) , β 为 计 算 得 到 的 一 个 常 值 , 再 对 βH*(u,v)G(u,v)按点对点相乘运算。按公式(3)进行反傅里 叶变化就可求得原始图像 f(x,y)。
还要考虑其他条件约束,这种复原方法有约束复原方法。图 像恢复的原理:维纳滤波方法也就是最小二乘滤波,它是原
∧
始图像 f(x,y)及其恢复图像 f ( x , y ) 之间的均方误差最小的 复原方法。
设原始图像为 f(x,y),退化图像为 g(x,y),图像噪声为 n(x,y)。他们之间的关系如下:
∫ ∫ g ( x , y ) = +∞ +∞ f (α , β )h ( x − α , y − β )d α d β + n ( x, y ) −∞ −∞
2 线性复原算法
图像复原的主要目的是在假设具备退化图像 g(x,y)及 H(x,y)的某些只是的前提下,估计出原始图像 f(x,y)的估计
∧
∧
值 f ( x , y ) , f ( x , y ) 估计值应使准则为最优,下面着重介
绍线性复原算法的其中一种有约束维纳滤波算法。 有约束维纳滤波:如果要求某种优化准则为最优的同时,
g(x,y)=H[f(x,y)]+n(x,y)
(1)
图像复原可以看成一个估计过程,因为加性噪声 n(x,y)
是一种有统计性质的信息,如果估计出系统 H,那么有给定
的退化图像 g(x,y)可以接近地恢复 f(x,y)。由此可见,图像
复原的关键是确定系统 H。一般而言,H 是由某些原件或部件
以一定方式构造而成的整体,是输入型号和输出信号之间的 联系。
可以以季会年会的方式让所有的销售人员介绍自己成功的经验工作中存在的困难用交流的方式促进队伍之间的相互学习和提高同时也可以采用头脑风暴法去解决面临的瓶颈问题
2011 年第 8 期 (总第 144 期)
大众科技 DA ZHONG KE JI
No.8,2011 (Cumulatively No.144)
基于维纳滤波图像复原的设计与实现
c=fftkernel[i]; d= fftkernel[i+1]; e= fftNoise[i]; f=fftNoise[i+1]; multi=(a*a+b*b)/(a*a+b*b-e*e-f*f); if(c*c+d*d>le-3) { fftSrc[i]=(a*c+b*d)/(c*c+d*d)/multi; fftSrc[i+1]=(b*c-a*d)/(c*c+d*d)/multi;
|
H
(u, v)
| |2
H (u , v) |2 + Sn (u, v)
/
S
f
⎤ ⎥ G (u, v) (u , v ) ⎥⎦
(3)
式(3)中 H(u,v)为点扩散函数的傅里叶变换;H*(u,v)是
H(u,v)的复共轭, | H (u,v) |2 = H*(u,v)H(u,v); Sn (u, v) 为噪声
2.2 VC 编程实现维纳滤波方法的主要代码
BOOL WINAPI DIBWiener(CDib *pDib) { LPSTR lpSrc;//指向源图像的指针 Long i,j;//循环变量 Unsigned char pixel;//像素值 LONG lLineBytes;//图像每行的字节数 Double *fftSrc,*fftkernel,*fftNoise;//用于作 FFT 的数组 Unsigned long nn[3];//二维 FFT 的长度和宽度 Double MaxNum;//图像归一化因子 lLineBytes=WIDTHBYTES(lwidth * 8);//计算图像每行 的字节数
(2)
【收稿日期】2011-05-14 【作者简介】魏扬(1983-),男,四川自贡人,四川理工学院计算机学院教师,研究方向为计算机软件工程。
- 52 -
∧
其中 f ( x , y ) 是给定 g(x,y)对 f(x,y)的最小二乘方估计。
对于上式通过傅立叶变化转换为频域 的计算,则误差函数的
最小值在频域用下列表达式计算。
魏扬
(四川理工学院计算机学院,四川 自贡 643000)
【摘 要】像复原的目的是从退化图像中重建原始图像,改善退化图像的视觉质量。维纳滤波能够较好地进行图像恢复。
【关键词】维纳滤波;图像恢复;图象退化模型
【中图分类号】TN911.73
【文献标识码】A
【文章编号】1008-1151(2011)08-0052-03
- 53 -
double dpower = log((double)lLineBytes)/log(2.0); fftSrc = new double [lHeight*lLineBytes*2+1]; fftKernel = new double[lHeight*lLineBytes*2+1]; fftNoise =new double[lHeight*lLineBytes*2+1]; nn[1]=lHeight; nn[2]=lLineBytes; for(j=0;j< lHeight;j++) { for(i=0;i< lLineBytes;i++) { lpSrc = (char *)lpDIBBits + lLineBytes*j+I;
(下转第 66 页)需要勤动脑、勤动脚、勤动手、勤动嘴的“四 勤”工作,没有较高的工作热情很容易产生畏难情绪,导致 工作的局面不容易打开。只有具备了较高的工作热情,销售 人员在陌生、多变的环境中才会保持耐心、激情和勇气,才 能为销售任务的完成保存希望。
的功率谱;S f (u,v) 为未退化图像的功率谱。对式(3)进行傅立
叶反变换可得
f (x, y) = F −1[F (u, v)]
=
F
⎡ −1{⎢
⎢⎣
H
1 (u, v)
|
H
(u, v)
| |2
H (u, v) |2 + Sn (u, v)
/
S
f
⎤ ⎥ (u, v) ⎥⎦
G(u, v)}
(4)
2.1 算法描述
} } Fourn(fftSrc,nn,2,-1);//对结构图像进行反 FFT //确定归一化因子 for(){ for(){ ffrSrc[(2*lLineByres)*j+2*i+1]=sqrt(fftSrc[(2*l LineByres)*j+2*i+1]*fftSrc[(2*lLineBytes)*j+2*i+1]\+ fftSrc[(2*lLineBytes)*j+2*i+2]* fftSrc[(2*lLineBytes)*j+2*i+2]); if(MaxNum< fftSrc[(2*lLineBytes)*j+2*i+1]) MaxNum = fftSrc[(2*lLineBytes)*j+2*i+1]; } } //转换为图像 for(;;) { for(;;)
型。对已经退化了的图像加以重建和复原。但是实现图像复
原需要弄清楚图像退化的原因,建立相对应的数学模型,并
沿着图像质量降低的逆过程至原始图像进行复原。图 1 为简
单通用的图像退化模型,原始图像 f(x,y)是由于通过了一个
系统 H 和外来的加性噪声 n(x,y), 而使其退化为一幅图像
g(x,y)。表现为数学公式为
The Design and Implementation of image restoration Based on wiener filter WeiYang
(Sichuan University of Science& engineering,school of Computer Science,Zigong 643000) Abstract:The purpose of the image restoration of degraded image reconstruction from the original image, improve degradation image visual quality. Wiener filtering can well for image restoration. Keywords:wiener filtering、mage restoration、mage degradation model
【参考文献】 [1] 刘海波,沈晶 郭耸.Visual C++数字图像处理技术详解[M].
北京:机械工业出版社,2010. [2] MariaPerrou 赖剑煌译.数字图像处理疑难解析[M].北京:机
械工业出版社,2005. [3] 阮秋琦.实用数字图像处理[M].北京:电子工业出版社,
2001.
而且复原后的图像没有出现白色斑点,结果好于原图片,对 比结果如图 a、b 所示。
a 加噪的图像
b 维纳滤波复原后的图像
3 结论
在对图像缺乏足够的先验知识时,可以利用已有的知识 和经验对模糊或噪声等退化过程做数学建模进行图像恢复。 维纳滤波是假设图像信号可以近似看成平稳随即过程的前提 下,按照使输入图像和恢复图像之间的均方误差达到最小的 准则函数来实现图像恢复的方法。
{ lpSrc=(char *)lpDIBBits + lLineButes * j + i;
* lpSrc =(unsigned char )(fftSrc [(2*lLineBytes)*j+2*i+1]*255.0/ MaxNum);
}}} 上述代码实现了维纳滤波对图像的复原功能,对此进行 了测试。维纳滤波方法能够有效地提高模糊图像的清晰度,