最大熵图像复原方法原理(附完整代码)

简介: 最大熵图像复原方法原理(附完整代码)

 对图像复原问题加以最大熵约束的归整化恢复方法称为图像的最大熵恢复,它是一种非线性的方法,在图像恢复领域中有着重要的影响。最大熵方法要求恢复的图像在满足成像公式的前提下熵最大。也即在图像恢复问题的所有可行解中,选择熵最大的那一个作为最终的解。

原理

  假设原始图像为x xx降质图像为y yy,成像系统的点扩展函数(PSF)为h hh,则降质过程可表示为:

image.png


其中n nn为系统的加性噪声。再记图像的熵S ( x ) S(x)S(x),那么最大熵图像恢复问题的一般描述如下公式所示:

image.png

  设整个观测图像y yy有个M MM像元,目标图像x xx有个N NN像元,且:


image.png

  这里不将噪声考虑在内。最大熵方法要求在满足上述两个公式两项约束的前提下使得图像的熵最大。运用Lagrange乘子法可以解得:

image.png

上面刚说的这个公式为配分函数,结合上述可以得到:


image.png

将求得的x i 回代到约束方程中得到M + 1个关于Lagrange乘子image.png 的方程。为避免这个非线性方程组的直接求解。引入势函数:


image.png

image.png

代码

  为了验证算法的有效性,本文先用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

公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!




相关文章
|
4月前
|
机器学习/深度学习 人工智能 算法
模型无关的局部解释(LIME)技术原理解析及多领域应用实践
在当前数据驱动的商业环境中,人工智能(AI)和机器学习(ML)已成为各行业决策的关键工具,但随之而来的是“黑盒”问题:模型内部机制难以理解,引发信任缺失、监管合规难题及伦理考量。LIME(局部可解释模型无关解释)应运而生,通过解析复杂模型的个别预测,提供清晰、可解释的结果。LIME由华盛顿大学的研究者于2016年提出,旨在解决AI模型的透明度问题。它具有模型无关性、直观解释和局部保真度等优点,在金融、医疗等领域广泛应用。LIME不仅帮助企业提升决策透明度,还促进了模型优化和监管合规,是实现可解释AI的重要工具。
209 9
|
26天前
|
机器学习/深度学习 存储 Python
深入剖析SVM核心机制:铰链损失函数的原理与代码实现
铰链损失(Hinge Loss)是支持向量机(SVM)中核心的损失函数,广泛应用于机器学习模型训练。其数学形式为 \( L(y, f(x)) = \max(0, 1 - y \cdot f(x)) \),其中 \( y \) 是真实标签,\( f(x) \) 是预测输出。铰链损失具有凸性、非光滑性和稀疏性等特性,能够最大化分类边际并产生稀疏的支持向量,提高模型泛化能力。它在正确分类、边际内分类和错误分类三种情况下有不同的损失值,适用于线性可分问题且对异常值不敏感。铰链损失通过严格的边际要求和连续梯度信息,提供了高效的优化目标,适合构建鲁棒的分类模型。
172 77
深入剖析SVM核心机制:铰链损失函数的原理与代码实现
|
8月前
|
编解码 开发工具 git
技术心得记录:小波变换(wavelettransform)的通俗解释(一)
技术心得记录:小波变换(wavelettransform)的通俗解释(一)
96 0
|
机器学习/深度学习 人工智能 分布式计算
因果推断:效应估计的常用方法及工具变量讨论
日常工作中很多的策略/产品的效果是无法设计完美的随机实验的,要求我们从观察性数据中去(拟合随机试验)发现因果关系、测算因果效应。
1997 0
|
机器学习/深度学习 决策智能
双边滤波方法原理与代码实践(附完整代码)
双边滤波方法原理与代码实践(附完整代码)
793 0
|
机器学习/深度学习 算法 BI
|
设计模式 算法 关系型数据库
关于本人对学习知识的方法的理解
关于本人对学习知识的方法的理解
90 1
|
机器学习/深度学习 算法
|
机器学习/深度学习 算法 前端开发
通俗解释随机森林算法
通俗解释随机森林算法
411 0
通俗解释随机森林算法
一百种学习方法
一百种学习方法
146 0

热门文章

最新文章