对图像复原问题加以最大熵约束的归整化恢复方法称为图像的最大熵恢复,它是一种非线性的方法,在图像恢复领域中有着重要的影响。最大熵方法要求恢复的图像在满足成像公式的前提下熵最大。也即在图像恢复问题的所有可行解中,选择熵最大的那一个作为最终的解。
原理
假设原始图像为x xx降质图像为y yy,成像系统的点扩展函数(PSF)为h hh,则降质过程可表示为:
其中n nn为系统的加性噪声。再记图像的熵S ( x ) S(x)S(x),那么最大熵图像恢复问题的一般描述如下公式所示:
设整个观测图像y yy有个M MM像元,目标图像x xx有个N NN像元,且:
这里不将噪声考虑在内。最大熵方法要求在满足上述两个公式两项约束的前提下使得图像的熵最大。运用Lagrange乘子法可以解得:
上面刚说的这个公式为配分函数,结合上述可以得到:
将求得的x i 回代到约束方程中得到M + 1个关于Lagrange乘子 的方程。为避免这个非线性方程组的直接求解。引入势函数:
代码
为了验证算法的有效性,本文先用Circuit_original.tif自己构造一个简单的运动模糊图像,对其进行最大熵复原。MatLab代码如下:
clear; clear all; im=imread('Circuit_original.tif');%读入原始图像 %figure,imshow(im);title('original');%显示原始图像 LEN=5; THETA=10; PSF=fspecial('motion',LEN,THETA); %点扩展函数,假设的真实的PSF blurred_image=imfilter(im,PSF,'circular','conv'); %卷积生成模糊图像,h1为对应的点扩展函数,对任意类型数组或多维图像进行滤波。 blurred_image=im2double(blurred_image); mask=ones(size(blurred_image));%掩模图像支持 n=200; %迭代次数 lambda=zeros(size(blurred_image));%lambda参数初始化为0,此时熵最大,但不满足约束方程 blurred_image=blurred_image+mean2(blurred_image)/1000;%保证大于0 totd=sum(sum(blurred_image)); for i=1:n deblurred=exp(conv2(lambda,PSF,'same'));%卷积和指数运算 deblurred=deblurred/sum(sum(deblurred));%归一化 reblurred=conv2(deblurred,PSF,'same');%重模糊化图像 scale=sum(sum(reblurred.*mask))/totd;%动态归一化因子 %修正lambda的值 if i<100 lambda=lambda+(blurred_image*scale-reblurred).*mask;%前面50次迭代选择(g-h*reblured)作为修正项 else reblurred=0.00001*(reblurred==0)+reblurred; lambda=lambda+log(blurred_image*scale./reblurred).*mask;%后面选择ln(g)-ln(h*reblured)作为修正项 end end deblurred_image=deblurred/scale-mean2(blurred_image)/1000;%减去前面的增量 subplot(1,2,1);imshow(blurred_image,[]);title('motion blurred image'); %显示运动模糊化图像 subplot(1,2,2);imshow(deblurred_image,[]);title('max extropy deblurred image');%显示去模糊化后的恢复图像
实验结果
从上图可以看出,运动模糊后的图像,经过最大熵算法处理之后,效果改进明显。验证了代码的有效性。
完整实验代码,公众号后台回复:数字图像作业一。
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!