很多图像处理算法,如立体视觉中的深度估计,图像上色,高动态范围HDR中的tone mapping,图像分割,都有一个共性的问题:寻找一个全局的解,这个解是指一个分段的piecewise平滑含糊,描述了感兴趣的值(可以是深度,色度,曝光值,标签等)。

另一方面,数字图像越来越大,从one quarter million到multi-Megapixel到Gigapixel,随着图像尺寸的变大,图像处理的耗时和占用空间也线性增长。一个处理方法就是对原始图像先进行下采样的预处理再进行图像处理,但这也带来一个问题,就是将处理之后的图像再恢复到原始的分辨率,这就是图像的超分辨率重建。很显然,我们可以利用原始的大尺寸图像。将原始的图像与双边滤波结合起来,就是本文新提出的算法JBU。

双边滤波bilateral filter是一个保边滤波edge-preserving filter,最早在1998年提出,为了解决传统的插值的图像上采样方法会造成边缘模糊。为了保留边缘,BF在不同位置的核参数应该是不一样的,所以BF属于非线性的滤波器,也是各向异性的滤波器。具体而言,滤波器会根据不同的空间位置和灰度变化范围进行调整,这也是“双边”的含义,一边是空域spatial filter(与中心点的距离远近),一边是与中心点的灰度差值大小range filter。从表达式上看,最终的滤波器系数的两个核的乘积。两个子核都可以是高斯函数,当灰度变化很大或者距离很远,那么滤波器系数就会很小,所以边缘就得以保留。

有人利用BF做HDR中的色调映射tone mapping,有人用来去马赛克,

那么如何将BF和大尺寸的guidance图像结合在一起呢?是使用灰度差异的子核还是使用空间距离的子核呢?为了利用更准确的边缘信息,是按照像素在大尺寸图像中对应的灰度值来计算滤波系数,因为边缘往往是灰度值跳变造成的,所以使用大图位置的灰度值更准确。和OpenCV做图像变换一样,这种像素坐标的映射关系也是从目标图像(这里是大图)到低分辨图像。

作为引导图的高分辨图像是离散采样的,所以超分重建的效果与上采样的比例无关。

4 应用

色调映射tone mapping是为了在普通设备中显示HDR图像。需要解很大的线性方程组,虽然可以通过multi-resolution solvers高效地解出,但是当数据很大时还是会占用相当大的内存。那么,JBF具体是怎么应用在HDR中的呢?首先,I是低分辨率的图像,T是某种tone mapping算子,那么T(I)就是这个算子生成的tone mapped图像。对应的低分辨率的解被定义为映射前后的像素级的比,也就是说,这个图其实是曝光图exposure map,表示应用在每个像素上的曝光校正系数。我们就是在这个图上使用JBF,因为这个图虽然大部分是平滑的,但是在具有显著边缘特性的区域会出现不连续。注意曝光图可能是单通道的(即只对亮度进行调节),也可能是多通道的(即支持多种色调的调节)。

在Levin的图像上色和图像重新着色的方法中也有类似的线性方程组,面对尺寸很大的图像同样有计算量大的问题。Yatziv的方法虽然不需要解线性方程组,但依然要迭代地遍历数据。在这里JBU的应用对象就是着色之后的低分辨率图像,但是在上采样之前,需要先将它转换至YIQ颜色空间(或者其他任意的将亮度与色度解耦的颜色空间),然后在每个色度通道上应用JBU。从图3中可以看到,JBU避免了在边缘区域的色度泄漏。

立体视觉深度估计。深度估计的关键是得到两幅图像中对应点的视差disparities。然而,估计出的深度图在边缘处是不连续的discontinuties。将高分辨率图像作为引导,就可以对低分辨率的深度图像进行上采样。

