【问题标题】:Compute edge for intensity decreases only仅计算强度降低的边缘
【发布时间】:2014-10-21 09:03:08
【问题描述】:

我想在我的图像中找到边缘,特别是从亮到暗的强度垂直变化。这可能吗?我在 OpenCV 中使用 Canny/Sobel 边缘检测器,但它们会拾取强度增加的边缘,这是我不想要的。

【问题讨论】:

标签: c++ opencv image-processing computer-vision edge-detection


【解决方案1】:

您可以编写自定义过滤器并使用 cvFilter2D(2D 卷积)。

举个很简单的例子,卷积核{1 0 -1;1 0 -1; 1 0 -1} 是一个 3x3 过滤器,可以突出显示从左到右的强度降低。您可以对结果进行阈值化以获得边缘。

您必须选择正确的内核大小以及正确的值,以适合您的图像。

Here 是一个很好的链接,展示了如何使用 cvFilter2d:

【讨论】:

    【解决方案2】:

    一旦您了解了这些过滤器在数学上的作用,就很清楚哪些是必须改变的。这必须在管道中的哪个位置。在他的回答中,Totoro 已经指出您可以通过自己的过滤器来运行。

    Sobel 边缘检测首先在图像上运行两个过滤器。这些过滤器给出了图像在 X 和 Y 方向上的梯度。边缘和梯度的联系方式是,梯度的幅度很大意味着图像中有很多变化,这表明有边缘!

    Sobel 算法的下一步 (iirc) 是求梯度的大小。最后,您将此阈值设置为仅将图像中的较大变化作为边缘。最后,您沿边缘方向进行一些边缘细化和滞后阈值处理,但这在这里不是很重要。

    您想要与 Sobel 算法不同的重要一步是您关心变化的方向。如果您根据 X 和 Y 梯度计算变化方向(使用正弦和余弦),那么您可以过滤掉只在您想要的方向上移动的边缘。

    如果你只关心垂直变化,你可以运行一个卷积核来计算沿水平方向的梯度并且只取正值。所有正值都表示存在从亮到暗的垂直变化。如果您愿意,您可以像 Sobel 一样执行以下处理步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2021-10-14
      • 2016-12-17
      • 1970-01-01
      • 2015-04-24
      • 2012-01-07
      • 1970-01-01
      相关资源
      最近更新 更多