天天看點

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>

繼續閱讀