天天看点

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

这是一篇基于视觉颜色机制的边缘检测论文,原文分中文和英文版

中文版链接:中文版pdf

英文版链接:英文版pdf

项目主页:http://www.neuro.uestc.edu.cn/vccl/projcvpr2013.html

整个算法可分为以下几步:

1、输入一张彩色图像

2、 分别提取r-g-b三种颜色信息,并计算y颜色信息,进行高斯滤波得到

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

3、设置连接权重ω ,通过式(1)得到r+wg和wr+g两种连接权值的的结果

$$

srg、sgr

(ii层中处理),b-y两个通道类似,可得到四个中间结果

srg、sgr、sby、syb

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

4、iii层(cortex layer)对ii层中的结果

进行计算,公式如(6)所示:

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

其中:

sr-g+=-sr+g-

nr+g-、nr-g+

分别表示v1层神经元r-on/g-off 和 r-off/g-on的rf(由公式(3)(4)(5)得到的rf)。

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

取分母为16,则θi取[0,2π]之间相隔π/8的16个角度,由(6)式会得到16个

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

结果,对应于16(程序中只用到了8个角,0到π)个不同朝向θi的滤波器结果,这个d(x,y)是对四个拮抗通道其中之一进行计算的结果,所以,四个通道会得到四组相应的d(x,y)。

四组d(x,y)值,通过(8)式,每组取其中的最大值可得到对应于四个通道的四个d(x,y),并对其进行线性归一化,将四个通道的响应归一化到[0,1]

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

输出四个归一化后的d(x,y)。

5、最终的轮廓响应为r(x,y),如公式(9)所示,r(x,y)是对步骤4中的d(x,y)取最大值的结果。

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

流程图如下所示

Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记

主要函数功能为

1、<code>gaus(sgm)sgm为sigma值,返回一个滤波矩阵</code>

2、<code>singleopponent( map,opponent,sigma,weights )</code>

参数:<code>opponent</code>为rg或by两个值之一,分别代表两对拮抗通道

过程:对<code>r、g、b、y</code>四个通道进行滤波,再计算<code>r’+w*g’、w*r’+g’、b’+w*y’、w*b’+y’</code>,分别对应

srg、sgr、sby、syb$$

返回:

3、<code>divgauss2d( sigma,seta ),seta为不通滤波器的朝向,返回一个滤波矩阵</code>

4、<code>conbyfft( img,tpl )</code>

参数:<code>img</code>为

四个其中之一, tpl 为 divgauss2d( )返回的结果进行归一化

过程:对img进行填充、傅里叶及其逆变换等处理

返回:与img相同大小的矩阵,即为

drg(θi)、dgr (θi )、dby (θi)、dyb (θi)

5、<code>orienteddoubleopponent( map,opponent,sigma,angles,weights )</code>

过程:调用<code>singleopponent()、divgauss2d()、conbyfft()</code>

返回:返回

drg、dgr、dby、dyb

6、<code>resdo( map,sigma,angles,weights )</code>

过程:

drg、dgr、dby、dyb$$

都是xy8(如果angles设为8)的矩阵,即八组

drg(θi)、dgr(θi)、dby(θi)、dyb(θi)

取八组

drg(θi)

数据中每个 (x , y)点对应的最大值作为新的

cbrg$$

其他三组数据相同,其中

cbrg( : , : )

drg$$

中的最大值,而orients(:,:,1)是

中最大值在矩阵中的位置

cbrg、cbgr、cbby、cbyb

分别代表四个通道得到的边缘矩阵,对每个像素点,取四个通道中的最大边缘值作为 <code>re ( : , : )</code> ,取该值在原矩阵中对应的<code>angles</code>值为<code>theta( : , : )</code>。

返回:<code>re ( : , : )</code>和<code>theta( : , : )</code>矩阵,<code>re</code>即为初步的边缘矩阵。

7、<code>nonmax(im,theta)</code>

参数:<code>im</code>为<code>resdo()</code>的返回值re进行归一化,<code>theta</code>为<code>resdo()</code>的返回值theta进行角度变换

过程:a点在方向1上有最大边界值a,而在方向1上相邻的两个点b,c也有计算得到的边界值b,但是a小于等于b,这说明a点的边界比b、c点的边界强度低,那么真正的边界应该是在b或c处取得,所以应该令a点处的边界值为0,这样可以保留最合适的边界点。

返回:返回比输入<code>im</code>小一个像素圈大小的边缘矩阵<code>im</code>

8、<code>coboundary(map,sigma,angles,weights)</code>

参数:<code>map</code>为处理的图像,<code>sigma、angles、weights</code>为设置的参数(此算法需要设置的所有参数就是这三个)

过程:调用<code>resdo()、nonmax(),对nonmax()</code>中得到的<code>im</code>进行边缘填充0,得到最终的边界矩阵<code>fb</code>

返回:最终的轮廓矩阵<code>fb</code>

继续阅读