這是一篇基于視覺顔色機制的邊緣檢測論文,原文分中文和英文版
中文版連結:中文版pdf
英文版連結:英文版pdf
項目首頁:http://www.neuro.uestc.edu.cn/vccl/projcvpr2013.html
整個算法可分為以下幾步:
1、輸入一張彩色圖像
2、 分别提取r-g-b三種顔色資訊,并計算y顔色資訊,進行高斯濾波得到
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYjYwETY1MGMzUmYzcDO1MDO2MjY0QzN4MmMjFTYzYDN4MDOhhzY4gzLcNXZslmZxl3Lc12bj5ycj5Wd5lGbh5ycz92Lc9CX6MHc0RHaiojIsJye.png)
3、設定連接配接權重ω ,通過式(1)得到r+wg和wr+g兩種連接配接權值的的結果
$$
srg、sgr
(ii層中處理),b-y兩個通道類似,可得到四個中間結果
srg、sgr、sby、syb
4、iii層(cortex layer)對ii層中的結果
進行計算,公式如(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、<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>