图像复原和重建技术

article/2025/3/3 4:44:44

1、常见的图像噪声模型

 图像复原是将图像退化的过程加以估计,并补偿退化过程造成的失真,以便获得未经干扰退化的原始图像或原始图像的最优估值,从而改善图像质量的一种方法。
 典型的图像复原方法是根据图像退化的先验知识建立一个退化模型,以此模型为基础,采用滤波等手段进行处理,使得复原后的图像符合一定的准则,达到改善图像质量的目的。

 图像复原
沿着质量降低的逆过程来重现真实的原始图像。通过去模糊函数而去除图像模糊。
 特点
图像增强:实际上是一种对比度拉伸,评价的标准是观察者主观感受;
图像复原:则是通过定量的去模糊函数而去除图像的模糊成分。


 图像噪声
图像获取过程:图像获取的环境条件和传感器质量。
图像传输过程:传输信道受到干扰。
 示例
成像系统镜头聚焦不准产生的散焦; 
相机与景物之间的相对运动; 
成像系统存在的各种非线性因素以及系统本身的性能;
射线辐射大气湍流等因素造成的照片畸变;
成像系统的像差、畸变、有限带宽等; 
底片感光图像显示时会造成记录显示失真; 
成像系统中存在的各种随机噪声 ;

 图像噪声(Probability density function简称PDF)

高斯噪声:

瑞利噪声:

伽马噪声:

指数分布噪声:

均匀分布噪声:

脉冲噪声(椒盐噪声):


2、空间滤波图像复原

clc; clear all; close all;
% 加载图像
I = imread('cameraman.tif');
% 椒盐噪声
J = imnoise(I, 'salt & pepper');
J = double(J);
figure;
subplot(1, 2, 1); imshow(I, []); title('原始图像');
subplot(1, 2, 2); imshow(J, []); title('椒盐噪声的图像');
S1 = medfilt2(J);

figure;
subplot(1, 3, 1); imshow(I, []); title('原始图像');
subplot(1, 3, 2); imshow(J, []); title('椒盐噪声图像');
subplot(1, 3, 3); imshow(S1, []); title('中值滤波');

% 最大值滤波
S2 = ordfilt2(J, 25, true(5));
figure;
subplot(1, 3, 1); imshow(I, []); title('原始图像');
subplot(1, 3, 2); imshow(J, []); title('椒盐噪声图像');
subplot(1, 3, 3); imshow(S2, []); title('最大值滤波');

S3 = ordfilt2(J, 1, true(5));
figure;
subplot(1, 3, 1); imshow(I, []); title('原始图像');
subplot(1, 3, 2); imshow(J, []); title('椒盐噪声图像');
subplot(1, 3, 3); imshow(S3, []); title('最小值滤波');

S4 = ordfilt2(J, 5, true(3));
figure;
subplot(1, 3, 1); imshow(I, []); title('原始图像');
subplot(1, 3, 2); imshow(J, []); title('椒盐噪声图像');
subplot(1, 3, 3); imshow(S4, []); title('中值滤波');


3、频域滤波图像复原

clc; close all; clear all;
% 加载图像
I = imread('origin.jpg');
if ndims(I) == 3
    I = rgb2gray(I);
end
% 三次高斯带阻滤波器
J1 = GsFilter(I, 60, 30);
J2 = GsFilter(J1, 103, 30);
J3 = GsFilter(J2, 150, 20);
figure;
subplot(1,2,1); imshow(I, []); title('滤波前');
subplot(1,2,2); imshow(J3, []); title('滤波后');


4、逆滤波图像复原



5、维纳滤波(最小均方误差滤波)图像复原

●寻找到一个真实图像的估计值,使它们之间的均方误差最小。

clc; close all; clear all;
% 加载图像
I = im2double(imread('cameraman.tif'));
figure; imshow(I); title('原始图像');
% 运动模糊滤波器
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
figure; imshow(blurred); title('退化图像');
% 高斯噪声
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
    noise_mean, noise_var);
figure; imshow(blurred_noisy); title('退化+噪声图像');
% 逆滤波
estimated_nsr = 0;
wnr2 = deconvwnr(blurred_noisy, PSF, estimated_nsr);figure; imshow(wnr2); title('直接逆滤波图像');
estimated_nsr = noise_var / var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, estimated_nsr);figure; imshow(wnr3); title('预估逆滤波图像');


6、约束的最小二乘滤波图像复原

在最小二乘复原处理中,常常需要附加某种约束条件。例如令Q为f的线性算子,那么最小二乘方复原的问题可以看成使形式为

最小化问题,这种有附加条件的极值问题可以用拉格朗日乘数法来处理。寻找一个  ,使下述准则函数为最小:                                                                                    

