From a37783575ab1a2854d7739d9d069c497917013e6 Mon Sep 17 00:00:00 2001 From: Andrey Fedorov Date: Thu, 4 Jun 2015 16:18:04 -0400 Subject: [PATCH] ENH: added handling of fractional segmentations This branch depends on the accessors in this pull request: https://github.com/michaelonken/dcmtk/pull/41 Unpacking is now using the unpacking routine from segutils --- ConvertSegmentations/SEG2NRRD.cxx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ConvertSegmentations/SEG2NRRD.cxx b/ConvertSegmentations/SEG2NRRD.cxx index f0ca51f..ee2ee5c 100644 --- a/ConvertSegmentations/SEG2NRRD.cxx +++ b/ConvertSegmentations/SEG2NRRD.cxx @@ -4,6 +4,7 @@ #include "dcmtk/ofstd/ofconapp.h" #include "dcmtk/dcmseg/segdoc.h" #include "dcmtk/dcmseg/segment.h" +#include "dcmtk/dcmseg/segutils.h" #include "dcmtk/dcmfg/fginterface.h" #include "dcmtk/dcmiod/iodutil.h" #include "dcmtk/dcmiod/modmultiframedimension.h" @@ -155,6 +156,8 @@ int main(int argc, char *argv[]) // ImagePositionPatient, set non-zero pixels to the segment number. Notify // about pixels that are initialized more than once. std::vector segmentPixelCnt(100); + + DcmIODTypes::Frame *unpackedFrame = NULL; for(int frameId=0;frameIdgetFrame(frameId); @@ -210,12 +213,19 @@ int main(int argc, char *argv[]) unsigned slice = frameOriginIndex[2]; + if(segdoc->getSegmentationType() == DcmSegTypes::ST_BINARY) + unpackedFrame = DcmSegUtils::unpackBinaryFrame(frame, imageSize[0], imageSize[1]); + else + unpackedFrame = new DcmIODTypes::Frame(*frame); + // initialize slice with the frame content for(int row=0;rowpixData[bitCnt/8] >> (bitCnt%8)) & 1; + //pixel = (frame->pixData[bitCnt/8] >> (bitCnt%8)) & 1; + pixel = unpackedFrame->pixData[bitCnt]; + if(pixel!=0){ segmentPixelCnt[segmentId]++; //std::cout << segmentId << ": " << segmentPixelCnt[segmentId] << std::endl; @@ -235,8 +245,10 @@ int main(int argc, char *argv[]) } } } - } + if(unpackedFrame != NULL) + delete unpackedFrame; + } std::cout << "Number of pixels for segments: " << std::endl; for(unsigned i=0;i