2017-06-02 2 views
5

Je souhaite afficher le fichier DICOM ayant une interprétation photométrique MONOCHROME2.Affichage DICOM monochrome2 ayant des bits stockés inférieurs aux bits alloués

quelques-unes des caractéristiques de l'image sont-

Rows:   1024 
Columns:  1024 
No of Frames: 622 
Bits Allocated: 16 
Bits Stored: 10 
High Bit:  9 
Pixel Representation: 0 
Sample per pixel: 1 

J'utilise gdcmRegionReader pour extraire tableau d'octets de trames unique de la manière suivante.

gdcm.ImageRegionReader _regionReader = new gdcm.ImageRegionReader(); 
_regionReader.SetRegion(_boxRegion); // _boxRegion is some region 
_regionReader.ReadIntoBuffer(Result, (uint)Result.Length); 
Marshal.Copy(Result.ToArray(), 0, _imageData.GetScalarPointer(), 
Result.ToArray().Length); 
_viewer.SetInput(_imageData); // _viewer = vtkImageViewer 

Mais quand j'afficher ce fichier, il affiche comme ça .. MONOCHROME2 dicom when I display using gdcmRegionReader

mais l'image originale est comme ça .. Original Image

Alors quelqu'un peut me aider sur la façon de charger et d'affichage MONOCHROME2 dicom images.

+0

Utilisez-vous une boîte à outils pour afficher l'image? OU Vous voulez simplement afficher l'image sur un contrôle (WinForm, Panal, etc.) à partir d'un tableau d'octets en utilisant C#? –

+0

J'affiche cette image dans un panneau en utilisant VTK. – Namrata

+0

Alors, quel est exactement le problème en faisant cela? Modifiez votre question pour ajouter plus d'informations. C'est la forme actuelle, la question est trop large et difficile à répondre. Rendez-le spécifique. –

Répondre

1

Avertissement: Je ne ai jamais utilisé la boîte à outils en question. J'essaie de répondre en fonction de ma compréhension de DICOM. Dans mon expérience au sujet de DICOM, la syntaxe était rarement le problème. Le vrai problème était le concept et les termes.

Je vois deux problèmes dans la sortie.

Il s'agit d'une partie de l'image rendue. Notez que des données entières ne sont pas rendues dans votre sortie. Vérifiez le document de la boîte à outils pour voir comment définir les dimensions/limites tout en rendant l'image.

Un autre problème concerne la qualité de sortie. Au départ, je pensais que la syntaxe de transfert pourrait être le problème. Je ne pense pas que ce soit mais assurez-vous que vous êtes intransigeant l'image avant le rendu. Je ne suis pas sûr de savoir comment votre toolkit gère la compression lors du rendu.

Il existe un autre moyen de rendre les données de pixels dans le toolkit.

_ImageViewer.SetRenderWindow(renderWindow); 
_ImageViewer.GetRenderer().AddActor2D(sliceStatusActor); 
_ImageViewer.GetRenderer().AddActor2D(usageTextActor); 
_ImageViewer.SetSlice(_MinSlice); 
_ImageViewer.Render(); 

code ci-dessus est copié de "http://www.vtk.org/Wiki/VTK/Examples/CSharp/IO/ReadDICOMSeries". Le code détaillé est disponible là.

liens peuvent aussi être utiles:
http://vtk.1045678.n5.nabble.com/How-to-map-negative-grayscale-to-color-td5737080.html

https://www.codeproject.com/Articles/31581/Displaying-bit-Images-Using-C

+0

Merci Amit! J'ai changé le type scalaire de données d'image à court et maintenant le problème est résolu. – Namrata

1

Vous devriez vraiment utiliser vtkGDCMImageReader2 à la place dans votre code. vtkGDCMImageReader2 encapsule précisément gdcm::RegionReader pour la liaison avec VTK.

Si, pour une raison quelconque, vous ne pouvez pas utiliser directement cette classe, il vous suffit de copier/coller le code C++ depuis la fonction principale dans votre code C#.

Voir:

+0

remercie Malat pour une réponse rapide! J'ai utilisé vtkImageViewer2 à des fins de rendu et le problème est résolu. Et le type scalaire de ImageData devrait être court. – Namrata