改进维纳滤波的实现——光学稀疏孔径成像系统图像恢复算法研究 陈灏

article/2025/4/21 12:59:43

        本文简单实现了浙江大学陈灏硕士学位论文《光学稀疏孔径成像系统图像恢复算法研究》(2017)中4.2章节提及的改进维纳滤波算法。

        前情提要:维纳滤波函数中不同K(噪声与原属图像功率谱之比)的取值对应复原效果不同,当K值比较小时(10^-4~10^-3)时,图像边缘存在着严重的振铃效应,而随着K的慢慢增大,振铃效应越来越弱直至消失,最后图像变得越来越模糊。所以作者提出了一中基于PSNR的图像质量评价体系的改进的维纳滤波算法,目的是选取最优的K值,使得用该K做维纳滤波得到的复原后的图像与原始图像最为接近(PSNR值最大)。

        原文在正文第36页:

 

        但原文似乎没有对此方法的详细介绍,所以姑且用一个简单的方法考虑:每次K按一定方式,从10^-5~到10^3量级增加,判断以当前K值进行维纳滤波得到的复原图像与原始图像的差异度(即PSNR)是否比历史最优值更好,类似于遍历找最大值的策略,但量级跳度过大,如果按照 10^-5~到10^3量级的原则来的话,需要进行10^8次计算,这无疑增加了计算量。根据观察,可以根据原文中K值与PSNR值曲线来进行K的跳度限制:最开始随着K值的增加,PSNR迅速增大到最大值后开始越来越平稳地减小,相对应可设置最开始阶段K值的增加(步长)为10^-5级,之后根据K值来对步长进行扩增,如10倍等。当然精度可以根据需求或者个人喜好等随意修改,在代码中,初始化K为0,步长step为1*10^-5(matlab中可以简单表示为1e-5),当K值增加到是步长的100倍时,步长相应地增加到原来的10倍,直至K大于1000,停止循环。

      matlab中,可直接使用函数deconvwnr进行维纳滤波操作。为方便起见,将同系函数的使用方法进行总结:

调用方式方法名参数解释

J = deconvwnr(I,psf)

J = deconvwnr(I,psf,nsr)

J = deconvwnr(I,psf,ncorr,icorr)

维纳滤波

psf:点扩展函数(卷积核)

nsr:加性噪声的噪信比(K)

ncorr:噪声自相关函数

icorr:I的自相关函数

J = deconvlucy(I,psf)

J = deconvlucy(I,psf,iter)

J = deconvlucy(I,psf,iter,dampar)

J = deconvlucy(I,psf,iter,dampar,weight)

J = deconvlucy(I,psf,iter,dampar,weight,readout)

J = deconvlucy(I,psf,iter,dampar,weight,readout,subsample)

Lucy-Richardson滤波

iter:迭代次数

dampar:阻尼阈值 

weight:权重矩阵

readout:读出相机噪声

subsample:子采样倍数

[J,psfr] = deconvblind(I,psfi)

[J,psfr] = deconvblind(I,psfi,iter)

[J,psfr] = deconvblind(I,psfi,iter,dampar)

[J,psfr] = deconvblind(I,psfi,iter,dampar,weight)

[J,psfr] = deconvblind(I,psfi,iter,dampar,weight,readout)

[J,psfr] = deconvblind(___,fun)

盲去卷积

psfi:点扩展函数的初始估计

psfr:复原后的点扩展函数

fun:描述点扩展函数附加约束的函数句柄

J = deconvreg(I,psf)

J = deconvreg(I,psf,np)

J = deconvreg(I,psf,np,lrange)

J = deconvreg(I,psf,np,lrange,regop)

[J,lagra] = deconvreg(___)

最小二乘滤波

np:加性噪声强度

lrange:搜索最优解范围

regop:正则算子

lagra:拉格朗日乘子

        psf相当于卷积核,由文件读取,也可以通过其他方式设置。psnr可以直接调用matlab函数,亦可以手动实现。data为n*4维矩阵,每一行存储了每次计算对应的次数、K值、步长和PSNR值。

        代码和注释如下,相应条件可自行调整:

clc
clear
close all
f=rgb2gray(imread('timg.jpg'));
[m,n]=size(f);
Psf=load('psfdata.txt');
%   C=uint8(conv2(f,Psf,'same')); %另一种卷积方式
C = imfilter(f,Psf,'conv','circular'); %卷积得到模糊图像
K=0;
step=1e-5; %步长 
Img=[];%最大PSNR对应的图像
best_PNSR=-Inf;%最大值
best_K=-Inf;%最大值对应的K
t=1;%计算次数
while K<=1000img=deconvwnr(C,Psf,K);%维纳滤波new_PSNR=psnr(img,f);%计算滤波复原后的图像与原图的PSNR值data(t,1:4)=[t,K,step,new_PSNR];%储存次数、K值、步长、PSNR值if new_PSNR>best_PNSR%最大PSNR对应的更新best_PNSR=new_PSNR;best_K=K;Img=img;endif K/step>100%步长的更新step=step*10;endK=K+step;%K值的更新t=t+1;
end
%对K值和PSNR值进行绘制,由于图像前后差距过大,只取前120行
x=data(1:120,2);
y=data(1:120,4);
plot(x,y)
xlabel('K值')
ylabel('PSNR')
figure,
subplot(131),imshow(f),title('原始图像')
subplot(132),imshow(C),title('模糊图像')
subplot(133),imshow(Img),title('复原图像')

