【问题标题】:Laplacian with different kernel不同内核的拉普拉斯算子
【发布时间】:2014-04-26 09:42:06
【问题描述】:

我使用 python 代码来查找仅具有一般内核 = 1 的图像的拉普拉斯算子(使用 cv2)。现在我想使用一个新内核array([0,-1,0][-1,5,-1][0,-1,0]),但不确定如何使用我拥有的代码来实现它,或者如何编写调用内核的新代码。

ksize = 1
scale = 1
delta = 0
ddepth = cv2.CV_64F

img = cv2.imread('/Users//Desktop/Programming/image.tif')
img = cv2.GaussianBlur(img,(3,3),0)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

gray_lap = cv2.Laplacian(gray,ddepth,ksize = ksize,scale = scale,delta = delta)
dst = cv2.convertScaleAbs(gray_lap)

plt.imshow(dst, cmap = 'gray')

【问题讨论】:

    标签: python kernel laplacian


    【解决方案1】:

    我不熟悉 Python 的 OpenCV 绑定,但对于自定义卷积内核,您需要 filter2D。自己将内核构建为 3x3 数组。 This tutorial 在 C++ 中,但看起来很有帮助。

    【讨论】:

      【解决方案2】:

      https://dsp.stackexchange.com/questions/44928/what-does-derivative-means-in-image-processing/44930

      就拉普拉斯算子在将二阶导数归零方面所做的工作提供了一些背景知识。那里也列出了常用的拉普拉斯内核,但我认为它必须总和为零,因为你提到的 array([0,-1,0][-1,5,-1][0,-1,0]) 的内核不是,而是总和为 1。拉普拉斯算子与你的最相似的内核是 [[0,1,0],[1,-4,1],[0,1,0]]二维图像。此外,图像的二阶导数对噪声非常敏感,因此可以首先应用高斯模糊,在这种情况下,可以将生成的滤波器视为 LoG(高斯的拉普拉斯算子)。我自己开始学习这个,但这里有一个很好的资源:@​​987654322@

      代码示例如下:

      gblur = cv2.GaussianBlur(image, (3,3), 0)
      
      l_kernel = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
      
      temp = cv2.filter2D(gblur, -1, laplacian_kernel)
      cv2.imshow('temp', temp)
      

      【讨论】:

      • 事实上任何模糊首先。我发现一个简单的框模糊要快得多,结果也不会更糟。虽然取决于您正在做什么,预模糊可能不像通常所说的那样必要。
      • @hippietrail,很高兴知道速度是实时视频之类的一个因素。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2011-02-02
      • 1970-01-01
      相关资源
      最近更新 更多