不支持8位无符号整数的向量

时间:2015-05-08 07:40:21

标签: c# c++ itk image-formats

我正在尝试使用Simple-itk托管的dll在.bmp图像上应用CannyEdgeDetectionImageFilter。

这是我的代码:

itk.simple.Image image1= SimpleITK.ReadImage("Input.bmp");

ImageFileReader read = new ImageFileReader();
read.SetFileName("Input.bmp");
read.Execute();

CannyEdgeDetectionImageFilter canny = new CannyEdgeDetectionImageFilter();
itk.simple.Image image2= canny.Execute(image1);//I got below exception here.

ImageFileWriter write = new ImageFileWriter();
write.SetFileName("Output.bmp");
write.Execute(image2,"Output.bmp", true);

我在执行CannyEdgeDetectionImageFilter时遇到了这个异常。

  

sitk ::错误:像素类型:8位无符号整数的向量不是   支持2D byclass itk :: simple :: CannyEdgeDetectionImageFilter

如何将此不受支持的内容转换为支持simpleitk?

这是对我的代码的一些补充。我试图将8位无符号整数的向量转换为支持的整数,但是在这里我没有做到这一点。

CastImageFilter cast = new CastImageFilter();
PixelIDValueEnum p= cast.GetOutputPixelType();
image1= SimpleITK.Cast(image1, p);//I got below exception here.
  

sitk ::错误:过滤器不支持从投射向量转换   8位无符号整数到32位浮点数

我还能做些什么来处理这段代码吗?

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

有几种方法可以将Canny滤镜应用于RGB图像。 (我认为它是一个RGB图像?)

将多组件图像转换为标量图像的方法有很多种。一个简单的演员表没有很好的定义。它可能意味着亮度,矢量幅度等......

一种选择是在图像的每个通道上独立运行算法,并获得红色边缘图像,蓝色边缘图像和绿色边缘图像。这是一些伪代码:

for i in range(rgbimage.GetNumberOfComponentsPerPixel()):
   component_image = sitk.VectorIndexSelectionCast(rgbimage, i, sitk.sitkFloat32)
   edge_images[i] = sitk.CanneyEdgeDetection(component_image)

edge_image = sitk.Compose(edge_images)

或者,您可能需要标量边缘图像。你可以从RGB通道中获得亮度,亮度或亮度,然后只运行一次Canny过滤器。

答案 1 :(得分:0)

2D按类不支持8位无符号整数

阅读图像时需要解决问题 image = sitk.ReadImage('AAT137 B7.jpg',sitk.sitkInt8)#'AAT137 B7.jpg'是目录中的图像文件

现在,sitk.CurvatureFlow,imgWhiteMatter = sitk.ConnectedThreshold都可以使用

希望有帮助