执行结果如下: 

模糊图像PSNR:  19.9984

复原图像PSNR:  27.3320

psf文件见https://github.com/typeisgod/CSDN


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

相关文章

冈萨雷斯DIP第4章知识点

文章目录 4.1 背景4.3 取样和取样函数的傅里叶变换4.5 二变量函数的傅里叶变换4.6 二维 DFT 和 IDFT 的一些性质4.6.6 二维离散卷积定理 4.7 频率域滤波基础4.7.3 频率域滤波步骤小结4.7.4 空间域和频率域滤波之间的对应关系 4.8 使用低通频率域滤波器平滑图像4.9 使用高通滤波…

频域图像增强(图像的频域分析)高通低通滤波器

1. 频率域平滑&#xff08;低通&#xff09; 图像的平滑除了在空间域中进行外&#xff0c;也可以在频率域中进行。 由于噪声主要集中在高频部分&#xff0c;为去除噪声改善图像质量&#xff0c;滤波器采用低通滤波器​​​​​​​ 来抑制高频成分&#xff0c;通过低频成分&a…

9.频率域锐化滤波

目录 一 理想高通滤波器 定义 二 巴特沃斯高通滤波器[BLPF] 定义 三 高斯高通滤波器[GLPF] 四 振铃效应对比 五 示例 六 区别和联系 数字图像处理的配套视频教程&#xff1a; 1.【冈萨雷斯-数字图像处理】开始安排续数字图像处理的教程_哔哩哔哩_bilibili 2. 数字图像…

【示波器专题】示波器探头的负载效应

