从图像中分割相似强度的对象
我正在用Python和C++处理医学图像的分割,特别是CT扫描。我已经成功地通过阈值处理、区域生长和形态学操作,去掉了图像中的骨头、空气和脂肪。现在主要的问题是如何把重要器官和肌肉分开,因为它们的亮度非常相似,而且常常紧挨在一起。
比如,在下面的图像中,可以看到一段肠道和腹壁肌肉是相连的:
我想要的分割结果是这样的:
另外一个可以接受的分割结果是这样的:
我的问题是:我应该使用什么样的分割算法才能达到想要的效果?到目前为止,我尝试过:
- 阈值处理:不行,因为这两个区域的亮度太相似了。
- 区域生长:不行,因为要分割的区域是“相连”的。
- Canny滤波器:在较大的sigma值下找不到边缘,在较小的sigma值下边缘又不连贯。
- 分水岭变换:导致图像过度分割,合并区域没有明确的标准。
- 主动轮廓:无法找到两个物体之间合适的边界。
任何建议都非常感谢。
阈值处理滤波器
Canny滤波器
分水岭变换
1 个回答
我觉得提取这些物体之间的边缘可以解决这个问题。因为在图像中,边缘是可以被人眼看到的,所以我会尝试使用高通滤波器/梯度检测,来在进行其他算法之前先锐化边缘。这是一个预处理步骤。之后,可能还需要进行一些膨胀/腐蚀操作,以便闭合物体的边缘或者去掉不必要的杂物,然后再进行区域填充,这样就能完成任务了。
另一个选择是霍夫变换,它可能能够提取出那个边缘,因为它可以提取出一些细微的特征(Mathworks的例子:http://www.mathworks.com/help/images/detect-lines-in-images.html)。
你还可以尝试阈值变换的变体,把图像分成子集(小方块),然后根据每个子集中像素的灰度值计算一个系数(比如平均灰度值)。因为其中一个物体整体上稍微亮一点,这样可能会有效——这两个物体在局部上是相似的,但在整体上是不同的。你需要调整子集的大小和阈值(也就是系数值)。
编辑:我刚看到你上传的图片。对使用sigma=1的Canny边缘检测结果进行一些膨胀,然后再进行腐蚀,这样能解决问题吗?这会闭合边缘,从而分离物体——虽然不一定100%准确,但可以在一定程度上分开这两个区域,同时保持形状。