[Insight-users] Inverse of affine not inplemented

Lodron, Gerald Gerald.Lodron at joanneum.at
Tue Dec 22 10:35:28 EST 2009


Hmm, sorry, i thougt the base class is the itk::Transform class which always returns false. I did not see that the base class is MatrixOffsetTransformBase. My fault!

Thanks for answer!



________________________________
Von: Wes Turner [mailto:wes.turner at kitware.com]
Gesendet: Dienstag, 22. Dezember 2009 16:17
An: Lodron, Gerald
Cc: insight-users at itk.org
Betreff: Re: [Insight-users] Inverse of affine not inplemented

I took a (very) quick look.  If it is returning NULL then it appears that either your matrix is singular, or you are not calling it correctly.  BTW: bool GetInverse(transform) expects the transform to be passed in and only returns true or false depending on if the matrix inversion was successful or not.  YOu probably want to make a call to transform->GetInverseMatrix() instead.

Code is included below.

- Wes

// Recompute the inverse matrix (internal)
template<class TScalarType, unsigned int NInputDimensions,
                            unsigned int NOutputDimensions>
const typename MatrixOffsetTransformBase<TScalarType,
                               NInputDimensions,
                               NOutputDimensions>::InverseMatrixType &
MatrixOffsetTransformBase<TScalarType, NInputDimensions, NOutputDimensions>
::GetInverseMatrix( void ) const
{
  // If the transform has been modified we recompute the inverse
  if(m_InverseMatrixMTime != m_MatrixMTime)
    {
    m_Singular = false;
    try
      {
      m_InverseMatrix  = m_Matrix.GetInverse();
      }
    catch(...)
      {
      m_Singular = true;
      }
    m_InverseMatrixMTime = m_MatrixMTime;
    }

  return m_InverseMatrix;
}

// return an inverse transformation
template<class TScalarType, unsigned int NInputDimensions,
                            unsigned int NOutputDimensions>
bool
MatrixOffsetTransformBase<TScalarType, NInputDimensions, NOutputDimensions>
::GetInverse( Self * inverse) const
{
  if(!inverse)
    {
    return false;
    }

  this->GetInverseMatrix();
  if(m_Singular)
    {
    return false;
    }

  inverse->m_Matrix         = this->GetInverseMatrix();
  inverse->m_InverseMatrix  = m_Matrix;
  inverse->m_Offset         = -(this->GetInverseMatrix() * m_Offset);
  inverse->ComputeTranslation();
  inverse->ComputeMatrixParameters();

  return true;
}


On Tue, Dec 22, 2009 at 10:04 AM, Lodron, Gerald <Gerald.Lodron at joanneum.at<mailto:Gerald.Lodron at joanneum.at>> wrote:
The method is there but it always returns NULL. I looked in the code it really always returns NULL but i think in most ways the affine should be invertable so the code in the function should be changed

________________________________
Von: Wes Turner [mailto:wes.turner at kitware.com<mailto:wes.turner at kitware.com>]
Gesendet: Dienstag, 22. Dezember 2009 16:02
An: Lodron, Gerald
Cc: insight-users at itk.org<mailto:insight-users at itk.org>
Betreff: Re: [Insight-users] Inverse of affine not inplemented

There appears to be a GetInverse() method for the Affine Transform.  Can you give a better description of your problem.

- Wes

http://www.itk.org/Doxygen316/html/classitk_1_1AffineTransform.html#d294a8a59b93d3663de46705490a189e

On Tue, Dec 22, 2009 at 8:10 AM, Lodron, Gerald <Gerald.Lodron at joanneum.at<mailto:Gerald.Lodron at joanneum.at>> wrote:
Hello

Is there a reason for the missing GetInverse() implementation of the affine transformation or is it a missing issue?

Best regards

_____________________________________
Powered by www.kitware.com<http://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://www.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-users



--
Wesley D. Turner, Ph.D.
Kitware, Inc.
Technical Leader
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-881-4920



--
Wesley D. Turner, Ph.D.
Kitware, Inc.
Technical Leader
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-881-4920
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20091222/c3e3a6ad/attachment.htm>


More information about the Insight-users mailing list