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

Reply via email to