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

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

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

原理

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

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




相关文章
|
关系型数据库 MySQL Linux
Centos7 环境使用 Docker 安装 Mysql 服务详解
Centos7 环境使用 Docker 安装 Mysql 服务详解
2120 0
Centos7 环境使用 Docker 安装 Mysql 服务详解
|
Ubuntu Windows
Qt开发笔记之编码h264码流并封装mp4(六):ubuntu平台编译mp4v2并封装mp4
Qt开发笔记之编码h264码流并封装mp4(六):ubuntu平台编译mp4v2并封装mp4
Qt开发笔记之编码h264码流并封装mp4(六):ubuntu平台编译mp4v2并封装mp4
|
6月前
|
机器学习/深度学习 PyTorch API
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
本文深入探讨神经网络模型量化技术,重点讲解训练后量化(PTQ)与量化感知训练(QAT)两种主流方法。PTQ通过校准数据集确定量化参数,快速实现模型压缩,但精度损失较大;QAT在训练中引入伪量化操作,使模型适应低精度环境,显著提升量化后性能。文章结合PyTorch实现细节,介绍Eager模式、FX图模式及PyTorch 2导出量化等工具,并分享大语言模型Int4/Int8混合精度实践。最后总结量化最佳策略,包括逐通道量化、混合精度设置及目标硬件适配,助力高效部署深度学习模型。
989 21
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
|
9月前
|
机器学习/深度学习 XML 人工智能
我是如何基于 DeepSeek-R1 构建出高效学习Agent的?
我是如何基于 DeepSeek-R1 构建出高效学习Agent的?
|
机器学习/深度学习 数据可视化
【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具
【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】自然语言处理(NLP)的突破,关注NLP在机器翻译、情感分析、聊天机器人等方面的最新研究成果和应用案例。
自然语言处理(NLP)作为人工智能的一个重要分支,近年来取得了显著的突破,特别在机器翻译、情感分析、聊天机器人等领域取得了显著的研究成果和广泛的应用。以下是对这些领域最新研究成果和应用案例的概述,并附带相应的代码实例。
996 1
|
存储 C语言
数据结构基础详解(C语言): 树与二叉树的应用_哈夫曼树与哈夫曼曼编码_并查集_二叉排序树_平衡二叉树
本文详细介绍了树与二叉树的应用,涵盖哈夫曼树与哈夫曼编码、并查集以及二叉排序树等内容。首先讲解了哈夫曼树的构造方法及其在数据压缩中的应用;接着介绍了并查集的基本概念、存储结构及优化方法;随后探讨了二叉排序树的定义、查找、插入和删除操作;最后阐述了平衡二叉树的概念及其在保证树平衡状态下的插入和删除操作。通过本文,读者可以全面了解树与二叉树在实际问题中的应用技巧和优化策略。
378 2
|
存储 Unix 编译器
【Linux】八、Linux进程信号详解(完结)
目录 三、阻塞信号 3.1 信号其他相关常见概念 3.2 信号在内核中的表示 3.3 sigset_t 3.4 信号集操作函数 3.5 sigprocmask函数 3.6 sigpending函数 3.7 信号集实验 四、深入理解捕捉信号 4.1 进程地址空间二次理解(内核空间与用户空间) 4.2 用户态和内核态 4.3 内核中信号的捕捉流程 4.4 sigaction函数 五、可重入函数 六、C语言关键字volatile 七、SIGCHLD信号
400 0
【Linux】八、Linux进程信号详解(完结)
|
TensorFlow 算法框架/工具 Python
【Tensorflow】解决Tensorboard: ValueError: Duplicate plugins for name projector
解决TensorBoard版本冲突的方法,即通过卸载冲突的TensorFlow相关包然后重新安装所需的版本。
514 1
|
Dragonfly 安全 数据安全/隐私保护
什么是WPA3?与WPA2有啥区别?
【4月更文挑战第14天】
11255 2
什么是WPA3?与WPA2有啥区别?