首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fo-dicom中使用灰度软拷贝表示状态

在fo-dicom中使用灰度软拷贝表示状态
EN

Stack Overflow用户
提问于 2020-04-09 08:31:36
回答 1查看 800关注 0票数 1

我想添加标记到DICOM图像(例如,图纸或文字注释)使用灰度软拷贝表示状态IOD。

我创建了一个DICOM图像对象,如下所示:

代码语言:javascript
复制
Bitmap bitmap = new Bitmap(path);
            bitmap = GetValidImage(bitmap);
            int rows, columns;
            byte[] pixels = GetPixels(bitmap, out rows, out columns);

            MemoryByteBuffer buffer = new MemoryByteBuffer(pixels);
            DicomDataset imageDataset = new DicomDataset();
            FillDataset(imageDataset);
            DicomDataset annotationdataset = new DicomDataset();
            FillAnnotation(imageDataset, annotationdataset);

            imageDataset.Add(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Rgb.Value);
            imageDataset.Add(DicomTag.Rows, (ushort)rows);
            imageDataset.Add(DicomTag.Columns, (ushort)columns);
            imageDataset.Add(DicomTag.BitsAllocated, (ushort)8);

            DicomPixelData pixelData = DicomPixelData.Create(imageDataset, true);
            pixelData.BitsStored = 8;
            pixelData.SamplesPerPixel = 3;
            pixelData.HighBit = 7;
            pixelData.PixelRepresentation = 0;
            pixelData.PlanarConfiguration = 0;
            pixelData.AddFrame(buffer);



            DicomFile dicomfile = new DicomFile(imageDataset);
            if (File.Exists("test.dcm"))
                File.Delete("test.dcm");
            dicomfile.Save("test.dcm");

然后,我创建了一个灰度软拷贝表示状态对象,如下所示:

代码语言:javascript
复制
private static void FillAnnotation(DicomDataset imageDataset, DicomDataset annotationDataset)
        {
            //type 1 attributes.
            annotationDataset.Add(DicomTag.SOPClassUID, DicomUID.GrayscaleSoftcopyPresentationStateStorage);
            annotationDataset.Add(DicomTag.StudyInstanceUID, _studyInstanceUid);
            annotationDataset.Add(DicomTag.SeriesInstanceUID, _seriesInstanceUID);
            annotationDataset.Add(DicomTag.SOPInstanceUID, GenerateUid());

            //type 2 attributes
            annotationDataset.Add(DicomTag.PatientID, _patientId);
            annotationDataset.Add(DicomTag.PatientName, _patientName);
            annotationDataset.Add(DicomTag.PatientBirthDate, _patientBirthDate);
            annotationDataset.Add(DicomTag.PatientSex, _patientSex);
            annotationDataset.Add(DicomTag.StudyDate, _studyDateTime);
            annotationDataset.Add(DicomTag.StudyTime, _studyDateTime);
            annotationDataset.Add(DicomTag.AccessionNumber, _accessionNumber);
            annotationDataset.Add(DicomTag.ReferringPhysicianName, _referringPhysicianName);
            annotationDataset.Add(DicomTag.StudyID, _studyID);
            annotationDataset.Add(DicomTag.SeriesNumber, _seriesNumber);
            //annotationDataset.Add(DicomTag.ModalitiesInStudy, "CR");
            annotationDataset.Add(DicomTag.Modality, _modality);
            annotationDataset.Add(DicomTag.Manufacturer, _manufacturer);
            annotationDataset.Add(DicomTag.PresentationCreationDate, _presentationCreationDateTime);
            annotationDataset.Add(DicomTag.PresentationCreationTime, _presentationCreationDateTime);

            DicomDataset serie = new DicomDataset();
            serie.Add(DicomTag.SeriesInstanceUID, _seriesInstanceUID);
            serie.Add(DicomTag.ReferencedImageSequence, imageDataset);

            annotationDataset.Add(DicomTag.ReferencedSeriesSequence, serie);


            DicomDataset displayedArea = new DicomDataset();
            displayedArea.Add(DicomTag.DisplayedAreaTopLeftHandCorner, "50\\50");
            displayedArea.Add(DicomTag.DisplayedAreaBottomRightHandCorner, "100\\100");
            displayedArea.Add(DicomTag.PresentationSizeMode, "SCALE TO FIT");

            annotationDataset.Add(DicomTag.DisplayedAreaSelectionSequence, displayedArea);

            annotationDataset.Add(DicomTag.ICCProfile, Byte.Parse("00000001"));

        }

我真的不明白这两个对象是如何联系在一起的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 12:11:52

表示状态通过ReferencedSeriesSequence.连接到图像我看到你正在填写这个属性,所以这应该没问题。现在,您还需要将表示状态保存为单独的DICOM文件,这与您保存图像的方式完全相同。为了检查结果,只需使用fo-dicom打开PS文件并从中读取,例如:

代码语言:javascript
复制
 var file = DicomFile.Open(your_path, readOption: FileReadOption.ReadAll);
 var dicomDataset = file.Dataset;
 var isItem = dicomDataset.Contains(DicomTag.SOPInstanceUID);
....

您可以轻松地在调试器中检查上面的dicomDataset,并看到您放在PS中的所有属性都应该在那里。

我也这样做过,但问题是我找不到一个免费的DICOM查看器来正确地可视化图像和表示状态。还在找..。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61117023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档