2015-05-08 13 views
5

Sto tentando di applicare CannyEdgeDetectionImageFilter su un'immagine .bmp utilizzando la dll gestita da Simple-itk.Il vettore di numero intero senza segno a 8 bit non è supportato

Ecco il mio codice:

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); 

ho avuto questa eccezione durante l'esecuzione CannyEdgeDetectionImageFilter.

sitk::ERROR: Pixel type: vector of 8-bit unsigned integer is not supported in 2D byclass itk::simple::CannyEdgeDetectionImageFilter

Come posso trasmettere questa cosa non supportata a supportata per simpleitk?

Ecco alcune domande sul mio codice. Ho provato a trasmettere il vettore di interi senza segno a 8 bit in quello supportato, ma qui non riesco a farlo.

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

sitk::ERROR: Filter does not support casting from casting vector of 8-bit unsigned integer to 32-bit float

C'è qualcos'altro che potrei fare per lavorare questo codice?

Qualsiasi aiuto è apprezzato.

+0

@Soner: Grazie :) – Shikha

+0

Nessun problema. Ricorda, una buona formattazione è sempre tua amica;) –

risposta

0

Ci sono un paio di modi per applicare un filtro Canny a un'immagine RGB. (Presumo che sia un'immagine RGB?)

Ci sono molti modi per convertire un'immagine multicomponente in un'immagine scalare. Un cast semplice non è ben definito. Potrebbe significare Luminanza, magnitudine vettoriale ecc ...

Un'opzione è di eseguire l'algoritmo indipendentemente su ciascun canale dell'immagine e ottenere un'immagine con bordo rosso, un'immagine bordo blu e un'immagine bordo verde. Ecco alcuni pseudo codice:

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) 

In alternativa, è possibile che si desideri un'immagine di bordo scalare. È possibile derivare la Luminanza, la Luminosità o la Luminosità dai canali RGB e quindi eseguire il filtro Canny una sola volta.