clc; clear all; close all;
I = checkerboard(8);
PSF = fspecial('gaussian',7,10);
V = .01;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);
NOISEPOWER = V*numel(I);
[J, LAGRA] = deconvreg(BlurredNoisy,PSF,NOISEPOWER);
subplot(221); imshow(BlurredNoisy);title('模糊及加噪图像');
subplot(222); imshow(J);title('直接处理');
subplot(223); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA/10));title('加入0.1*LAGRA');
subplot(224); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA*10));title('加入10*LAGRA');


7、Lucy-Richardson图像复原

       L-R算法是一种迭代非线性复原算法,它是从最大似然公式引出来的,图像用泊松分布加以模型化的。当下面这个迭代收敛时模型的最大似然
      函数就可以得到一个令人满意的方程:


clc; clear all; close all;
I = checkerboard(8);
PSF = fspecial('gaussian',7,10);
V = .0001;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);
WT = zeros(size(I));
WT(5:end-4,5:end-4) = 1;
J1 = deconvlucy(BlurredNoisy,PSF);
J2 = deconvlucy(BlurredNoisy,PSF,20,sqrt(V));
J3 = deconvlucy(BlurredNoisy,PSF,20,sqrt(V),WT);
subplot(221);imshow(BlurredNoisy);title('模糊及加噪图像');
subplot(222);imshow(J1);title('直接处理');
subplot(223);imshow(J2);title('加入NI,DP');
subplot(224);imshow(J3);title('加入NI,DP,WT');


8、案例演示:盲卷积图像复原

       最后,让我们演示基于盲卷积图像复原的编程实战。在图像复原过程中,最困难的问题之一是,如何获得PSF的恰当估计。那些
不以PSF为基础的图像复原方法统称为盲区卷积。
      它以MLE为基础的,即一种用被随机噪声所干扰的量进行估计的最优化策略。工具箱通过函数deconvblind来执行盲区卷积。

clc; clear all; close all;
I = checkerboard(8);
PSF = fspecial('gaussian',7,10);
V = .0001;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);
WT = zeros(size(I));
WT(5:end-4,5:end-4) = 1;
INITPSF = ones(size(PSF));
[J P] = deconvblind(BlurredNoisy,INITPSF,20,10*sqrt(V),WT);
subplot(221);imshow(BlurredNoisy);title('模糊及加噪图像');
subplot(222);imshow(PSF,[]);title('实际的PSF');
subplot(223);imshow(J);title('复原图像');
subplot(224);imshow(P,[]);title('重构的PSF');



http://chatgpt.dhexx.cn/article/YcjkQxRk.shtml

相关文章

数字图像处理——第五章 图像复原与重建

数字图像处理——第五章 图像复原与重建 文章目录 数字图像处理——第五章 图像复原与重建写在前面1 图像退化/复原过程的模型2 噪声模型2.1 高斯噪声2.2 椒盐噪声 3 仅有噪声的复原——空间滤波3.1 均值滤波器3.2 统计排序滤波器3.3 自适应滤波器 4 用频率域滤波消除周期噪声5…

机器人群控避障算法ORCA

最优互补避碰ORCA算法 建议参考资料 ORCA-有关机器人群碰撞避免算法解读(柳朦朦) 导航动态避让算法RVO的优化ORCA(Optimal Reciprocal Collision Avoidance)-漫漫之间n Reciprocal n-body Collision Avoidance英文PDF 避障算法-VO、RVO 以及 ORCA&a…

限流算法的原理

计数器算法 在一定时间内,对处理的请求数进行计数,每次到达时间临界点则计数器清零。在一定时间间隔内,若计数器数字超限,则进行限流。 该算法的问题是,在两端临界点附加可能出现两倍的流速。 滑动窗口算法 基于计…

A*算法图解

A*(A-star)算法是一种静态网路中求解最短路径最有效的直接搜索算法。在电子游戏中最主要的应用是寻找地图上两点间的最佳路线。在机器人领域中,A*算法常用于移动机器人路径规划。 为了便于理解,本文将以正方形网格地图为例进行讲解…

a 算法原理 java_最短路径A*算法原理及java代码实现(看不懂是我的失败)

算法只要懂原理了,代码都是小问题,先看下面理论,尤其是红色标注的(要源码请留下邮箱,有测试用例,直接运行即可)A*算法百度上的解释:A*[1](A-Star)算法是 算法只要懂原理了,代码都是小问题&#…

A*算法原理简析

引言 。 A算法是一种启发式的搜索算法,它是基于深度优先算法和广度优先算法的一种融合算法,按照一定规则确定如何选取下一个节点。在介绍A算法之前,需要了解一下什么是启发式搜索算法,深度优先算法以及广度优先算法。 启发式搜…

