概念

KNN matting提出了基于KNN的拉普拉斯矩阵计算方法,通过KNN构建邻接矩阵,进而得到度矩阵和拉普拉斯矩阵,带入α\alpha的求解方程中。

抠图

抠图技术,把图像中一部分从其他部分分开出来。将图像分为两层,分出来那层成为前景层,图像中的其他部分称为背景层。
图像中每一点都是由前景颜色和背景颜色组合而成,其中前景颜色所占的比重称为alpha因子。颜色组合方程:

I=αF+(1−α)B

I=\alpha F+(1-\alpha)B
I, F, B分别表示图像上一点的合成色、前景色、背景色, α\alpha是该点的alpha值。
仅仅知道I的情况下,求解alpha,F,B,这是一个约束不足(under-constrained)问题。
文中通过假设在很小的窗口内F和B为恒定值,进而将该问题归结为求下面的约束问题(论文中提取的定理)

α=argminα′Lαs.t. α(i)=S(i)

\alpha = \arg \min \alpha 'L\alpha \\\\ s.t. \ \alpha(i)=S(i)

其中SS是手工标记的区域,S(i)S(i)是S中的像素值。用下面这个公式来求解:

(L+λD)∑inαi=λm

(L+\lambda D)\sum\limits_{i}^{n}\alpha_i=\lambda m
K近邻抠图的主要贡献在于提出了基于KNN的拉普拉斯矩阵计算方法。
1. 特征向量计算
给定像素i的特征向量定义如下:

X(i)=(cos(h),sin(h),s,v,x,y)

X(i)=(cos(h),sin(h),s,v,x,y)
其中h,s,v分别是HSV颜色空间的坐标值,(x,y)是像素i的空间坐标。
2. 内核函数计算
定义内核函数:

k(i,j)=1−∥X(i)−X(j)∥C

k(i,j)=1-\frac{\left\| X(i)-X(j) \right\|}{C}
C是权值调节系数,保证 k(i,j)∈[0,1]k(i,j) \in [0,1], ||·||是1范数,即两向量差的绝对值之和。
求拉普拉斯矩阵:

L=D−A

L=D-A
其中相似矩阵 Aij=k(i,j)A_{ij}=k(i,j),对角矩阵 Dii=∑jAijD_{ii}=\sum\limits_{j}{A_{ij}}
K近邻抠图给出了一种适合任何颜色任何维度的特征空间算法。利用Nonlocal抠图的非局部原理,通过使用K个最近邻像素来匹配非局部区域,并且提供了一个简单快速的算法来产生更高质量抠图结果,进一步利用语出共轭梯度法求解封闭形式解。

非局部原理

非局部原理的工作假设是,一个去噪像素i是由与它类似特征的像素与一个内核函数k(i,j)权重的加权和:

E[X(i)]≈∑jX(j)k(i,j)1Dik(i,j)=exp(−1h2∥X(i)−X(j)∥2g−1h2d2ij)Di=∑jk(i,j)

\begin{array}{l} E[X(i)] \approx \sum\limits_j {X(j)k(i,j)\frac{1}{{{D_i}}}} \\ k(i,j) = \exp ( - \frac{1}{{{h^2}}}\left\| {X(i) - X(j)} \right\|_g^2 - \frac{1}{{{h^2}}}d_{ij}^2)\\ {D_i} = \sum\limits_j {k(i,j)} \end{array}
其中 $X(i)$是像素i的特征向量, $d_{ij}$是像素i到j的距离,||·||是一个高斯范数,,h1和h2是常量。类似的得到 $\alpha$的预期值如下:

E[αi]≈∑jαjk(i,j)1DiorDiαi≈k(i,j)Tα

E[{\alpha _i}] \approx \sum\limits_j {{\alpha _j}k(i,j)\frac{1}{{{D_i}}}or{D_i}{\alpha _i} \approx } k{(i,j)^T}\alpha
其中α是由所有输入图像的α值组成的向量。
根据非局部原理,当条件分布 E[αi|X(i)=X(j)]=αjE[{\alpha _i}|X(i) = X(j)] = {\alpha _j}成立时,意味着有相同特征的像素将共享同样的α值。
因此,有 Dα≈AαD\alpha \approx A\alpha, L=D−AL=D-A称为集群拉普拉斯算子,基本上解决了二次最小化问题 minα∑Aij(αi−αj)2min_\alpha \sum{A_{ij}(\alpha_i-\alpha_j)^2}.

