[Insight-developers] Odd filter/writer behavior
Luis Ibanez
luis.ibanez at kitware.com
Sun Oct 31 17:12:49 EDT 2010
Hi Michael,
What file format are you trying to use to write the image out ?
Could you please post your current source code ?
In that way we can try to reproduce the problem.
Thanks
Luis
-------------------------------------------------------------------------
On Fri, Oct 29, 2010 at 4:05 PM, Michael Stauffer (Circular Logic) <
mstauff at verizon.net> wrote:
> Thanks Luis, I'm understanding what I can from
> itKChangeInformationFilter. I put the modifications in GenerateData()
> because I was duplicating the image before modifying the header, and wasn't
> sure that GenerateOutputInformation() was only called once the object/filter
> was being processed. But I've seen since then that's it's called during
> filter/pipeline processing. But in any case, duplicating the image isn't the
> way to go, as you say.
>
> Also, I got the filter to work as-is, simply by changing the call to
> SetNthOutput() in GenerateData() to GraftOutput(). Interesting, but not that
> I understand why.
>
> It seems so odd still that the image would show the expected values when
> returned from my filter, but then not write out to file properly. Do you
> have an idea why that might be? I'm still just getting started here, so the
> details of the itk process are still largely automagical to me.
>
> Cheers,
> Michael
>
> ------------------------------
> *From:* Luis Ibanez [mailto:luis.ibanez at kitware.com]
> *Sent:* Wednesday, October 27, 2010 3:38 PM
> *To:* Michael Stauffer
> *Subject:* Re: [Insight-developers] Odd filter/writer behavior
>
> Hi Michael,
>
> I think that the problem is related to the fact that
> inside GenerateData() you are instantiating a
> new Output image, and putting it on top of
> the Output #0.
>
> For the particular filter that you are implementing,
> the actual modification should mostly go in the
> method
>
> B B B B B B GenerateOutputInformation()
>
>
> instead of the GenerateData() method.
>
> This is because, what you are modifying is the
> "orientation" matrix, which is part ofB the metadata.
>
> You are not modifying the actual pixel values of
> the image.
>
> You will find useful to follow the example of the
> filter:
>
> B ITK/Code/BasicFilters/
> B B B B itkChangeInformationImageFilter.txx
>
>
> You will notice in this filter that the GenerateData()
> method doesn't create another image.B In general,
>
> by the time the GenerateData() method is called,
> the filter base classes will have already created an
> image for you, based on the information that you
> set in the GenerateOutputInformation() method.
>
>
> B B B B Regards,
>
>
> B B B B B B B B B Luis
>
> ------------------------------------------------------------
> On Mon, Oct 25, 2010 at 2:45 PM, Michael Stauffer <mstauff at verizon.net>wrote:
>
>> Mac OSX 10.5.8
>> GCC 4.0.1
>> ITK 3.20
>>
>> Hi,
>>
>> I'm seeing odd behavior with a simple filter I made. The filter simply
>> moidifies the Direction and Origin members of an input image and returns a
>> new image.
>>
>> The printing the new image's modified Direction to stdout shows the
>> correct values. But when I then write to a new image file, the modified
>> Direction and Origin values only show up if the filter had been instantiated
>> and used within a code block. I've attached source files for the filter and
>> test, and included the relevant source snippet below.
>>
>> Note that in the second case, outputImage2->GetDirection() B prints with
>> correct values, but the files that's subsequently written does not. Seems
>> very odd. I see the same behavior in another test program.
>>
>>
>> Anyone have any ideas?
>>
>> source:
>>
>> B typedef
>> itk::ComposeAffineTransformWithHeaderTransformImageFilter<ImageType,TransformType
>> > ComposeFilterType;
>>
>> B
>> /////////////////////////////////////////////////////////////////////////
>> B std::cout << "test2DHeader... filter code in block..." << std::endl;
>>
>> { //This works when bracketed
>>
>> B // Apply transform - this filter applies its inverse
>> B ComposeFilterType::Pointer composeFilter = ComposeFilterType::New();
>> B composeFilter->SetInput( inputImage );
>> B composeFilter->SetTransform( transform );
>> B composeFilter->Update();
>>
>> B // Create output
>> B outputImage1 = composeFilter->GetOutput();
>> B }
>>
>> B std::cout << "test2DHeader... outputImage1.Direction: " << std::endl;
>> B std::cout << outputImage1->GetDirection() << std::endl;
>>
>> B // write it out
>> B typedef itk::ImageFileWriter<ImageType> WriterType;
>> B WriterType::Pointer writer1 = WriterType::New();
>> B writer1->SetFileName( "testBlock_"+outputfilename );
>> B writer1->SetInput( outputImage1 );
>> B writer1->Update();
>>
>> B
>> /////////////////////////////////////////////////////////////////////////
>> B std::cout << "test2DHeader... filter code WITHOUT block..." <<
>> std::endl;
>> B // Apply transform - this filter applies its inverse
>>
>> B ComposeFilterType::Pointer composeFilter = ComposeFilterType::New();
>> B composeFilter->SetInput( inputImage );
>> B composeFilter->SetTransform( transform );
>> B composeFilter->Update();
>>
>> B // Create output
>> B outputImage2 = composeFilter->GetOutput();
>>
>> B std::cout << "test2DHeader... outputImage2.Direction: " << std::endl;
>> B std::cout << outputImage2->GetDirection() << std::endl;
>>
>> B // write it out
>> B //typedef itk::ImageFileWriter<ImageType> WriterType;
>> B WriterType::Pointer writer2 = WriterType::New();
>> B writer2->SetFileName( "testNoBlock_"+outputfilename );
>> B writer2->SetInput( outputImage2 );
>> B writer2->Update();
>>
>>
>> _______________________________________________
>> 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.html
>>
>> 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
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20101031/12773299/attachment.htm>
More information about the Insight-developers
mailing list