вектор 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 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 :: ERROR: фильтр не поддерживает преобразование из вектора преобразования 8-битного целого числа без знака в 32-битное число с плавающей запятой.

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

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


person Shikha    schedule 08.05.2015    source источник
comment
Без проблем. Помните, хорошее форматирование - всегда ваш друг;)   -  person Soner Gönül    schedule 08.05.2015


Ответы (2)


Для ошибки 8-битного целого числа без знака, не поддерживаемого в 2D byclass, вам может потребоваться изменить способ чтения изображения, например:

image = sitk.ReadImage("input.jpg", sitk.sitkInt8)

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

Надеюсь, поможет.

person Aktaruzzaman Aman    schedule 08.12.2018

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

person blowekamp    schedule 09.05.2015