图像去噪重要文献整理(二)BM3D / LSSC

图像去噪重要文献整理(二)BM3D / LSSC

仍然是基于自相似性,BM3D是传统方法里的state of the art,下面介绍BM3D。

Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering (2007,IEEE TIP)

Kostadin Dabov et. al.

BM3D四个字的意思分别表示block,match,和3D,也就是一摞2D的patch。

BM3D的主要步骤有grouping和collaborative filtering。首先先看grouping,和其他的方法用k-means聚类的算法不同,这里用grouping by matching,k-means的话,每个patch都是disjointed,所以每个fragment只能属于一个group,这里用match,实际上是这样操作:The fragments whose distance (i.e., dissimilarity) from the reference one is smaller than a given threshold are considered mutually similar and are subsequently grouped.


这里写图片描述
这里写图片描述

上面表示的就是grouping的过程。

然后是协同过滤,这里的协同过滤不是推荐里的协同过滤,而是字面意义上的,就是每个group中的fragment相互协同,进行过滤。以往的算法,包括基于non-local means的通常是找到相似的patch以后直接平均或者根据相似程度加权平均,但是作者说,在natural images中这种情况,即一个image中有很多一模一样的patch,其实不太常见,大概只能是具有similar的patch,不可能完全一样,如果平均了的话,就会有bias。所以这里采用collaborative filtering的方法,最后的结果每fragment都不一样。

实现方法就是 Collaborative Filtering by Shrinkage in Transform Domain,先对group应用d+1维的线性变换,然后shrink变换域的系数,然后invert。这些group 以下面的两种:即intrafragment correlation和interfragment correlation来表征。

总体流程图如下:


这里写图片描述

需要注意的有下面这些问题,比如协同滤波如何实现?首先我们对每个fragment进行一个2-D变换,比如DCT小波之类,然后对第三个维度进行一个1-d变换, The Walsh–Hadamard transform。阿达玛变换(此处需要学习一个)。另外,当做完一遍后,还要重新进行一个final estimate,形式上基本一样,应该是为了弥补前面由于噪声分组有误差的情况,然后在进行协同滤波,这里的不是用hard threshold,而是用维纳滤波来放缩系数。最后得到最终结果。

后面给出了一个快速实现方法。此处从略。

另外,推广到彩色图像的方法是,先转换到YCbCr空间(此处需要学习一个),然后利用Y也就是luminance channel的SNR相对比较高的特性,用Y进行分组,并且假设 The grouping constraint on the chrominances is based on the assumption that if the luminances of two blocks are mutually similar, then their chrominances are also mutually similar. 这一部分需要注意:


这里写图片描述

Non-local Sparse Models for Image Restoration(2009,ICCV)

Julien Mairal et al

看名字就能发现,这个算法是把non-local也就是自相似和sparse也就是稀疏编码相结合,用来做图像去噪的。这篇文章同事关注denoising和demosaicking。 To the best of our knowledge, this is the first time that the corresponding models of image self-similarities are explicitly used in a common setting with learned dictionaries。BM3D实际上也可以看成是用正交的字典来和自相似结合,但是这个字典是正交且固定的,这是和本文的不同。BM3D的稀疏性就是协同滤波的结果。

related work里,作者介绍了NL-means,LSC,即Learned Sparse Coding,Block matching 3D。这里只看一下LSC。

LSC也就是学习稀疏编码是假设了如下先验知识:assume that the clean signal can be approximated by a sparse linear combination of elements from a basis set called dictionary. 这样的话我们就可以用一个overcomplete,过完备的dictionary来编码信号,由于dictionary过完备,所以系数就会稀疏sparse。因此实际上就是解决以下优化问题:


这里写图片描述

说D是overcomplete,实际上就是说D的列数大于行数。仔细看上面这个公式,实际上只是优化了系数的稀疏性,也就是说假定字典是已经有的。实际上对于自然图像来说,一般这个字典就是各种小波。于是人们(Elad, Aharon)提出了学习一个字典的想法,这样的想法实际上是解这个问题:


这里写图片描述
这里写图片描述

However, we have also observed that dictionaries learned with the 1 norm are usually better for denoising, even when the final reconstruction is done with the 0 pseudo norm.

Simultaneous Sparse Coding 是这样:它不仅每列单独来看都是sparse的,而且整个矩阵的非零行也是少的,因此叫做joint sparsity。同样可以写成正则的形式,就是下面这个 grouped-sparsity regularizer


这里写图片描述

最后转化成了这样一个问题:



这里写图片描述

用于demosaicking的话,算法流程如下:


这里写图片描述

我的理解是,通过对A矩阵的上述约束,使得不仅在列上进行稀疏化,还在行上稀疏化。列上稀疏化就是sparse coding,即对每个patch 的系数要求稀疏。而行上的joint sparsity实际上是使得列与列之间相似的更多一些,也就是强调了self-similarity。所以本文是一个non-local sparse model。

放个结果,作者认为他的算法可以恢复出sigma=15的house图片的砖头的细节和sigma=50的情况下man的头发细节。


这里写图片描述

这个算法在这里叫LSSC,应该是Learned Simultaneous Sparse Coding。。。

2018年03月18日14:01:21

人类是唯一会脸红的动物,也是唯一该脸红的动物。 —— 作家,马克吐温

  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include "mainwindow.h" #include "ui_mainwindow.h" #include"qpainter.h" #include"scanline.h" #include <QPointF> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowState(Qt::WindowFullScreen); // setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint); showFullScreen(); //直线扫描转换菜单 myAc1 = new QAction(this); myAc1->setText(("DDA")); myAc1->setShortcut(QKeySequence("Ctrl+8")); //随意指定快捷方式 connect(myAc1, SIGNAL(triggered()), this, SLOT(pop1())); myAc2 = new QAction(this); myAc2->setText(("middle")); connect(myAc2, SIGNAL(triggered()), this, SLOT(pop2())); myAc3 = new QAction(this); myAc3->setText(("Bresnham")); connect(myAc3, SIGNAL(triggered()), this, SLOT(pop3())); lineMenu = menuBar()->addMenu(("LSSC"));//直线段扫描转换 lineMenu->addAction(myAc1); lineMenu->addAction(myAc2); lineMenu->addAction(myAc3); } MainWindow::~MainWindow() { delete ui; if (line != nullptr) { delete line; } } void MainWindow::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); // // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); // // 设置画笔颜色 painter.setPen(QColor(0, 160, 230)); // // 绘制直线 //// painter.drawLine(QPointF(ScanLine())); if(menunum==1)//微分绘线 { line=new ScanLine(); QPointF end = line->DDALine(30, 10, 10, 30); painter.drawLine(QPointF(30, 10), end); update(); } else if(menunum==2)//中点绘线 { line=new ScanLine(); QPointF end = line->MidLine(30, 10, 10, 30); painter.drawLine(QPointF(30, 10), end); update(); } else if(menunum==3)//brenham { line=new ScanLine(); QPointF end = line->Bresenham(30, 10, 10, 30); painter.drawLine(QPointF(30, 10), end); update(); } }还是无法显示出画的直线
最新发布
05-31

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值