Я пытаюсь применить 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-разрядного числа с плавающей запятой
Что-нибудь еще, что я мог сделать, чтобы работать с этим кодом?
Любая помощь приветствуется.
Есть несколько способов применить фильтр 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 только один раз.
8-битное целое число без знака не поддерживается в 2D-подклассе
вам нужно решить проблему, пока вы читаете изображение
image = sitk.ReadImage (‘AAT137 B7.jpg’, sitk.sitkInt8) # ‘AAT137 B7.jpg’ — это файл изображения в каталоге
Теперь sitk.CurvatureFlow, imgWhiteMatter = sitk.ConnectedThreshold все будет работать
надеюсь, это поможет