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

C# 不支持8位无符号整数的向量,c#,c++,itk,image-formats,C#,C++,Itk,Image Formats,我正在尝试使用简单的itk托管dll在.bmp图像上应用CannyEdge DetectionImageFilter 这是我的密码: itk.simple.Image image1= SimpleITK.ReadImage("Input.bmp"); ImageFileReader read = new ImageFileReader(); read.SetFileName("Input.bmp"); read.Execute(); CannyEdgeDetectionImageFilter

我正在尝试使用简单的itk托管dll在.bmp图像上应用CannyEdge DetectionImageFilter

这是我的密码:

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中受支持

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

下面是对我的代码的一些补充。我尝试将8位无符号整数的向量转换为支持的向量,但在这里我失败了

CastImageFilter cast = new CastImageFilter();
PixelIDValueEnum p= cast.GetOutputPixelType();
image1= SimpleITK.Cast(image1, p);//I got below exception here.
sitk::错误:筛选器不支持从的强制转换向量强制转换 8位无符号整数到32位浮点

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


非常感谢您的帮助。

有几种方法可以将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过滤器。

对于2D byclass中不支持的8位无符号整数错误,您可能需要在读取图像时更改方式,如:

image=sitk.ReadImage(“input.jpg”,sitk.sitkInt8)

现在
sitk.CurvatureFlow
imgWhiteMatter=sitk.ConnectedThreshold
可以工作了


希望有帮助。

没问题。记住,好的格式总是你的朋友;)