这是一篇基于视觉颜色机制的边缘检测论文,原文分中文和英文版
中文版链接:中文版PDF
英文版链接:英文版PDF
项目主页:http://www.neuro.uestc.edu.cn/vccl/projcvpr2013.html
以下是我个人学习该算法后的理解,希望各位看官批评指正!
整个算法可分为以下几步:
1、输入一张彩色图像
2、 分别提取R-G-B三种颜色信息,并计算Y颜色信息,进行高斯滤波得到
3、设置连接权重ω ,通过式(1)得到R+wG和wR+G两种连接权值的的结果 $$Srg、Sgr$$(II层中处理),B-Y两个通道类似,可得到四个中间结果$$Srg、Sgr、Sby、Syb $$
4、III层(Cortex layer)对II层中的结果$$Srg、Sgr、Sby、Syb$$ 进行计算,公式如(6)所示:
其中:$$Sr-g+=-Sr+g- $$
$$Nr+g-、Nr-g+$$ 分别表示V1层神经元R-on/G-off 和 R-off/G-on的RF(由公式(3)(4)(5)得到的RF)。
而
取分母为16,则θi取[0,2π]之间相隔π/8的16个角度,由(6)式会得到16个结果,对应于16(程序中只用到了8个角,0到π)个不同朝向θi的滤波器结果,这个D(x,y)是对四个拮抗通道其中之一进行计算的结果,所以,四个通道会得到四组相应的D(x,y)。
四组D(x,y)值,通过(8)式,每组取其中的最大值可得到对应于四个通道的四个D(x,y),并对其进行线性归一化,将四个通道的响应归一化到[0,1]
输出四个归一化后的D(x,y)。
5、最终的轮廓响应为r(x,y),如公式(9)所示,r(x,y)是对步骤4中的D(x,y)取最大值的结果。
以下是我个人对作者代码的理解
流程图如下所示
主要函数功能为
1、
Gaus(sgm)sgm为sigma值,返回一个滤波矩阵
2、
SingleOpponent( map,opponent,sigma,weights )
参数:
opponent
为RG或BY两个值之一,分别代表两对拮抗通道过程:对
R、G、B、Y
四个通道进行滤波,再计算R’+wG’、wR’+G’、B’+wY’、wB’+Y’
,分别对应$$Srg、Sgr、Sby、Syb$$返回:$$Srg、Sgr、Sby、Syb$$
3、
DivGauss2D( sigma,seta ),seta为不通滤波器的朝向,返回一个滤波矩阵
4、
conByfft( img,tpl )
参数:
img
为$$Srg、Sgr、Sby、Syb$$四个其中之一, tpl 为 DivGauss2D( )返回的结果进行归一化过程:对img进行填充、傅里叶及其逆变换等处理
返回:与img相同大小的矩阵,即为$$Drg(θi)、Dgr (θi )、Dby (θi)、Dyb (θi)$$
5、
OrientedDoubleOpponent( map,opponent,sigma,angles,weights )
过程:调用
SingleOpponent()、DivGauss2D()、conByfft()
返回:返回$$Drg、Dgr、Dby、Dyb$$
6、
resDO( map,sigma,angles,weights )
过程:$$Drg、Dgr、Dby、Dyb$$都是xy8(如果angles设为8)的矩阵,即八组$$Drg(θi)、Dgr(θi)、Dby(θi)、Dyb(θi)$$取八组$$Drg(θi)$$数据中每个 (x , y)点对应的最大值作为新的$$CBrg$$其他三组数据相同,其中$$CBrg( : , : )$$是$$Drg$$中的最大值,而Orients(:,:,1)是$$Drg$$中最大值在矩阵中的位置$$CBrg、CBgr、CBby、CByb$$分别代表四个通道得到的边缘矩阵,对每个像素点,取四个通道中的最大边缘值作为
Re ( : , : )
,取该值在原矩阵中对应的angles
值为theta( : , : )
。返回:
Re ( : , : )
和theta( : , : )
矩阵,Re
即为初步的边缘矩阵。
7、
nonmax(im,theta)
参数:
im
为resDO()
的返回值Re进行归一化,theta
为resDO()
的返回值theta进行角度变换过程:A点在方向1上有最大边界值a,而在方向1上相邻的两个点B,C也有计算得到的边界值b,但是a小于等于b,这说明A点的边界比B、C点的边界强度低,那么真正的边界应该是在B或C处取得,所以应该令A点处的边界值为0,这样可以保留最合适的边界点。
返回:返回比输入
im
小一个像素圈大小的边缘矩阵im
8、
COBoundary(map,sigma,angles,weights)
参数:
map
为处理的图像,sigma、angles、weights
为设置的参数(此算法需要设置的所有参数就是这三个) 过程:调用
resDO()、nonmax(),对nonmax()
中得到的im
进行边缘填充0,得到最终的边界矩阵fb
返回:最终的轮廓矩阵
fb
最后,我只想说,格式好难调,文中有些格式确实不好看,还请见谅!
时间: 2024-11-17 18:56:14