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

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

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

原理

  假设原始图像为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

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




相关文章
|
机器学习/深度学习 人工智能 分布式计算
因果推断:效应估计的常用方法及工具变量讨论
日常工作中很多的策略/产品的效果是无法设计完美的随机实验的,要求我们从观察性数据中去(拟合随机试验)发现因果关系、测算因果效应。
1912 0
|
机器学习/深度学习 决策智能
双边滤波方法原理与代码实践(附完整代码)
双边滤波方法原理与代码实践(附完整代码)
687 0
双层优化入门(1)—基本原理与求解方法(附matlab代码)
双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。
|
机器学习/深度学习 算法 数据挖掘
logistic模型原理与推导过程分析(1)
给定一些数据集合,他们分别属于两个不同的类别。例如对于广告数据来说,是典型的二分类问题,一般将被点击的数据称为正样本,没被点击的数据称为负样本。现在我们要找到一个线性分类器,将这些数据分为两类。用X表示样本数据,Y表示样本类别(例如1与-1,或者1与0)。我们线性分类器的目的,就是找到一个超平面将两类样本分开。
453 0
logistic模型原理与推导过程分析(3)
由上面的式子可以看出,g(A)的参数是一个m*1的矩阵,或者说是一个列向量。如果我们设计函数g的时候,支持传入一个列向量,并返回一个列向量,则hθ(x)−y可以一次计算得到结果。
132 0
|
机器学习/深度学习 算法 大数据
logistic模型原理与推导过程分析(2)
其中m表示样本个数,n表示影响因数的个数,yi(i=0,1,⋯ ,m)取0或者1。现在我们结合数据,利用条件概率分布模型给出基于概率的二项logistic模型如下
213 0
|
机器学习/深度学习 算法 BI
|
机器学习/深度学习 算法
|
机器学习/深度学习 算法
BP神经网络(算法整体思路及原理+手写公式推导)
BP神经网络(算法整体思路及原理+手写公式推导)
278 0
BP神经网络(算法整体思路及原理+手写公式推导)
|
机器学习/深度学习 算法 前端开发
通俗解释随机森林算法
通俗解释随机森林算法
396 0
通俗解释随机森林算法