Hi Kevin, Yes, that sounds like a good plan.
Thanks, Matt On Fri, Sep 13, 2013 at 7:53 PM, Wang, Kevin <[email protected]> wrote: > Hi Matt, > > Thanks for your comments on this. > > I agree that there should be no changes to itk::ImageSeriesReader. I am too > used to VTK thinking. > > Your proposal to check the componentType using imageIO for each 2D dicom > slice should be working. Here is what I think, instead of store all the > componentType in a vector variable SliceNativeScalarTypes, use min and max to > track the intensity range, then after go through all the slices, use the min > and max to determine the suitable OutputScalarType for the volume. Pseudocode: > > for( const_iterator fileNamesIt = this->FileNames.begin; fileNamesIt != > this->FileNames.end(); ++fileNamesIt) > { > imageIO->SetFileName( *fileNamesIt ); > imageIO->ReadImageInformation(); > if (imageIO->GetComponentType() == itk::ImageIOBase::UCHAR) > { > min = std::numeric_limits<uint8_t>::min() < min ? > std::numeric_limits<uint8_t>::min() : min; > max = std::numeric_limits<uint8_t>::min() > max ? > std::numeric_limits<uint8_t>::max() : max; > } > if (imageIO->GetComponentType() == itk::ImageIOBase:: CHAR) // check all > other types > { > min = ... > max = ... > } > ... > } > > if (this->UserNativeScalarType) > { > if( max <= std::numeric_limits<int8_t>::max() && min >= > std::numeric_limits<int8_t>::min() ) > { > this->SetOutputScalarType(VTK_CHAR) > } > if () // ... do the check for all other types > { > this->SetOutputScalarType(VTK_UNSIGNED_CHAR) > } > ... > } > > Thanks, > > Kevin > > > -----Original Message----- > From: Matt McCormick [mailto:[email protected]] > Sent: Friday, September 13, 2013 2:34 PM > To: Wang, Kevin > Cc: Slicer devel ([email protected]); [email protected] > Subject: Re: [slicer-devel] bug in vtkITKArchetypeImageSeriesReader and > possible improvement in slicer and ITK > > Hi Kevin, > > Thanks for proposing your patch and mentioning it on the list. Your patches > are always welcome. Instructions for submitting a patch can be found here: > > > http://insightsoftwareconsortium.github.io/ITKBarCamp-doc/CommunitySoftwareProcess/SubmitAPatchToGerrit/index.html > > As I understand the problem, (which may be incorrect), a change should not be > necessary on itk::ImageSeriesReader. itk::ImageFileReader and > itk::ImageSeriesReader are template based, and the output pixel type is > determined by the pixel type of the output image template parameter, so an > OutputImagePixelScalarType does not apply to itk::ImageSeriesReader. > > In vtkITKArchetypeImageSeriesReader.cxx, after determining the correct > imageIO in ::ExecuteInformation(), around line 720, would gathering an array > of NativeScalarTypes to expose to the user of > vtkITKArchetypeImageSeriesReader generate the functionality that is desired? > Pseudocode: > > this->SliceNativeScalarTypes.resize( this->FileNames.size() ); > for( const_iterator fileNamesIt = this->FileNames.begin(), iterator > scalarTypesIt = this->SliceNativeScalarTypes.begin(); fileNamesIt != > this->FileNames.end(); ++fileNamesIt, ++scalarTypesIt ) > { > imageIO->SetFileName( *fileNamesIt ); > imageIO->ReadImageInformation(); > *scalarTypesIt = imageIO->GetComponentType(); > } > > Thanks, > Matt > > On Fri, Sep 13, 2013 at 3:11 PM, Wang, Kevin <[email protected]> wrote: >> Hi slicer, >> >> >> >> I am developing a module in Slicer and I found a bug in >> vtkITKArchetypeImageSeriesReader class. Here is the issue. >> >> >> >> Since dicom utilizes the concept of slope and intercept, the scalar >> range for each 2D slice can be much different. However, in Slicer, the >> scalar type is determined by checking the ComponentType returned by >> GDCMImageIO which only tells the last slice ComponentType in >> vtkITKArchetypeImageSeriesReader.cxx. >> >> I propose to change vtkITKArchetypeImageSeriesReader.cxx as well as >> the itkImageSeriesReader class in ITK. The idea is that the scalar >> range will be checked for each 2D slice in itkImageSeriesReader and >> then a new variable OutputImagePixelScalarType will be set >> accordingly, then in vtkITKArchetypeImageSeriesReader.cxx it will >> check the OutputImagePixelScalarType from the itkImageSeriesReader to >> correctly determine the scalar type. >> >> >> >> If you think this makes sense, I will create an ITK ticket and submit >> a patch to ITK. The slicer patch has to wait until slicer start to use >> the newly patched ITK. I have created a ticket for tracking this: >> http://na-mic.org/Mantis/view.php?id=3386 >> >> >> >> Thanks, >> >> >> >> Kevin >> >> >> This e-mail may contain confidential and/or privileged information for >> the sole use of the intended recipient. >> Any review or distribution by anyone other than the person for whom it >> was originally intended is strictly prohibited. >> If you have received this e-mail in error, please contact the sender >> and delete all copies. >> Opinions, conclusions or other information contained in this e-mail >> may not be that of the organization. >> >> _______________________________________________ >> slicer-devel mailing list >> [email protected] >> http://massmail.spl.harvard.edu/mailman/listinfo/slicer-devel >> To unsubscribe: send email to >> [email protected] >> with unsubscribe as the subject >> http://www.slicer.org/slicerWiki/index.php/Documentation/Nightly/Devel >> opers/FAQ > > This e-mail may contain confidential and/or privileged information for the > sole use of the intended recipient. > Any review or distribution by anyone other than the person for whom it was > originally intended is strictly prohibited. > If you have received this e-mail in error, please contact the sender and > delete all copies. > Opinions, conclusions or other information contained in this e-mail may not > be that of the organization. > _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Kitware offers ITK Training Courses, for more information visit: http://kitware.com/products/protraining.php Please keep messages on-topic and check the ITK FAQ at: http://www.itk.org/Wiki/ITK_FAQ Follow this link to subscribe/unsubscribe: http://www.itk.org/mailman/listinfo/insight-developers
