2

我正在寻找一种在 matlab 中查找 3D 图像中的形状的方法。我现在没有真正的 3D 示例图像;事实上,我的 3D 图像实际上是一组量化的 2D 图像。

下图是我想要完成的:

在此处输入图像描述

虽然上面的示例图是 2D 图像,但请理解我试图在 3D 中执行此操作。输入形状有这些“触手”,我必须在其中寻找不规则形状。触手的大小从一个点到另一个点可以变化,但以“一致和平滑”的速度变化——也就是说它一开始可能很大,然后逐渐变小。但如果突然,形状只是变大而不是逐渐变大,就像上图中的红色右下角区域,那么这就是感兴趣的体积之一。请注意,这些形状更倾向于圆形和球形,但其中一些是完全任意和随机的。

到目前为止,我已经尝试了以下方法:

  1. n 次腐蚀和 n 次扩张:考虑到“触手”总是小于感兴趣的体积,只要体积不太小,这种方法就可以工作。而且,我们需要有一种机制来处理以某种方式变成误报的触手的较粗部分。

  2. Hough 变换:虽然我之前已经建议过这种方法(来自Segmenting circle-like shapes out of Binary Image),但我发现它适用于一些更圆形的情况,但同时,更困难的情况是不那么圆润、扭曲和/或任意形状可能会通过这种方法。

  3. 等值面:因为我的输入是一组 2D 量化图像,所以使用等值面可以让我重建 3D 图像并看得更清楚。但是,我不确定在这种情况下可以进一步做些什么。

那么任何人都可以提出一些其他技术来从这些“触手”中分割出这种形状吗?

4

1 回答 1

2

图像上的每个点都有一个属性,即它要么是触手的一部分,要么是感兴趣的体积的一部分。如果事先不知道预期的触手周长是多少,那么 1 将不起作用,因为我们将无法设置 n。但是,我们知道擦除触手的 n 小于擦除节点的 n。您可以将每个点替换为表示到边缘距离的整数。实际上,这可以通过连续的单个像素侵蚀来完成,并将每个像素替换为它被擦除的迭代计数。让我们称之为像素的厚度,但我生锈的老头脑告诉我,这有一个艺术术语。

现在我们要搜索距边界具有高于典型形态距离的区域。我会通过首先骨架化图像(http://www.mathworks.com/help/toolbox/images/ref/bwmorph.html)然后沿着骨架搜索局部最大厚度来做到这一点。这些是骨架上厚度大于相邻点的点。

最后,我将按厚度对局部最大值进行排序,这是一个阈值,有助于将感兴趣的体积与误报区分开来。

于 2011-08-15T22:32:34.253 回答