基于图分割Graph-cut的图像处理。近来出现的一些用户交互性的图像编辑技术涉及到了在图中寻找最小分割。比如交互性的蒙太奇照片系统,使用最小图分割技术来计算图像融合时的最小化接缝。优化的结果是一个标签图label map,label表明的是融合图是每个像素来自于哪个照片。约束条件是用户指定的几个图像,拼接算法做的是计算出label map,指定了剩余的没有被约束的像素来自于哪个图像,这样生成的图像其拼接感是最小的。这个标签图和之前的几个应用的区别在于标签是离散的,做法是这样的,为了得到每个像素的标签,对每个低分辨率的像素会有一个带非零权重的投票,获胜的标签会有累积最高的权重。

5 表现和准确性

JBU的复杂度是O(Nr2),N是输出图像的尺寸,r是滤波器的尺寸。表现与输出尺寸有关,但是与上采样因子无关,因为滤波器始终应用在低分辨率图像上。所有的结果都使用5x5的高斯滤波,速度快,同时可以将足够距离的像素值考虑进去。

function result = JointBilateralUpsample(color,depth,factor,sigma_w,sigma_c,w)
if( size(color,3) ~= 3 ),error( 'color data must be of 3 channel' );
enddepth = double(depth);
color = double(color);
highHeight = size( color, 1 );
highWidth  = size( color, 2 );
lowHeight = size(depth,1);
lowWidth = size(depth,2);
result = zeros(highHeight,highWidth);
for i = 1:highHeightfor j = 1:highWidthid = i/factor;jd = j/factor;iMin = ceil(max(id-w,1));iMax = floor(min(id+w,lowHeight));jMin = ceil(max(jd-w,1));jMax = floor(min(jd+w,lowWidth));depth_sec = depth(iMin:iMax,jMin:jMax);color_sec = color(iMin * factor:factor:iMax * factor,jMin * factor:factor:jMax * factor,:);% Compute Gaussian range weights.dR = color_sec(:,:,1)-color(i,j,1);dG = color_sec(:,:,2)-color(i,j,2);dB = color_sec(:,:,3)-color(i,j,3);range = exp( -(dR.^2 + dG.^2 + dB.^2) / (2*sigma_c^2));% Calculate bilateral filter response.iw = (iMin:iMax) - id;jw = (jMin:jMax) - jd;[mx,my] = meshgrid(jw,iw);spatial = exp( -(mx.^2 + my.^2) / (2*sigma_w^2) );depth_weight = (depth_sec>0) .* range .* spatial;depth_sum = depth_sec .* depth_weight;result(i,j) = sum(depth_sum(:)) / sum(depth_weight(:));endendend

对于彩色三通道图像,可以分别在RGB中进行上采样,但是可能造成颜色泄漏,通常的做法是先进行颜色空间转换。原文使用使用的是YIQ,但其实只要是亮度分离的颜色空间都可以。YIQ是电视系统中使用的颜色空间,对应美国和日本的NTSC制式,在matlab中rgb到YIQ的转换函数是rgb2ntsc.首先YUV和YIQ三通道都是独立的,所以使得黑白电视机也可以接收彩色电视信号。另外,黑白图像主要提供细节,所以颜色通道的带宽可以适当压缩。

Reference:

1.http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html

2.https://zhuanlan.zhihu.com/p/21983679

3.https://www.jianshu.com/p/ce4afe599d6a

4.https://blog.csdn.net/CHNguoshiwushuang/article/details/82469162?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

5.https://www.cnblogs.com/magic-428/p/9172406.html

6.ntsc2rgbhttps://www.mathworks.com/help/images/ref/ntsc2rgb.html

