一 介绍

传统的图像复原方法可能会给复原图像引入振铃效应,并且以边界振铃为主;产生这种现象的原因简单地来讲主要是由于模糊核的 不精确或者信息丢失。

[图片来自论文《光学合成孔径系统成像性能优化与分析》P79 魏小峰]

Renting liu、Jiaya Jia在论文《REDUCING BOUNDARY ARTIFACTS IN IMAGE DECONVOLUTION》中对这种效应的原因进行了解释:

The convolution operator makes use of not only the image in the Field of View (FOV) of the given observation but also part of the scenery in the area bordering it.Hence, part of the information that is used to produce the filtered image boundary pixels is not available to the deconvolution process. Using the Fast Fourier Transform (FFT), the effect of missing boundary would propagate throughout the image and deteriorate the entire image. This problem is known as the boundary value problem, which poses a difficulty to various image restoration methods.

大意为在图像模糊的过程中,卷积算子(模糊核)不仅仅利用清晰图像FOV内的信息,也利用了外部边缘的信息。但是获取的图像只是FOV内的图像,FOV外界信息缺失,不能用于反卷积来复原图像,这种信息缺失在整个图像中传播导致了振铃效应。

同样,Xu Zhou等在《A boundary condition based deconvolution framework for image deblurring》也有类似的解释:

Since the outside information of FOV is unavailable, some assumptions on the outside values are needed to estimate x. These assumptions are called the boundary conditions.

Due to lack of boundary information that is used to produce the blurred image, in most cases, it is impossible to estimate an accurate solution from the observation data. The missing boundary values usually cause serious ringing artifacts around the boundary of restored image, and would propagate it throughout the entire image if image boundary is not well treated.

原文中x表示原始FOV内的图像。

假设清晰图像为M*N大小,卷积算子为(2m+1)*(2m+1)大小,在对图像第1~m行、M-m+1到M行、1~m列、N-m+1~N-m行的像素进行卷积的过程中,卷积算子的范围超出了图像的边界,而默认边界外是0,其实有时是不准确的,在观察得到的FOV外存在某些信息参与了模糊过程,因此本文探讨如何估计这些外部边界信息(也即假设边缘条件,或简称BC)来减少复原的振铃效应。如下图所示,黑框内为FOV,蓝色区域为图像临近边界区域,也就是卷积计算时有FOV外像素参与计算的区域,红框为卷积算子,灰色为当前卷积的像素,绿框到黑框范围时需要假设的外部边界信息。

目前,经典的假设边界条件有zero(Dirichlet)、periodic、reflective(Neumann、symmetric)、anti-reflective,这些BC对于传统非盲复原算法有很好的抑制效果,但对于新的复原算法就不太适用,后来学者相继提出了平滑边界方法[Reducing boundary artifacts in image deconvolution]、基于反卷积框架的边界条件[A boundary condition based deconvoluton framework for image deblurring]、渐进边界假设[基于稀疏正则化和渐近边界假设的运动模糊图像盲复原 ]等。

二 传统边界条件

以一维信号为例,模糊模型为:

g表示为模糊信号,f表示为输入的原始信号,h表示模糊核,v表示噪声。

设f长度为n,h长度为2m+1,则可以表示为:

f具有两个边界,即左边界fl和有边界fr:

最后带扩展边界的信号表示为:

假设边界条件就在于f已知,去假设fl和fr。

四种传统的边界扩充条件公式如下:

1.zero(Dirichlet)

显而易见,边界直接为0.

2.periodic

周期边界,相当于多个相同图像拼在一起,之后对某个图像按稍大图像尺寸的大小进行截取。

3.reflective

反射边界,相当于以图像边缘线为对称轴进行对称得到。

4.anti-reflective

抗反射边界。

四种传统BC的效果图:

 [图源《Antireflective boundary conditions for deblurring problems 》在IPCA2010的ppt]

在二维图像中,几种BC的效果按上述介绍的顺序展示如下:

代码如下:

x=rgb2gray(imread('tt.jpg'));
[N1,N2]=size(x);
% [M1,M2]=size(Psf);
M1=127;
M2=127;
m1=(M1-1)/2;
m2=(M1-1)/2;
%zero (DiricChlet) B
%that the signal outside the domain of the observed vector g is ZERO
xe0=zeros(N1+2*m1,N2+2*m2);
xe0(m1+1:m1+N1,m2+1:m2+N2)=x;%periodic boundary
xep=zeros(N1+2*m1,N2+2*m2);
xep(m1+1:m1+N1,m2+1:m2+N2)=x;
for i=1:m1xep(i,:)=xep(N1+i,:);xep(i+m1+N1,:)=xep(m1+i,:);
end
for i=1:m2xep(:,i)=xep(:,N2+i);xep(:,i+m2+N2)=xep(:,m2+i);
end%Neumann BC
xeN=zeros(N1+2*m1,N2+2*m2);
xeN(m1+1:m1+N1,m2+1:m2+N2)=x;
for i=1:m1xeN(i,:)=xeN(2*m1-i+1,:);xeN(i+m1+N1,:)=xeN(N1-i+m1+1,:);
end
for i=1:m2xeN(:,i)=xeN(:,2*m2-i+1);xeN(:,i+m2+N2)=xeN(:,N2-i+m2+1);
end%antireflective BC
%f(1-j)=2f(1)-f(1+j)
%f(n+j)=2f(n)-f(n-j)
xea=zeros(N1+2*m1,N2+2*m2);
xea(m1+1:m1+N1,m2+1:m2+N2)=x;
for i=1:m1xea(m1+1-i,:)=2*xea(m1+1,:)-xea(m1+1+i,:);xea(i+m1+N1,:)=2*xea(m1+N1,:)-xea(m1+N1-i,:);
end
for i=1:m2xea(:,m2+1-i)=2*xea(:,m2+1)-xea(:,m2+1+i);xea(:,i+m2+N2)=2*xea(:,m2+N2)-xea(:,m2+N2-i);
end

