【问题标题】:Python Implementation of MATLAB's Canny FilterMATLAB 的 Canny 滤波器的 Python 实现
【发布时间】:2015-07-28 18:14:04
【问题描述】:

在 MATLAB 中调用以下函数将 Canny 过滤器应用于图像:

edges = edge(image, 'Canny');

我知道有两个 Python 函数可以实现 Canny 过滤器:

import cv2

edges = cv2.Canny(image)

from skimage import feature

edges = feature.canny(image)

但是,这些 Python 函数都不能像 MATLAB 那样计算滤波器的高阈值和低阈值。根据this neuroimaging paper

。 . .默认的 MATLAB 算法 [生成] 两个阈值,使得高阈值被计算为不超过 30% 的像素被检测为边缘的最低值,而低阈值定义为高阈值的 40% .

是否有 Python 实现可以做到这一点?

【问题讨论】:

  • scikit-image 源在这里:github.com/scikit-image/scikit-image/blob/master/skimage/… 应该很容易适应做你想做的事。
  • @StefanvanderWalt 你们会对这样的拉取请求感兴趣吗?有很多 matlab 用户正在过渡到 python,所以我认为对此有相当广泛的需求,但如果你不希望没有独立理由的情况下复制 matlab 的代码,我会理解。
  • 我认为如果这是一个有用的功能,我们没有理由不实施它。这样做时请注意不要查看使用不同许可编写的任何代码。

标签: python matlab opencv image-processing scikit-image


【解决方案1】:

您应该先将 Canny 参数传递给canny(),然后在您的 Python 代码中运行它

我:图片名称
下限:
上限:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('lena.png')
edges = cv2.Canny(img,....,....,L2gradient=False/True)

plt.imshow(edges,cmap='gray')
plt.show()

【讨论】:

  • 感谢您的贡献!我已编辑您的答案以使用正确的格式。你可以随时edit你的答案来进一步改进它。请看一下我对格式所做的操作,并记下它以供您下一个答案。您可以使用 Markdown 的子集进行格式化。编辑器窗口顶部的按钮也将插入这些格式元素。退出时我有点做错了,请随时修复它!
  • 我不明白这是如何回答问题的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
相关资源
最近更新 更多