步骤

  1. 特征向量计算
    给定像素i的特征向量定义如下:

    X(i)=(cos(h),sin(h),s,v,x,y)

    X(i)=(cos(h),sin(h),s,v,x,y)
    其中h,s,v分别是HSV颜色空间的坐标值,(x,y)是像素i的空间坐标。

  2. 内核函数计算
    定义内核函数:

    k(i,j)=1−∥X(i)−X(j)∥C

    k(i,j)=1-\frac{\left\| X(i)-X(j) \right\|}{C}
    C是权值调节系数,保证k(i,j)∈[0,1]k(i,j) \in [0,1],||·||是1范数,即两向量差的绝对值之和。
    求拉普拉斯矩阵:

    L=D−A

    L=D-A
    其中相似矩阵Aij=k(i,j)A_{ij}=k(i,j),对角矩阵Dii=∑jAijD_{ii}=\sum\limits_{j}{A_{ij}}

  3. 闭合形式解
    加入用户约束信息,封闭形式解的方程:

    (L+λD)∑inαi=λm

    (L+\lambda D)\sum\limits_{i}^{n}\alpha_i=\lambda m
    其中λ\lambda是约束系数,m<script type="math/tex" id="MathJax-Element-26">m</script>是向量,用户对已知像素区域的标记

K近邻抠图(KNN matting)相关推荐

  1. Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻

    Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻 1. 效果图 2. 源码 参考 这篇博客将介绍将K-最近邻 (KNN K-Nearest Neig ...

  2. 介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势?

    介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势? K近邻(KNN)算法 近邻(Nearest Neighbor)算法既可以用于监督学习(分 ...

  3. K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?

    K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解? K近邻(KNN)是最简单的算法之一,它计算预测样本与训练数据集中每个数据点之间的距离,并找到 ...

  4. 机器学习算法与Python实践之(二)k近邻(KNN)

      机器学习算法与Python实践之(二)k近邻(KNN) (基于稀疏矩阵的k近邻(KNN)实现) 一.概述 这里我们先来看看当我们的数据是稀疏时,如何用稀疏矩阵的特性为KNN算法加速.KNN算法在之 ...

  5. 基于KD树的K近邻算法(KNN)算法

    文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...

  6. k近邻算法(KNN)-分类算法

    k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. k-近邻算法采用测量不同特征值之间的 ...

  7. 基于稀疏矩阵的k近邻(KNN)实现

    基于稀疏矩阵的k近邻(KNN)实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 元旦了!要跨入2015了!呵呵,忙了挺久,没有更新博客了,博客也悄悄地蒙上了 ...

  8. 机器学习算法总结之K近邻(KNN)

    写在前面 K近邻(K-nearest neighbor,k-nn)是一种常用的机器学习监督学习方法,可用于分类和回归问题.其工作机制为:给定测试样本,基于某种距离度量找出训练集中与其最靠近的K个训练样 ...

  9. 一文搞懂k近邻(k-NN)算法(一)

    原文链接 一文搞懂k近邻(k-NN)算法(一) 前几天和德川一起在学习会上讲解了k-NN算法,这里进行总结一下,力争用最 通俗的语言讲解以便更多同学的理解. 本文目录如下: 1.k近邻算法的基本概念, ...

最新文章

  1. linux中使用scp远程拷贝文件及文件夹
  2. 找出存在性能问题的sql语句
  3. centos7开发java体验_centos7之Java开发环境构建
  4. 两个html文件互相访问变量,访问一个js文件的变量上的HTML文件
  5. Mac/Linux/Centos终端中上传文件到Linux云服务器
  6. 程序员面试中遇到问题
  7. HBase详细的安装和使用方法
  8. Tomcat学习总结(10)——Tomcat多实例冗余部署
  9. java kv对象_java入门之——对象转型
  10. 只要学会这个PDF压缩方法,压缩PDF不再是难题
  11. 使用ConfuserEx实现项目加密
  12. 竞赛保研(自动化专业)
  13. JavaScript函数传参原理详解——值传递还是引用传递
  14. 华为这个广告,我愿一辈子不买苹果!
  15. U盘出现“请将磁盘插入U盘”的问题怎么解决?
  16. 谷歌(Chrome)浏览器丨插件安装教程
  17. 【完全指南】如何在Github上使用Hexo搭建自己的Blog
  18. 我的世界java版如何装mod_我的世界MOD安装详解教程 全方位介绍MOD
  19. EM4001射频模块读卡
  20. 对文本文件的加密解密

热门文章

  1. SOHO中国董事长潘石屹的昨天今天和明天
  2. 一篇非常不错的微信软文!
  3. 手机端 自定义简单的下拉动画效果选择框 解决过渡失效
  4. Nginx高并发之限流+日志分割
  5. 项目管理中的放弃艺术
  6. Python 将JSON格式文件进行数据可视化制作世界人口地图
  7. Linux 下禁用触摸板
  8. 服务器环境配置发布网站
  9. github pages Jekyll环境搭建
  10. 微信公众号开发中,安卓和IOS系统兼容问题(后续整理...)