JBU联合双边上采样相关推荐

  1. 利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。...

    这十年来,在图像处理领域提出了很多新的图像分析和处理方法,包括是自动的以及一些需要有人工参与的,典型的比如stereo depth computations.image colorization.to ...

  2. 【三维深度学习】基于片元的渐进式三维点云上采样模型

    点云上采样对于从稀疏三维数据重建稠密三维点云十分有效.但面对非规则.无需.稀疏.噪声和不完整的点云结构,图像领域的超分辨.补全.稀疏加密等方法无法直接用于点云上采样中.PointNet系列方法基于全连 ...

  3. games202:六,实时光线追踪RTRT:Temporal Filtering、联合双边滤波、Outlier Removal、SVGF、RAE

    games202:六,实时光线追踪RTRT:Temporal Filtering.联合双边滤波.Outlier Removal .SVGF.RAE RTRT现状 实时降噪方法 一,Temporal F ...

  4. 联合双边滤波器(joint bilateral filter)

    原文地址: 联合双边滤波器(joint bilateral filter) 作者: pplong 前面介绍了双边滤波器(bilateral filter,LBF),然而BF的权值是不稳定的,因此在边缘 ...

  5. 图像处理-双边滤波和联合双边滤波

    图像处理-双边滤波和联合双边滤波 双边滤波原理 ​ 双边滤波(Bilateral Filter)是一种非线性滤波器,可以达到保持边缘,降噪平滑的效果.其算法最早由C. Tomasi和R. Manduc ...

  6. OpenCV实验(4):实现图像的联合双边滤波处理

    实验要求: 给定函数:function im = jbf(D,C,w, sigma_f, sigma_g) 其中:D为输入图像:C为引导图像:W为滤波窗口大小: sigma_f 为spatial ke ...

  7. PU-Net:一种基于数据的3D点云上采样网络

    点击上方"视学算法",选择"星标" 干货第一时间送达 论文下载: https://openaccess.thecvf.com/content_cvpr_2018 ...

  8. 点云的无序性_PU-Net:解决3D点云数据的上采样问题

    作者:Danny明泽 论文下载: https://openaccess.thecvf.com/content_cvpr_2018/papers/Yu_PU-Net_Point_Cloud_CVPR_2 ...

  9. 【OpenCV 例程200篇】60. 非线性滤波—联合双边滤波

    [OpenCV 例程200篇]60. 非线性滤波-联合双边滤波(Joint bilateral filter) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白 ...

最新文章

  1. from __future__ import absolute_import, division, print_function
  2. Open source robotics toolkits: use virtual arenas to test your robotics algorithms
  3. Three.js中使用requestAnimationFrame方法实现立方体转动和小球跳动的动画
  4. 将图的广度优先遍历在邻接矩阵和邻接表存储结构上分别实现_图解:什么是“图”?
  5. PyQt5学习笔记06----Qt Designer自定义信号emit及传参
  6. java log4j 异步_Log4j2异步日志之异步格式化
  7. 常数0.0039215689代表什么?
  8. 专访飞康新任CEO:云时代下,我们更懂数据保护
  9. python配色方案_python 生成18年写过的博客词云
  10. 《Smynes游戏模拟器官方版》
  11. J1939协议之通俗易懂----简介
  12. IOS 项目性能优化
  13. ReferenceError Cannot access ‘xxx‘ before initialization
  14. 2018上半年最有价值科技类的微信公众号有哪些?
  15. 十一、MySQL触发器
  16. 微信公众号自定义回复文字菜单-----详细教程
  17. 职场防背锅的有效方式
  18. 我们更需要指数型的AB产品(长盛同庆、基金瑞福)
  19. iOS中为何用串行队列(Serial Queue)也无法保证对象读写操作的同步?
  20. win10 win7比较

热门文章

  1. 中countif函数_countif与countifs:单条件与多条件计数适用场景
  2. 线性代数应该这样讲(三)-向量2范数与模型泛化
  3. 论文浅尝 | 基于未知谓词与实体类型知识图谱的 Zero-Shot 问题生成
  4. Docker镜像大小
  5. 面向知识图谱的信息抽取
  6. 【Codeforces 1096D】Easy Problem
  7. 浅谈Spring的AOP实现-代理机制
  8. Django ORM 数据库操作
  9. Linux部署Apache ActiveMQ 5.14.1
  10. 数据库一对一,一对多,多对多关系