c # — вектор 8-битного целого числа без знака не поддерживается

Я пытаюсь применить CannyEdgeDetectionImageFilter к изображению .bmp, используя dll, управляемую Simple-itk.

вот мой код:

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 :: ERROR: Тип пикселя: вектор 8-разрядного целого числа без знака не
поддерживается в 2D-классе itk :: simple :: CannyEdgeDetectionImageFilter

Как я могу преобразовать эту неподдерживаемую вещь в поддерживаемую для simpleitk?

Вот некоторые дополнения к моему коду. Я пытался преобразовать вектор 8-разрядного целого числа без знака в поддерживаемое, но здесь я не могу этого сделать.

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

sitk :: ERROR: фильтр не поддерживает приведение из вектора приведения
8-разрядное целое число без знака до 32-разрядного числа с плавающей запятой

Что-нибудь еще, что я мог сделать, чтобы работать с этим кодом?

Любая помощь приветствуется.

5

Решение

Есть несколько способов применить фильтр 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 только один раз.

0

Другие решения

8-битное целое число без знака не поддерживается в 2D-подклассе

вам нужно решить проблему, пока вы читаете изображение
image = sitk.ReadImage (‘AAT137 B7.jpg’, sitk.sitkInt8) # ‘AAT137 B7.jpg’ — это файл изображения в каталоге

Теперь sitk.CurvatureFlow, imgWhiteMatter = sitk.ConnectedThreshold все будет работать

надеюсь, это поможет

0

По вопросам рекламы [email protected]