K近邻抠图(KNN matting)
概念
KNN matting提出了基于KNN的拉普拉斯矩阵计算方法,通过KNN构建邻接矩阵,进而得到度矩阵和拉普拉斯矩阵,带入α\alpha的求解方程中。
抠图
抠图技术,把图像中一部分从其他部分分开出来。将图像分为两层,分出来那层成为前景层,图像中的其他部分称为背景层。
图像中每一点都是由前景颜色和背景颜色组合而成,其中前景颜色所占的比重称为alpha因子。颜色组合方程:
I=\alpha F+(1-\alpha)B
I, F, B分别表示图像上一点的合成色、前景色、背景色, α\alpha是该点的alpha值。
仅仅知道I的情况下,求解alpha,F,B,这是一个约束不足(under-constrained)问题。
文中通过假设在很小的窗口内F和B为恒定值,进而将该问题归结为求下面的约束问题(论文中提取的定理)
\alpha = \arg \min \alpha 'L\alpha \\\\ s.t. \ \alpha(i)=S(i)
其中SS是手工标记的区域,S(i)S(i)是S中的像素值。用下面这个公式来求解:
(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)
其中h,s,v分别是HSV颜色空间的坐标值,(x,y)是像素i的空间坐标。
2. 内核函数计算
定义内核函数:
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
其中相似矩阵 Aij=k(i,j)A_{ij}=k(i,j),对角矩阵 Dii=∑jAijD_{ii}=\sum\limits_{j}{A_{ij}}
K近邻抠图给出了一种适合任何颜色任何维度的特征空间算法。利用Nonlocal抠图的非局部原理,通过使用K个最近邻像素来匹配非局部区域,并且提供了一个简单快速的算法来产生更高质量抠图结果,进一步利用语出共轭梯度法求解封闭形式解。
非局部原理
非局部原理的工作假设是,一个去噪像素i是由与它类似特征的像素与一个内核函数k(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[{\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}.
步骤
- 特征向量计算
给定像素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的空间坐标。 - 内核函数计算
定义内核函数:k(i,j)=1−∥X(i)−X(j)∥Ck(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−AL=D-A
其中相似矩阵Aij=k(i,j)A_{ij}=k(i,j),对角矩阵Dii=∑jAijD_{ii}=\sum\limits_{j}{A_{ij}} - 闭合形式解
加入用户约束信息,封闭形式解的方程:(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)相关推荐
- Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻
Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻 1. 效果图 2. 源码 参考 这篇博客将介绍将K-最近邻 (KNN K-Nearest Neig ...
- 介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势?
介绍一下K近邻(KNN)算法,KNeighbors和RadiusNeighbors的差异是什么?各有什么优势? K近邻(KNN)算法 近邻(Nearest Neighbor)算法既可以用于监督学习(分 ...
- K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?
K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解? K近邻(KNN)是最简单的算法之一,它计算预测样本与训练数据集中每个数据点之间的距离,并找到 ...
- 机器学习算法与Python实践之(二)k近邻(KNN)
机器学习算法与Python实践之(二)k近邻(KNN) (基于稀疏矩阵的k近邻(KNN)实现) 一.概述 这里我们先来看看当我们的数据是稀疏时,如何用稀疏矩阵的特性为KNN算法加速.KNN算法在之 ...
- 基于KD树的K近邻算法(KNN)算法
文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...
- k近邻算法(KNN)-分类算法
k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. k-近邻算法采用测量不同特征值之间的 ...
- 基于稀疏矩阵的k近邻(KNN)实现
基于稀疏矩阵的k近邻(KNN)实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 元旦了!要跨入2015了!呵呵,忙了挺久,没有更新博客了,博客也悄悄地蒙上了 ...
- 机器学习算法总结之K近邻(KNN)
写在前面 K近邻(K-nearest neighbor,k-nn)是一种常用的机器学习监督学习方法,可用于分类和回归问题.其工作机制为:给定测试样本,基于某种距离度量找出训练集中与其最靠近的K个训练样 ...
- 一文搞懂k近邻(k-NN)算法(一)
原文链接 一文搞懂k近邻(k-NN)算法(一) 前几天和德川一起在学习会上讲解了k-NN算法,这里进行总结一下,力争用最 通俗的语言讲解以便更多同学的理解. 本文目录如下: 1.k近邻算法的基本概念, ...
最新文章
- linux中使用scp远程拷贝文件及文件夹
- 找出存在性能问题的sql语句
- centos7开发java体验_centos7之Java开发环境构建
- 两个html文件互相访问变量,访问一个js文件的变量上的HTML文件
- Mac/Linux/Centos终端中上传文件到Linux云服务器
- 程序员面试中遇到问题
- HBase详细的安装和使用方法
- Tomcat学习总结(10)——Tomcat多实例冗余部署
- java kv对象_java入门之——对象转型
- 只要学会这个PDF压缩方法,压缩PDF不再是难题
- 使用ConfuserEx实现项目加密
- 竞赛保研(自动化专业)
- JavaScript函数传参原理详解——值传递还是引用传递
- 华为这个广告,我愿一辈子不买苹果!
- U盘出现“请将磁盘插入U盘”的问题怎么解决?
- 谷歌(Chrome)浏览器丨插件安装教程
- 【完全指南】如何在Github上使用Hexo搭建自己的Blog
- 我的世界java版如何装mod_我的世界MOD安装详解教程 全方位介绍MOD
- EM4001射频模块读卡
- 对文本文件的加密解密