algorithm - 中轴变换实现

标签 algorithm image-processing computer-vision ocr

我如何实现 Medial Axis Transform将第一张图像转换为第二张图像的算法?

thinning-L.gif
(来源:algorith at www.cs.sunysb.edu)

thinning-R.gif
(来源:algorith at www.cs.sunysb.edu)

C++/C# 中的哪些库支持中轴变换?

最佳答案

在互联网上有很多中轴变换的实现(我个人不使用 OpenCV 库,但我确信它有一个不错的实现)。但是,您可以轻松地自己实现它。

为了进行中轴变换,我们只需要定义一个术语:简单点。 点 (P) 是简单点,当且仅当删除 P 不会影响前景或背景的连通分量的数量。所以,你必须决定 connectivity (4 或 8)用于背景和前景 - 为了工作,为两者选择不同的一个(如果您对原因感兴趣,请在 google 上查找 Jordan property)。

Examples for simple and non-simple points

可以通过依次删除简单点来实现内侧变换轴。如果没有更多的简单点,您将得到最终的骨架。如果您只有端点或非简单点,您会得到弯曲的骨架(我不知道它的英文名称很少见 - 请纠正我)。您在问题中提供了后者的示例。

使用 morphological operators 可以很容易地找到简单的点或查找表。提示:当且仅当在 3x3 局部窗口中背景中的连通分量数为 1 且前景中的连通分量数为 1 时,点是单点。

关于algorithm - 中轴变换实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7156080/

相关文章:

python-3.x - 贪心算法和时间复杂度#2

c - 没有 OpenCV 的开源 PSNR/SSIM C 实现?

algorithm - 多核 - 如何合并在每个核心上找到的本地数据组?

image-processing - 放大黑线的阈值

opencv - 减少行人检测中的错误检测

algorithm - 如何实现推荐引擎?

java - 卷积 - 计算矢量化图像的相邻元素索引

algorithm - 使用变换矩阵围绕任意点旋转

python - 为什么输出只包含 2 个值而不包含整个图像的位移?

opencv - 如何提高 cv2.dnn.readNetFromCaffe() 的 net.forward() 性能,net.forward 需要更多时间(7 到 10 秒/帧)才能给出结果