Psf表示计算或者导入得到的PSF函数(模糊核,卷积算子)在此只用于边界扩充,不用导入或者计算,直接赋值了其大小M1*M2(必须为奇数,否则m1和m2不是整数)。xe的第m1+1到m1+N1、m2+1:m2+N2列为原图像,其余区域为外部边界区域。最后xe0、xep、xeN、xea为各种BC的图像,其中xea由于计算中出现赋值,需要归一化(但是中间图像的灰度会变低)或者转为uint8格式(小于0的变为0,大于255的变为255)。

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

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

    三 其他BC 1.Repeated BC Xu Zhou等人在<A boundary condition based deconvolution framework for image debl ...

  2. OpenCV学习笔记(二):3种常用访问图像中像素的方式

    OpenCV学习笔记(二):3种常用访问图像中像素的方式 #include <opencv2/opencv.hpp>using namespace cv; using namespace ...

  3. matlab fx函数图像,五种常用小波基含MATLAB实现 五种基本函数图像

    五种基本函数图像 1.给出五种常用小波基的时域和频域波形图. 与标准的傅里叶变换相比,小波分析中使用到的小波函数具有不唯一性,即小波函数(t) 具有多样性.小波分析在工程应用中,一个十分重要的问题就 ...

  4. 【论文阅读】Learning Traffic as Images: A Deep Convolutional ... [将交通作为图像学习: 用于大规模交通网络速度预测的深度卷积神经网络](1)

    [论文阅读]Learning Traffic as Images: A Deep Convolutional Neural Network for Large-Scale Transportation ...

  5. 带你认识9种常用卷积神经网络

    摘要:在卷积神经网络中,通过使用filters提取不同的特征,这些filters的权重是在训练期间自动学习的,然后将所有这些提取的特征"组合"以做出决策. 本文分享自华为云社区&l ...

  6. halcon边缘提取颜色相近_初学者福利!三种用Python从图像数据中提取特征的技术...

    全文共4073字,预计学习时长8分钟 你之前是否使用过图像数据?也许你想建立自己的物体检测模型,或者仅仅是想统计走进某栋建筑物的人数,使用计算机视觉技术处理图像拥有无穷无尽的可能性. 但数据科学家最近 ...

  7. 数字图像处理——12种常用图像处理方法对比

    数字图像处理--12种常用图像处理方法对比 1.图像反转 2.对数变换 3.幂次变换 4.分段函数 5.直方图均衡化 6.直方图规定化 7.直方图匹配 8.线性滤波 9.中值滤波与均值滤波 10.拉普 ...

  8. 结合Scikit-learn介绍几种常用的特征选择方法

    特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减 ...

  9. 异常数据4种剔除方法_数据分析系列 22/32 | 9种常用的数据分析方法

    要使各种结构化的.非结构化的.海量的数据实现标准化.信息化,能够提供业务绩效评估.业务决策支持等要求,我们首先需要进行数据分析. 同时,围绕业务问题,采用合适的分析方法,分析模型,以及分析工具,这是数 ...

最新文章

  1. 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
  2. C# 7编程模式与实践
  3. 为VMware虚拟机中的Linux系统设置固定IP的方法
  4. python 函数前有一个下划线_【Python】怎么写好一个 Python 函数?
  5. 《自卑与超越》读书笔记(part2)--生活的不确定性正是我们希望的来源
  6. 数据链路层介质访问控制——信道划分、随机访问和轮询访问
  7. word域变成正常文本_超级干货|最全的PPT、Excel、Word实用宝典,助你办公效率翻倍!...
  8. mysql开发问题解决_开发过程中mysql常见问题的解决方法
  9. 【HDU - 2255】奔小康赚大钱(KM算法模板,二分图最优匹配)
  10. 在Linux下使用iconv转换字符串编码
  11. java调python报错Cannot create PyString with non-byte value
  12. git 修改密码_在windows中利用gitblit搭建git服务端
  13. C++语法(五)数据类型
  14. 微信收藏服务器,微信收藏功能常见问题存储空间上限了
  15. 微商新传奇奢瑞小黑裙、两家小程序内测成员都来这了,SDCC2016微信开发专题议题揭晓...
  16. 未能完成该操作pkdownloaderror错误8_国家励志奖学金申请和审批操作指南
  17. Android如何实现实时音视频会议的背景分割
  18. 【详谈 Delta Lake】系列专题 之 客户用例( Customer Use Case)
  19. springboot配置两个parent的方法
  20. Linux利用platform_driver和设备树实现PWM驱动

热门文章

  1. Flutter系列(三):Flutter挑战复杂页面!视频编辑页面来袭。
  2. 统计推断——正态性检验(图形方法、偏度和峰度、统计(拟合优度)检验)
  3. notepad++ 正则匹配不包含某字符串的行
  4. 数据库损坏的可能原因
  5. 数字化需要授之以渔,Azure 动手实验营在等你
  6. C++/nvcc/cuda 编译文件 出现 undefined reference to `cv::String::deallocate()'的解决方法
  7. 使用遗传算法解旅行商问题
  8. 测试右移:是什么,为什么,怎么办。
  9. MFC弹出对话框几种方法总结
  10. 完全二叉树的层序遍历(马老师的比赛心得)