理想的示波器探头可以轻松、精确的复制被探测信号。然而在现实的情况下,探头成为了电路的一部分。如在星球文章:【示波器专题】示波器探头的原理深入——无源探头 中我们讲到一个例子,低阻无源探头的最大好处就是以较低的价格提供了比较高的测试带宽。但缺点就是输入阻抗低(…

编码压缩带来的几种效应和原因

吉布斯效应 先来简要回顾一下吉布斯效应。 对于Gibbs现象&#xff0c;百度百科解释为&#xff1a;吉布斯现象&#xff08;又叫吉布斯效应&#xff09;&#xff1a;将具有不连续点的周期函数&#xff08;如矩形脉冲)进行傅立叶级数展开后&#xff0c;选取有限项进行合成。当选…

21.失真/低高通/振铃效应/旁瓣泄漏效应/频域滤波/图像深度/频带/线性滤波源码分析 -- OpenCV从零开始到图像(人脸 + 物体)识别系列

本文作者&#xff1a;小嗷 微信公众号&#xff1a;aoxiaoji 吹比QQ群&#xff1a;736854977 简书链接&#xff1a;https://www.jianshu.com/u/45da1fbce7d0 本文你会找到以下问题的答案: 失真/低高通/振铃效应和旁瓣泄漏效应/图片深度/频带/图像细节/线性滤波源码分析 失…

几种常用的假设图像边界条件用于抑制振铃效应及实现(下)

三 其他BC 1.Repeated BC Xu Zhou等人在《A boundary condition based deconvolution framework for image deblurring》提及&#xff0c;由于原文写的公式比较复杂不好理解&#xff0c;所以就不赘述了&#xff0c;其实核心就是外部边界区域内的某个像素点的灰度等于距离其最近…

振铃效应与样点自适应补偿(Sample Adaptive Offset,SAO)技术

SAO&#xff08;Sample Adaptive Offset&#xff0c;自适应样点补偿&#xff09;原理分析 这里写目录标题 SAO&#xff08;Sample Adaptive Offset&#xff0c;自适应样点补偿&#xff09;原理分析1. H265压缩原理2. SAO的作用3. SAO原理简介4. SAO的分类--BO5. SAO的分类--EO6…

几种常用的假设图像边界条件用于抑制振铃效应及实现(上)

一 介绍 传统的图像复原方法可能会给复原图像引入振铃效应&#xff0c;并且以边界振铃为主&#xff1b;产生这种现象的原因简单地来讲主要是由于模糊核的 不精确或者信息丢失。 [图片来自论文《光学合成孔径系统成像性能优化与分析》P79 魏小峰] Renting liu、Jiaya J…

rpm包的卸载

两个步骤&#xff1a; 1、查询 即查询Linux中安装的完整包名 命令【rpm -qa | grep xxx】 例如&#xff1a;rpm -qa | grep unzip 2、卸载 命令&#xff1a;rpm -e RPM包的完整名称 例如&#xff1a;rpm -e unzip-6.0-19.el7.x86_64 卸载之后检查发现已经不存在 - - -…

linux卸载命令6,小编为你叙述linux卸载命令【操作流程】

大家应该都知道我们在使用电脑的时候&#xff0c;会发现linux卸载命令【操作流程】的问题&#xff0c;如今还有很多用户不知道如何处理linux卸载命令【操作流程】的情况&#xff0c;于是我就给大家整理总结了linux卸载命令【操作流程】的具体处理方案&#xff0c;就是按照1&…

Linux常见命令 25 - RPM包安装、升级、卸载、查询、校验、提取

目录 1. 包名与包全名 2. RPM安装 3. RPM包升级 4. RPM包卸载 5. 查询是否安装RPM包 6. RPM包校验 7. RPM包中文件提取 1. 包名与包全名 包全名&#xff1a;操作的包是没有安装的软件包时&#xff0c;使用包全名&#xff0c;而且要注意路径包名&#xff1a;操作已经安…

linuxrpm命令卸载python_Linux RPM包安装、卸载、升级命令讲解

一个 RPM 包包含了已压缩的软件文件集以及该软件的内容信息&#xff0c;通常表现为以 .rpm 扩展名结尾的文件&#xff0c;例如 samba.rpm 。如果需要对RPM包进行操作则需要使用rpm命令。 一、RPM包的来源 所有RPM包都在系统光盘的Packages目录中&#xff0c;那么我们如何获取包…

rpm卸载包的命令

可以先用rpm -q xxx 或者 rpm -qf xxx/bin/xxxx.xx 来查询一下所属的rpm包的名字。然后用rpm -e xxxxxx 来删之。xxx/bin/xxxx.xx 是一个包中任意的文件xxxxxx 是查询得到的rpm包的名称 rpm -e的时候后面的文件名不用加版本号 安全地卸载 RPM卸载软件包,并不是简单地将原来安…

linux的rpm卸载,linux rpm卸载参数

linux rpm卸载参数 本站整理 发布时间:2009-03-10 15:38:48 作者:jb51.net 我要评论 rpm卸载参数--test : 卸载测试 --nodeps : 不检查依赖 --noscripts : 不执行脚本程序 --notriggers : 不执行触发程序 --justdb : 仅修改数据库 --force 强制 RPM卸载软件包,并不是…

rpm卸载命令

可以先用rpm -q xxx 或者 rpm -qf xxx/bin/xxxx.xx 来查询一下所属的rpm包的名字。 然后用rpm -e xxxxxx 来删之。 xxx/bin/xxxx.xx 是一个包中任意的文件 xxxxxx 是查询得到的rpm包的名称 rpm -e的时候后面的文件名不用加版本号 安全地卸载 RPM卸载软件包,并不是简单…

关于传递函数的双边线性Z变换+差分方程

下午查了一下午资料&#xff0c;翻看了一些书籍&#xff0c;看了一些视频学习&#xff01;&#xff01;&#xff01;抛开这些&#xff0c;进入整体。 双边线性Z变换&#xff1a; 将S域虚轴和实轴改为Z域单位圆&#xff0c;由连续变为离散。 线性公式&#xff1a;&#xff08;如…

基于深度学习的视频预测研究综述

原址&#xff1a;http://html.rhhz.net/tis/html/201707032.htm &#xff08;收集材料ing&#xff0c;为论文做准备)[综述性文章&#xff0c;&#xff0c;&#xff0c;可以做背景资料] 莫凌飞, 蒋红亮, 李煊鹏 摘要&#xff1a;近年来&#xff0c;深度学习算法在众多有监…

【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质示例 | PCM 音频信号处理 | 使用 matlab 进行频移操作 )

文章目录 一、PCM 音频信号处理二、要点说明 一、PCM 音频信号处理 给定一段 PCM 音频数据 , 封装到 .WAV 文件 中 , 此时的信号 是 实信号 , 每个 PCM 音频采样都是一个 实数值 , 绘制该 音频数据 实信号 的 " 幅频特性 " , 将该 PCM 音频的 频率 移动 6 k H z 6…

Three.js视频教程

Threejs引擎 Threejs是WebGL多款3D引擎之一&#xff0c;threejs相比较babylonjs、cesiumjs等引擎在国内使用的更广泛&#xff0c;中文资料更多&#xff0c;相关招聘更多。所以对于WebGL工程师来说&#xff0c;学习threejs是很有必要的。 视频教程发布地址 案例欣赏 下面一些…