Efficient Color Boundary Detection with Color-opponent Mechanisms算法学习笔记-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

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

简介: 这是一篇基于视觉颜色机制的边缘检测论文,原文分中文和英文版 中文版链接:中文版PDF 英文版链接:英文版PDF 项目主页:http://www.neuro.uestc.edu.cn/vccl/projcvpr2013.html 以下是我个人学习该算法后的理解,希望各位看官批评指正! 整

这是一篇基于视觉颜色机制的边缘检测论文,原文分中文和英文版
中文版链接:中文版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、Sby、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$$

都是xy8(如果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


最后,我只想说,格式好难调,文中有些格式确实不好看,还请见谅!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章