我想问你关于分水岭3D.我试过这个页面的算法。https:/www.kaggle.comkmaderitk-watershed-to-label-bubbles我还使用了他们的数据集
def apply_watershed(in_vol,
threshold = 0.01,
level = 0.5):
#(A rule of thumb is to set the Threshold to be about 1 / 100 of the Level.)
Dimension = len(np.shape(in_vol))
# convert to itk array and normalize
itk_vol_img = itk.GetImageFromArray((in_vol*255.0).clip(0,255).astype(np.uint8))
InputImageType = itk.Image[itk.ctype('unsigned char'), Dimension]
OutputImageType = itk.Image[itk.ctype('float'), Dimension]
dmapOp = itk.SignedMaurerDistanceMapImageFilter[InputImageType, OutputImageType].New(Input = itk_vol_img)
dmapOp.SetInsideIsPositive(False)
watershedOp = itk.WatershedImageFilter.New(Input=dmapOp.GetOutput())
watershedOp.SetThreshold(threshold)
watershedOp.SetLevel(level)
watershedOp.Update()
return itk.GetArrayFromImage(dmapOp), itk.GetArrayFromImage(watershedOp)
dmap_vol, ws_vol = apply_watershed(bubble_image)
但我得到这个错误。
itk.GetArrayFromImage(watershedOp)
Error: line 248, in _GetArrayFromImage
raise RuntimeError("No suitable template parameter can be found.")
RuntimeError: No suitable template parameter can be found.
这个错误发生在 itk.GetArrayFromImage(watershedOp)
该错误不会发生在 itk.GetArrayFromImage(dmapOp)
.
谢谢你的任何帮助!我想问你关于Watershad3D。
我认为这个错误是因为变量 watershedOp
是一个 ITKWatershedImageFilter
对象,而不是图像。你可以使用 GetOutput()
方法来检索输出图像。
return itk.GetArrayFromImage(dmapOp.GetOutput()), itk.GetArrayFromImage(watershedOp.GetOutput())