【问题标题】:Identifying gradient filled region识别渐变填充区域
【发布时间】:2012-03-02 01:58:57
【问题描述】:

我之前问过一个相关问题:Image segmentations with gradient filled regions

但这一次,我有一个更简单的问题(我认为)。给定一个区域(一组像素),我想知道它是否填充了线性渐变。为此,我想到了使用 3X3 sobel 滤波器找出 x 和 y 方向的图像梯度,然后检查梯度方向。如果该方向保持不变,则该区域可归类为梯度填充区域。

它适用于水平和垂直方向的渐变,但不适用于一般情况。例如,对于 45 度的线性渐变,渐变的方向在 1 到 3 之间的相邻像素上似乎变化很大。

我无法理解为什么会发生这种情况以及如何解决它。理论上,它应该在任何地方都是 1。

【问题讨论】:

  • 如果您根据后续的彩色线条来考虑渐变,您会发现绘制一条非直线(旋转)需要一个或多个分段。不是在现实世界中,我的意思是,但图像中的像素是有限的。

标签: image-processing


【解决方案1】:

Wikipedia 说:

Sobel 算子在减少与纯中心差分算子相关的伪影的同时,不具有完美的旋转对称性。 Scharr 研究了优化这个属性。那里已经展示了大小为 5 x 5 的过滤器内核,但最常用的是...

这是 Sharr 的论文,学习愉快 :) http://archiv.ub.uni-heidelberg.de/volltextserver/volltexte/2000/962/pdf/Diss.pdf

【讨论】:

  • 有英文版吗?
  • 不知道,你可以问作者或使用翻译,即使他们表现不佳
【解决方案2】:

您的想法是对的,只需在计算空间导数时使用高斯滤波器。 最后,通过选择方向图梯度大小的暗像素,得到梯度填充区域。

编辑 维基百科文章Gaussian filters

在我的代码中,我使用以下卷积核(水平导数,然后是垂直导数):

{
 {0.00623304, 0.012975, 0., -0.012975, -0.00623304},
 {0.0259501, 0.054019, 0., -0.054019, -0.0259501},
 {0.0581332, 0.121013, 0., -0.121013, -0.0581332},
 {0.0259501, 0.054019, 0., -0.054019, -0.0259501},
 {0.00623304, 0.012975, 0., -0.012975, -0.00623304}
}

{
 {0.00623304, 0.0259501, 0.0581332, 0.0259501, 0.00623304},
 {0.012975, 0.054019, 0.121013, 0.054019, 0.012975},
 {0., 0., 0., 0., 0.},
 {-0.012975, -0.054019, -0.121013, -0.054019, -0.012975},
 {-0.00623304, -0.0259501, -0.0581332, -0.0259501, -0.00623304}
}

作为概念证明,这就是它在 Mathematica 中的外观,使用包含倾斜梯度区域和垂直梯度区域的测试图像:

【讨论】:

  • 我不懂mathmatica,所以我不太了解,但我能感觉到你的建议。到目前为止,我已经尝试在应用 sobel 滤波器之前使用高斯模糊平滑原始图像,但这并不能解决我的问题。你是在暗示一些不同的东西吗?另外,您的图像似乎使用了水平或垂直方向的渐变,您是否尝试过使用 45 度的角度渐变?
  • 您会看到图像包含倾斜和垂直渐变填充区域。我已经编辑了答案以添加卷积核。你可以在你喜欢的卷积引擎中使用它们。
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多