我正在寻找一种在matlab中查找3D图像中的形状的方法。我现在没有真正的3D样本图像;事实上,我的3D图像实际上是一组量化的2D图像。
下图是我想要完成的事情:
虽然上面的示例图是2D图像,但请理解我正在尝试以3D形式执行此操作。输入形状具有这些“触手”,我必须寻找不规则形状他们。从一个点到另一个点的触手的大小可以改变,但是以“一致和平滑”的速度改变 - 也就是说它起初可能很大,然后逐渐变小。但是如果突然之间,形状只是逐渐变大,就像上图中的红色右下区域那样,那么这就是其中的一个重要因素。注意,这些形状更倾向于圆形和球形,但是它们中的一些完全是任意的和随机的。
到目前为止,我尝试了以下方法:
侵蚀n次并扩张n次:假设“触手”总是小于感兴趣的体积,只要体积不是太小,这种方法就会起作用。并且,我们需要有一种机制来处理触手的较厚部分,以某种方式变成假阳性。
Hough变换:虽然我之前已经建议过这种方法(来自Segmenting circle-like shapes out of Binary Image),但我发现它适用于一些更圆润的形状,但与此同时,更困难的情况如此那些圆形,扭曲和/或任意形状的形状都可以通过这种方法。
Isosurface:因为我的输入是一组2D量化图像,使用等值面允许我在3D中重建图像并且看得更清楚。但是,我不确定在这种情况下可以做些什么。
那么有人可以提出一些其他技术来从这些“触角”中分割这种形状吗?
答案 0 :(得分:2)
图像上的每个点都具有以下属性:它既可以是触手的一部分,也可以是感兴趣体积的一部分。如果未知apriori触手的预期周长是什么,那么1将无法工作,因为我们将无法设置n。但是,我们知道擦除触手的n小于擦除节点的n。您可以为每个点替换一个表示到边缘距离的整数。实际上,这可以通过连续的单个像素侵蚀来完成,并且用擦除的迭代次数替换每个像素。让我们把它称为像素处的厚度,但我生锈的老头脑告诉我,这里有一个艺术术语。
现在我们要搜索距边界具有高于典型形态距离的区域。我会先通过对图像进行镂空(http://www.mathworks.com/help/toolbox/images/ref/bwmorph.html),然后沿骨架搜索厚度的局部最大值来做到这一点。这些是骨架上厚度大于邻近点的点。
最后,我会根据厚度对局部最大值进行排序,这个阈值应该有助于将感兴趣的体积与误报区分开。