码迷,mamicode.com
首页 > 编程语言 > 详细

智能剪刀算法学习笔记

时间:2016-04-16 19:30:45      阅读:2125      评论:0      收藏:0      [点我收藏+]

标签:

写在前面的话:如果以后我看到什么不懂的话,我一定会说:”天哪,这简直比计算机视觉还难!“

一边看论文,一边整理思路,决定整个思考过程都像流水账一样记下来。

高能:由于先整理思路,然后再动手写代码,所以,前面的内容可能有错,仅作为个人课程设计之用,请保持个人独立思考和分辨是非的习惯————>+_+。

智能剪刀概述

“智能剪刀”( Intelligent Scissors) 是 Morten-son 和 Barrett 在 1995 年提出来的一种图像分割交互工具,它可用于 2D 图像分割 ,通过这个工具, 用户可以容易且精确地在图像中勾画出感兴趣的区域 ROI( Region Of Interest) 。[3]

计算理论概述

图像区域耗费值

图像区域耗费值(Image Local Cost) 是图像边界提取的依据。
Morten-son 和 Barrett 先后在1995年发表论文[1] 和 1998年发表论文[2] 。在两次的论文中,对于ILC 的取值有点不一样。
现在一般而言,ILC 的取值一共由六项图像特征值加权和[2],分别是:

  • 拉普拉斯交零点值(Laplacian zero-crossing)
  • 梯度量值(Gradient magnitude)
  • 梯度方向值(Gradient direction)
  • 边界像素灰度值(Edge pixel value)
  • 内部像素灰度值(Inside pixel value)
  • 外部像素灰度值(Outside pixel value)

而在论文[1] 中,仅由前面三项决定。

l(p,q)表示ILC 的值,p 表示像素,q表示p 的相邻像素。(p、q 是一维的矢量,表示像素在图像中的坐标)
那么在论文[1] 中的计算如下:
技术分享

其中,各个变量值如下:

说明
fZ(q) 拉普拉斯交叉零点
fD(p, q) 梯度值方向
fG(q) 梯度值
WZ 加权值,0.43
WD 加权值,0.43
WG 加权值,0.14

在论文[2] 中,这个公式的计算如下:
技术分享

说明
fZ(q) 拉普拉斯交叉零点
fD(p, q) 梯度值方向
fG(q) 梯度值
fP(q) 边界像素值
fI(q) 内部像素值
fO(q) 外部像素值
WZ 加权值,0.3
WD 加权值,0.3
WG 加权值,0.1
WP 加权值,0.1
WI 加权值,0.1
WO 加权值,0.1

fZ - 拉普拉斯交叉零点

fZ的计算如下:
技术分享

其中 IL 表示的是图像的拉普拉斯变换值。
IL 的计算是使用如下模板对图像做卷积:

0 1 0
1 -4 1
0 1 0

(对图像进行二阶求导)

fG - 梯度值

令 IX 和 IY 表示像素在 x 和 y 方向的梯度,则梯度 G 的计算如下:
技术分享

为使高梯度产生低能量,fG的计算定义如下:
技术分享
如果q 是p 的对角相邻点,那么fG不变。如果q 是p 的水平或者垂直相邻点,那么fG除以根号2

其中IX 和 IY 的计算如下:

IX(i, j) = IX(i+1, j) -IX(i, j)
IY(i, j) = IX(i, j+1) - IX(i, j)

i, j 是像素的坐标

fD - 梯度方向值

假设 D(p) 表示的是像素点 p 的梯度方向,而 D(p) 表示的与梯度方向垂直的向量(顺时针旋转90° 得来),那么 D(p) 和 D(p) 的计算如下:

D(p) = [ IX(p), IY(p) ]
D(p) = [ IY(p), -IX(p) ]

fD这个在两篇论文里面计算的方式不一样。
在论文[1] 中如下:
技术分享

*cos[]-1 表示的是反余弦函数

其中dp 和 dq 的计算如下:
技术分享
技术分享

在论文[2] 中这个公式变为:
技术分享

L 的计算也变为:
技术分享
*|| p - q || 表示的泛数,这里是两个向量差的平方和再开根
*原来的论文中还有一段fD 计算的举例,我验算了好久,才发现,好像坐标轴是

^
– | –>

这么放的………………可是我们是在处理图像呀……摔~

fP - 边界像素值

技术分享
*I(p) 表示该坐标的像素值

fI 和 fO

内部像素值和外部像素值分别是在像素点的梯度方向和反方向的偏移像素值。
技术分享

k是一个恒定距离值(由用户定义)。而偏移的像素也可以是最近的像素值(默认)或由周围的四个像素双线性插值得来。

最短路径生成算法

在计算出ILC 值后,就可以计算最短路径生成算法了。
这个算法在论文中有很详细的解释。
技术分享
*算法要认真阅读

实现概述

从这里开始整理一下实现的思路,注意到整个算法的核心是计算ILC 值和路径的计算。认真分析ILC 值得计算,发现有些图像特征值的计算是不依赖于p 、 q 两点的关系的,那么对于这个特征值,有必要进行预处理。

计算fZ

首先对整张图像预处理计算IL, 然后用来计算fZ的值。由于在后续的计算过程中不需要重复使用到IL,所以可以直接在同一个内存空间上先后完成IL和fZ的计算。

计算fG和D(p)

fG和D(p) 都需要先计算出IX 和 IY,所以这两个值可以同时完成计算。
但是fG 并不完全依赖于q 点,所以在计算ILC 值还要判断p, q 点的位置关系。

计算fP、fI 和 fO

fP 就等于p 点的像素值,直接取值就好。
fI 和 fO 的计算都很简单,在计算ILC 的时候,实时计算就行。实现版本如下,采用最近邻像素的方式:
技术分享

计算fD

在前面的计算中,D(p) 已经预处理了,所以这里直接计算fD的值就好。

计算ILC

上面的计算已经把各个图像的特征值都求出来了,这里直接进行加权求和就可以。
但是加权fG的时候,需要注意,还要对照p、 q 关系决定是不是需要除以根号2.

计算路径

至此就可以循环计算路径了

【参考资料】
[1] Mortensen E N, Barrett W A. Intelligent scissors for image composition[C]//Proceedings of the 22nd annual conference on Computer graphics and interactive techniques. ACM, 1995: 191-198.
[2] Mortensen E N, Barrett W A. Interactive segmentation with intelligent scissors[J]. Graphical models and image processing, 1998, 60(5): 349-384.
[3] 李志鹏. 智能剪刀在进入式漫游中的应用[J]. 计算机与数字工程, 2010, 38(3): 143-145.

智能剪刀算法学习笔记

标签:

原文地址:http://blog.csdn.net/u014613043/article/details/51161792

(2)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!