[使用另一个过滤器解决了该问题,请参阅底部的更新。]
我正在使用 C++ 和 ITK,我有一张灰度图像,代表腰椎的骨骼图。我正在尝试使用 Canny 过滤器检测它的边界:为此,我使用了官方 ITK 指南中的Canny 过滤器实现(我按原样使用该代码,所以我不在这里粘贴它)。如您所见,输入图像非常简单,这样提取其轮廓应该不难。
我期待一个完全黑色的输出图像,除了骨骼的边界,应该是一个闭合曲线。但是,ITK 产生的结果如右图所示,由多个“同心”边框组成。
你如何解释这个结果?您对该算法的情况有正式的解释吗?我试图修改过滤器的参数(方差、upperThresold 和 lowerThresold),但没有运气。一些参数组合给出了一个完全黑色的图像,并且没有一个比这个更好。
更新:正如说明,我使用“梯度幅度过滤器”解决了问题。使用该过滤器,我可以获得轮廓的明确形状。所以,这个问题对我来说不再重要,但我保持开放状态,只是为了好奇。如果您对 Canny 过滤器的行为有任何想法,我可以对其进行测试。