gpt4 book ai didi

高斯边缘检测拉普拉斯算子的Python实现

转载 作者:太空狗 更新时间:2023-10-29 18:05:26 25 4
gpt4 key购买 nike

我正在寻找高斯边缘检测的拉普拉斯算子的等效实现。

在matlab中我们使用下面的函数

   [BW,threshold] = edge(I,'log',...)

在python中有一个计算高斯拉普拉斯算子的函数。它并没有明确地归还边缘。

  scipy.ndimage.filters.gaussian_laplace

任何指向在线实现或代码的指针

谢谢

最佳答案

matlab edge() 应该做什么

  1. 计算日志
  2. 计算 LoG 上的零交叉
  3. 计算局部 LoG 差异的阈值
  4. 边缘像素=过零&&局部差异>阈值

scipy 的 LoG filter 只做上面的第 1 步。我实现了以下代码片段来模仿上面的步骤 2~4:

import scipy as sp
import numpy as np
import scipy.ndimage as nd
import matplotlib.pyplot as plt
from skimage import data

# lena = sp.misc.lena() this function was deprecated in version 0.17
img = data.camera() # use a standard image from skimage instead
LoG = nd.gaussian_laplace(img , 2)
thres = np.absolute(LoG).mean() * 0.75
output = sp.zeros(LoG.shape)
w = output.shape[1]
h = output.shape[0]

for y in range(1, h - 1):
for x in range(1, w - 1):
patch = LoG[y-1:y+2, x-1:x+2]
p = LoG[y, x]
maxP = patch.max()
minP = patch.min()
if (p > 0):
zeroCross = True if minP < 0 else False
else:
zeroCross = True if maxP > 0 else False
if ((maxP - minP) > thres) and zeroCross:
output[y, x] = 1

plt.imshow(output)
plt.show()

这当然很慢,而且可能不是惯用的,因为我也是 Python 的新手,但应该展示这个想法。也欢迎任何关于如何改进它的建议。

关于高斯边缘检测拉普拉斯算子的Python实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22050199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com