1

我很难实现高斯核的拉普拉斯算子。我有以下代码,我正在尝试使用 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)
4

2 回答 2

2

这个问题已经有三年了,所以我不知道它是否有用,但我在 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))

也应该使用缩放因子来考虑源图像的大小。

于 2015-07-21T08:13:39.713 回答
1

您的代码一开始很难阅读,但对于初学者来说,您有:

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

根据您的公式,什么时候应该是:

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

将某些东西提高到.5实际上是一个平方根。你要找的是倒数,把它提高-1. 此外,您忘记将其设为负数。

于 2012-11-26T20:16:55.493 回答