<div dir="ltr">Hi,<div><br></div><div>I have the following code to flip an image and preserve origin and spacing.</div><div>For some reason, the writer doesn't copy the Origin from the original image into the output Image.</div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">I can see the Output Image origin is the Original Image origin but I don't understand why the writer doesn't take that value. I have no issues with the spacing, that one is copied just fine into the output image.</span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">I'm using ITK 4.7.2</span></div><div><br></div><div><div>#include "itkImage.h"</div><div>#include "itkImageFileReader.h"</div><div>#include "itkImageFileWriter.h"</div><div>#include "itkFlipImageFilter.h"</div><div>#include "itkChangeInformationImageFilter.h"</div><div><br></div><div>int main(int argc, char* argv[])</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>if (argc != 4)</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>std::cerr << "Usage: " << argv[0];</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>std::cerr << " <InputFileName> <OutputFileName> <AxisToFlip>";</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>std::cerr << std::endl;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return EXIT_FAILURE;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>typedef itk::Image<signed short, 2 >  ImageType;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>typedef itk::ImageFileReader< ImageType >   ReaderType;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>ReaderType::Pointer reader = ReaderType::New();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>reader->SetFileName(argv[1]);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>ImageType::Pointer inputImage = reader->GetOutput();</div><div>    inputImage->Update(); //Importante!! Sin esto no agarra el origen</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>ImageType::PointType     origin = inputImage->GetOrigin();</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>ImageType::SpacingType   spacing = inputImage->GetSpacing();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>typedef itk::FlipImageFilter< ImageType >   FlipImageFilterType;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>FlipImageFilterType::Pointer flipFilter = FlipImageFilterType::New();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>typedef itk::ChangeInformationImageFilter< ImageType >  FilterType;</div><div>    FilterType::Pointer filter = FilterType::New();</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>filter->SetInput(reader->GetOutput());</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>filter->SetOutputOrigin(origin);</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>filter->ChangeOriginOn();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>filter->SetOutputSpacing(spacing);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>filter->ChangeSpacingOn();</div><div><span class="Apple-tab-span" style="line-height:1.5;white-space:pre">        </span><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>flipFilter->SetInput(filter->GetOutput());</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>flipFilter->Update();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">    </span>FlipImageFilterType::FlipAxesArrayType flipAxes;</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>if (atoi(argv[3]) == 0)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>flipAxes[0] = true;</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>flipAxes[1] = false;</div><div><span class="Apple-tab-span" style="line-height:1.5;white-space:pre"> </span><span style="line-height:1.5">}</span><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>else</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>flipAxes[0] = false;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>flipAxes[1] = true;</div><div><span class="Apple-tab-span" style="line-height:1.5;white-space:pre">  </span><span style="line-height:1.5">}</span><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>flipFilter->SetFlipAxes(flipAxes);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>typedef itk::ImageFileWriter< ImageType > WriterType;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>WriterType::Pointer writer = WriterType::New();</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>writer->SetFileName(argv[2]);</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>writer->SetInput(flipFilter->GetOutput());</div><div><span class="Apple-tab-span" style="white-space:pre">     </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>try</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>writer->Update();</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>std::cout << "Input origin is: " << reader->GetOutput()->GetOrigin() << std::endl;</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>std::cout << "Output origin is: " << flipFilter->GetOutput()->GetOrigin() << std::endl;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>catch (itk::ExceptionObject & error)</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>std::cerr << "Error: " << error << std::endl;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>return EXIT_FAILURE;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>return EXIT_SUCCESS;</div><div>}</div></div><div><br></div></div><div dir="ltr">-- <br></div><div dir="ltr">Matias</div>