A*算法原理

A* 算法 概述 虽然掌握了 A* 算法的人认为它容易,但是对于初学者来说, A* 算法还是很复杂的。 搜索区域(The Search Area) 我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图 1 ,绿色是 A ,红色是 B…

A Star算法原理及其实现

A -Star算法 A*(A-Star)算法是一种求解最短路径最有效的直接搜索方法,也是许多其他问题的常用启发式算法。 一、简介 二、寻路方式 三、运行机制 四、常用估价算法 五、示例 一、简介 A*(A-Star)算法是一种求解最短路径最有…

sift算法原理,按步骤记录

sitf算法是一种描述图像特征的,重要的,基础的方法。主要由以下几个步骤构成: 0.尺度空间理论 尺度空间理论认为,人眼在认知画面时,在不同的尺度上使用的是不同特征,例如观察树叶时使用的是小尺度特征&…

DQN算法流程及原理

相关名词解释: Agent:智能体;s—state:状态(放在格子游戏中,就是智能体的位置坐标(x,y))a—action:智能体采取的动作(例如上下左右)r—reward:奖励&#xff…

D*算法原理与程序详解(Python)

提示:前文写了D搜索算法,是一种贪心算法。 文章目录 一、D*算法是什么?二、原理以及代码步骤1.原理分析2.代码解释 总结 一、D*算法是什么? D*算法也是用于机器人路径规划问题的启发式方法,它是一种局部规划方法&…

unityA星寻路算法基础原理

作者: 风不停息丶 文章目录 🧑‍💻A星寻路简介👉代码基础架构👍代码实现格子类寻路管理类效果 结尾总结 🧑‍💻A星寻路简介 A*寻路就是用来计算玩家行进路径的,通过它可以计算出避开…

【YOLO系列】YOLO.v1算法原理详解

YOLO(You Only Look Once)系列算法原理 前言 :详细介绍了yolo系列目标检测算法的原理和发展过程。 系列: 【YOLO系列】YOLO.v1算法原理详解 【YOLO系列】YOLO.v2算法原理详解 【YOLO系列】YOLO.v3算法原理详解 【YOLO系列】YOLO.v4 & YOLO.v5算法原…

A*算法原理与实现

前言 A*算法最初发表于1968年,由Stanford研究院的Peter Hart, Nils Nilsson以及Bertram Raphael发表。它可以被认为是Dijkstra算法的扩展。 由于借助启发函数的引导,A*算法通常拥有更好的性能。 一、 A*吸取了Dijkstra 算法中的cost_so_far,为…

激光SLAM之NDT算法(1)算法原理

/在激光SLAM之NDT算法(2)-建图中我会给出实测可用的建图代码,并予以解释代码结构,这里就先讲讲原理吧!!!/ 无人车激光SLAM系统简单可以分为建图和定位两部分,无人车的定位问题,实际上就是要找出无人车当前在地图的那个位置&#x…

A*算法的原理及应用

A*算法的原理 A* 算法是一种高效的启发式搜索算法,在二维的栅格地图上寻路效果好,它通过估算节点的代价评估函数值并作为节点的综合优先级,当选择下一个需要遍历的节点时,再选取综合优先级最高的节点,逐步地找到最优路…

Bresenham 画圆算法原理

文章目录 前言Bresenham 画圆算法原理两个近似构造判别式圆与网格点的关系关系由来关系含义p i p_i pi​ 递推画圆程序伪码圆与网格点的关系图示前言 首先简要介绍一下生成圆的方法: 直接利用圆的方程生成圆利用圆的对称性生成圆方法一由于会涉及到浮点运算等因素,不采取该方…

Js中读取、移除属性及隐藏组件方法研究

添加、移除组件属性方法: $(".class名").attr("属性名","属性值");//设置指定属性 $(".class名").attr("属性名");//读取指定属性值 or document.getElementById("id值").getAttribute("属性名…

js获取属性值,自定义属性,修改移除属性值

补充&#xff1a;由于不清楚一些属性是内置属性还是自定义属性 所以h5规定 自定义属性使用date-开头作为属性并赋值 案例1: <body><div date-index"1"></div> </body> <script>var div document.querySelector(div);console.log(div…

获取/移除属性值

1.获取属性值&#xff1a; element.属性 获取属性值 element.getAttribute&#xff08;‘属性’&#xff09;&#xff1b; 2.区别&#xff1a; element.属性 获取内置属性值&#xff08;元素本身自带的属性&#xff09; element.getAttribute&#xff08;‘属性’&#xff09;&…