2012-11-26 65 views
0

我很難實現高斯內核的拉普拉斯算子。我有以下代碼,我試圖實現一個sigma = 1.4的9x9內核。內核顯示該鏈接高斯內核的普通拉普拉斯算子

http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm

然而,我的價值觀是什麼像那些在內核上,我想我的功能關閉。幫助將不勝感激。謝謝。

import math 
pi= math.pi 
log = [[0 for x in range(9)] for x in range(9)] 
def genlog(log,size,o): 
    for i in range(-size/2,size/2): 
     for j in range(-size/2,size/2): 
      log[i][j] = -(pi*o**4)**(-1)*(1-(i**2+j**2)/(2*o**2))*math.exp(-(i**2+j**2)/(2*o**2)) 
def printlog(log,size): 
    for i in range(-size/2,size/2): 
     print ' '.join(str(log[i][j]) for j in range(-size/2,size/2)) 

genlog(log,9,1.4) 
printlog(log,9) 
+2

我不知道。你的代碼有哪些*錯誤?它以什麼方式不起作用? (順便說一句,你可能想用[numpy的(http://numpy.scipy.org/)做這個。) – Iguananaut

+0

此外,這並沒有真正回答你的問題,因爲它可能是你致力於將此作爲一項很好的練習來實施。但是如果它是用於生產的話,你可能想要考慮這個已經在scipy中的實現:http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.gaussian_laplace.html#scipy。 ndimage.filters.gaussian_laplace – Iguananaut

+0

我需要登錄內核,不需要內建功能 – NamPNQ

回答

1

你的代碼是非常難讀來開始的,但對於初學者來說,你必須:

log[i][j] = (pi*o**4)**.5*... 

當它應該是,根據公式:

log[i][j] = -(pi*o**4)**(-1)*... 

籌集到.5實際上是一個平方根。你正在尋找的是相反的,提高了-1。此外,你忘了讓它消極。

+0

對不起,我不得不改變我的代碼,導致不正確的,你能不能幫我 – NamPNQ

+0

@NamPNQ我不知道你的意思是什麼。 – jdotjdot

+0

我想發送兩個參數(尺寸,Sigma)和返回拉普拉斯高斯內核像http://homepages.inf.ed.ac.uk/rbf/HIPR2/figs/logdisc.gif – NamPNQ

0

問題是neraly三十歲,所以我不知道,如果它是有用的,但我實現了引算法在excel中,發現你的函數應所著這樣:

log[i][j] = (-1)/(pi*o**4)*(1-(i**2+j**2)/(2*o**2))*math.exp(-(i**2+j**2)/(2*o**2)) 

縮放因素也應該用來說明源圖像的大小。