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颜色信息,进行高斯滤波得到screenshot


3、设置连接权重ω ,通过式(1)得到R+wG和wR+G两种连接权值的的结果 Srg、Sgr(II层中处理),B-Y两个通道类似,可得到四个中间结果Srg、Sgr、Sby、Syb


screenshot


4、III层(Cortex layer)对II层中的结果Srg、Sgr、Sby、Syb 进行计算,公式如(6)所示:


screenshot

其中:Sr-g+=-Sr+g- ,Nr+g-、Nr-g+ 分别表示V1层神经元R-on/G-off 和 R-off/G-on的RF(由公式(3)(4)(5)得到的RF)。

screenshot



screenshot


取分母为16,则θi取[0,2π]之间相隔π/8的16个角度,由(6)式会得到16个screenshot结果,对应于16(程序中只用到了8个角,0到π)个不同朝向θi的滤波器结果,这个D(x,y)是对四个拮抗通道其中之一进行计算的结果,所以,四个通道会得到四组相应的D(x,y)。


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


screenshot


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


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


screenshot


以下是我个人对作者代码的理解

流程图如下所示


screenshot


主要函数功能为


1、Gaus(sgm)sgm为sigma值,返回一个滤波矩阵


2、SingleOpponent( map,opponent,sigma,weights )
参数:opponent为RG或BY两个值之一,分别代表两对拮抗通道
过程:对R、G、B、Y四个通道进行滤波,再计算R’+w*G’、w*R’+G’、B’+w*Y’、w*B’+Y’,分别对应Srg、Sgr、Sby、Syb
返回:Srg、Sgr、S by、Syb


3、DivGauss2D( sigma,seta ),seta为不通滤波器的朝向,返回一个滤波矩阵


4、conByfft( img,tpl )
参数:img为Srg、Sgr、Sby、Syb四个其中之一, tpl 为 DivGauss2D( )返回的结果进行归一化
过程:对img进行填充、傅里叶及其逆变换等处理
返回:与img相同大小的矩阵,即为Drgi)、Dgri )、Dbyi)、Dybi)


5、OrientedDoubleOpponent( map,opponent,sigma,angles,weights )
过程:调用SingleOpponent()、DivGauss2D()、conByfft()
返回:返回Drg、Dgr、Dby、Dyb


6、resDO( map,sigma,angles,weights )
过程:Drg、Dgr、Dby、Dyb都是x*y*8(如果angles设为8)的矩阵,即八组Drgi)、Dgri )、Dbyi)、Dybi)取八组Drgi)数据中每个 (x , y)点对应的最大值作为新的CBrg其他三组数据相同,其中CBrg( : , : )是Drg中的最大值,而Orients(:,:,1)是Drg中最大值在矩阵中的位置CBrg、CBgr、CBby 、CByb分别代表四个通道得到的边缘矩阵,对每个像素点,取四个通道中的最大边缘值作为 Re ( : , : ) ,取该值在原矩阵中对应的angles值为theta( : , : )
返回:Re ( : , : )theta( : , : )矩阵,Re即为初步的边缘矩阵。


7、nonmax(im,theta)
参数:imresDO()的返回值Re进行归一化,thetaresDO()的返回值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


最后,我只想说,格式好难调,文中有些格式确实不好看,还请见谅!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值