[Insight-developers] CreateInstance<TransformType> broken again?

Bill Lorensen bill.lorensen at gmail.com
Wed Nov 2 12:09:43 EDT 2011


A see duplicates in GenericTransformImage...
  itk::TransformFactory<itk::ScaleVersor3DTransform<float>
>::RegisterDefaultTransforms();
  itk::TransformFactory<itk::ScaleVersor3DTransform<double>
>::RegisterTransform();
  itk::TransformFactory<itk::ScaleVersor3DTransform<float>
>::RegisterTransform();

  itk::TransformFactory<itk::VersorTransform<float> >::RegisterTransform();
  itk::TransformFactory<itk::VersorTransform<float> >::RegisterTransform();

  itk::TransformFactory<itk::ScaleTransform<double, 2>
>::RegisterTransform();
  itk::TransformFactory<itk::ScaleTransform<double, 2>
>::RegisterTransform();

There may be more.

I smell a beer coming...

On Wed, Nov 2, 2011 at 12:02 PM, Bill Lorensen <bill.lorensen at gmail.com>wrote:

> I say this show up recently in a test. The problem was that some
> transforms were added twice.
>
> http://itk.org/gitweb?p=ITK.git;a=blobdiff;f=Modules/Core/Transform/test/itkTransformFactoryBaseTest.cxx;h=36ca4aa6fc1b5c2215f0955502f24c3a14388735;hp=36dae364632deef3c734c7f8849e8cbaaae84753;hb=f977b7d8fba2e2b9769c92893c74589d63f48d0b;hpb=69dc5bd2a78e62d9943529693facc5f72ec250ae
>
>
>
> On Wed, Nov 2, 2011 at 10:36 AM, Williams, Norman K <
> norman-k-williams at uiowa.edu> wrote:
>
>> Back in March I ran into a problem with ObjectFactories.  I'll append my
>> original description of the problem, because it has cropped up again.  In
>> our BRAINSResample program -- a module that's incorporated in Slicer, some
>> of our tests started failing after the recent re-organization of the
>> Transform modules.
>>
>> The symptom crops up in trying to read Matlab transforms created by ITK3.
>> As you can see, it's complaining about not being able to create an
>> instance of AffineTransform_double_3_3 even though directly below it
>> claims that exactly that transform type has been registered with the
>> factory:
>>
>> 45: itk::ExceptionObject (0x10240abb0)
>> 45: Location: "void
>>
>> itk::TransformIOBase::CreateTransform(itk::SmartPointer<itk::TransformBase>
>> &, const std::string&)"
>> 45: File:
>>
>> /scratch/kent/BRAINSStandalone/build/ITKv4/Modules/IO/TransformBase/src/itk
>> TransformIOBase.cxx
>> 45: Line: 58
>> 45: Description: itk::ERROR: MatlabTransformIO(0x102400f90): Could not
>> create an instance of AffineTransform_double_3_3
>> 45: The usual cause of this error is not registering the transform with
>> TransformFactory
>> 45: Currently registered Transforms:
>> 45:     "AffineTransform_double_2_2"
>> 45:     "AffineTransform_double_3_3"
>> 45:     "AffineTransform_double_4_4"
>> 45:     "AffineTransform_double_5_5"
>> 45:     "AffineTransform_double_6_6"
>> 45:     "AffineTransform_double_7_7"
>> 45:     "AffineTransform_double_8_8"
>> 45:     "AffineTransform_double_9_9"
>> 45:     "AffineTransform_float_2_2"
>> 45:     "AffineTransform_float_3_3"
>> 45:     "AffineTransform_float_4_4"
>> 45:     "AffineTransform_float_5_5"
>> 45:     "AffineTransform_float_6_6"
>> 45:     "AffineTransform_float_7_7"
>> 45:     "AffineTransform_float_8_8"
>> 45:     "AffineTransform_float_9_9"
>> 45:     "BSplineDeformableTransform_double_2_2"
>> 45:     "BSplineDeformableTransform_double_3_3"
>> 45:     "BSplineDeformableTransform_float_2_2"
>> 45:     "BSplineDeformableTransform_float_3_3"
>> 45:     "BSplineTransform_double_2_2"
>> 45:     "BSplineTransform_double_3_3"
>> 45:     "BSplineTransform_float_2_2"
>> 45:     "BSplineTransform_float_3_3"
>> 45:     "CenteredAffineTransform_double_2_2"
>> 45:     "CenteredAffineTransform_double_3_3"
>> 45:     "CenteredAffineTransform_float_2_2"
>> 45:     "CenteredAffineTransform_float_3_3"
>> 45:     "CenteredEuler3DTransform_double_3_3"
>> 45:     "CenteredEuler3DTransform_float_3_3"
>> 45:     "CenteredRigid2DTransform_double_2_2"
>> 45:     "CenteredRigid2DTransform_float_2_2"
>> 45:     "CenteredSimilarity2DTransform_double_2_2"
>> 45:     "CenteredSimilarity2DTransform_float_2_2"
>> 45:     "CompositeTransform_double_2_2"
>> 45:     "CompositeTransform_double_3_3"
>> 45:     "CompositeTransform_double_4_4"
>> 45:     "CompositeTransform_double_5_5"
>> 45:     "CompositeTransform_double_6_6"
>> 45:     "CompositeTransform_double_7_7"
>> 45:     "CompositeTransform_double_8_8"
>> 45:     "CompositeTransform_double_9_9"
>> 45:     "CompositeTransform_float_2_2"
>> 45:     "CompositeTransform_float_3_3"
>> 45:     "CompositeTransform_float_4_4"
>> 45:     "CompositeTransform_float_5_5"
>> 45:     "CompositeTransform_float_6_6"
>> 45:     "CompositeTransform_float_7_7"
>> 45:     "CompositeTransform_float_8_8"
>> 45:     "CompositeTransform_float_9_9"
>> 45:     "Euler2DTransform_double_2_2"
>> 45:     "Euler2DTransform_float_2_2"
>> 45:     "Euler3DTransform_double_3_3"
>> 45:     "Euler3DTransform_float_3_3"
>> 45:     "FixedCenterOfRotationAffineTransform_double_3_3"
>> 45:     "FixedCenterOfRotationAffineTransform_float_3_3"
>> 45:     "IdentityTransform_double_2_2"
>> 45:     "IdentityTransform_double_3_3"
>> 45:     "IdentityTransform_double_4_4"
>> 45:     "IdentityTransform_double_5_5"
>> 45:     "IdentityTransform_double_6_6"
>> 45:     "IdentityTransform_double_7_7"
>> 45:     "IdentityTransform_double_8_8"
>> 45:     "IdentityTransform_double_9_9"
>> 45:     "IdentityTransform_float_2_2"
>> 45:     "IdentityTransform_float_3_3"
>> 45:     "IdentityTransform_float_4_4"
>> 45:     "IdentityTransform_float_5_5"
>> 45:     "IdentityTransform_float_6_6"
>> 45:     "IdentityTransform_float_7_7"
>> 45:     "IdentityTransform_float_8_8"
>> 45:     "IdentityTransform_float_9_9"
>> 45:     "QuaternionRigidTransform_double_3_3"
>> 45:     "QuaternionRigidTransform_float_3_3"
>> 45:     "Rigid2DTransform_double_2_2"
>> 45:     "Rigid2DTransform_float_2_2"
>> 45:     "Rigid3DPerspectiveTransform_double_3_2"
>> 45:     "Rigid3DPerspectiveTransform_float_3_2"
>> 45:     "Rigid3DTransform_double_3_3"
>> 45:     "Rigid3DTransform_float_3_3"
>> 45:     "ScalableAffineTransform_double_3_3"
>> 45:     "ScalableAffineTransform_float_3_3"
>> 45:     "ScaleLogarithmicTransform_double_3_3"
>> 45:     "ScaleLogarithmicTransform_float_3_3"
>> 45:     "ScaleSkewVersor3DTransform_double_3_3"
>> 45:     "ScaleSkewVersor3DTransform_float_3_3"
>> 45:     "ScaleTransform_double_2_2"
>> 45:     "ScaleTransform_double_3_3"
>> 45:     "ScaleTransform_double_4_4"
>> 45:     "ScaleTransform_float_2_2"
>> 45:     "ScaleTransform_float_3_3"
>> 45:     "ScaleTransform_float_4_4"
>> 45:     "ScaleVersor3DTransform_double_3_3"
>> 45:     "ScaleVersor3DTransform_float_3_3"
>> 45:     "Similarity2DTransform_double_2_2"
>> 45:     "Similarity2DTransform_float_2_2"
>> 45:     "TranslationTransform_double_3_3"
>> 45:     "TranslationTransform_float_3_3"
>> 45:     "VersorRigid3DTransform_double_3_3"
>> 45:     "VersorRigid3DTransform_float_3_3"
>> 45:     "VersorTransform_double_3_3"
>> 45:     "VersorTransform_float_3_3"
>> 45:
>>
>> My original description of the problem with ObjectFactories:
>> OK. So I changed ObjectFactoryBase::InitializeFactoryList() thusly:
>>
>>
>> void
>> ObjectFactoryBase
>> ::InitializeFactoryList()
>> {
>>  CleanUpObjectFactoryGlobal.Use();
>>  /**
>>   * Don't do anything if we are already initialized
>>   */
>>  if ( ObjectFactoryBase::m_RegisteredFactories == 0)
>>    {
>>    ObjectFactoryBase::m_RegisteredFactories =
>>      new std::list< ObjectFactoryBase * >;
>>    }
>>  std::cerr << "&m_RegisteredFactories = " << &m_RegisteredFactories
>>            << " m_RegisteredFactories = " << m_RegisteredFactories
>>            << " m_RegisteredFactories.size() = " <<
>> m_RegisteredFactories->size()
>>            << std::endl;
>> }
>>
>> So it is printing out the address and size of the One True
>> m_RegisteredFactories every time
>> ObjectFactoryBase::InitializeFactoryList() gets called.
>>
>> The output is below. Let me summarize: First, the ImageIO factories get
>> added. Then the TransformIO factories get added and the address changes,
>> and the count goes back to zero!
>>
>> Now I'm perhaps alone in running with ITK_BUILD_SHARED, but it appears
>> that you get a different instance of
>> ObjectFactoryBase::m_RegisteredFactories depending on which shared library
>> you're in.  In other words the ObjectFactory implementation in ITK is 100%
>> broken with respect to shared libraries.
>>
>>
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =0
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =1
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =2
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =3
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =4
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =5
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =6
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =7
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =8
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =9
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =10
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =11
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =12
>> &m_RegisteredFactories = 0x101fb7c30 m_RegisteredFactories = 0x1061d6330
>> m_RegisteredFactories.size() =13
>> &m_RegisteredFactories = 0x104d7d5e0 m_RegisteredFactories = 0x1061e0a70
>> m_RegisteredFactories.size() =0
>>
>>
>>
>>
>> On 3/22/11 3:53 PM, "Kent WIlliams" <norman-k-williams at uiowa.edu> wrote:
>>
>> >Yes I'd be available.
>> >
>> >
>> >Since at this point the TransformFactory only works by accident, any
>> >improvement would be welcome.
>> >
>> >On 3/22/11 3:35 PM, "Luis Ibanez" <luis.ibanez at kitware.com> wrote:
>> >
>> >>Hi Kent,
>> >>
>> >>Coincidentally we have a great tcon yesterday with Vince
>> >>looking at the status of factories in ITK.
>> >>
>> >>We identified a set of improvements that can be applied
>> >>to the Transform Factories.
>> >>
>> >>Could you be available for a phone or Skype tcon at
>> >>some time tomorrow Wednesday ?
>> >>
>> >>We can go over the details there.
>> >>
>> >>
>> >>    Please let me know,
>> >>
>> >>
>> >>        Thanks
>> >>
>> >>
>> >>            Luis
>> >>
>>
>>
>>
>> ________________________________
>> Notice: This UI Health Care e-mail (including attachments) is covered by
>> the Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is
>> confidential and may be legally privileged.  If you are not the intended
>> recipient, you are hereby notified that any retention, dissemination,
>> distribution, or copying of this communication is strictly prohibited.
>>  Please reply to the sender that you have received the message in error,
>> then delete it.  Thank you.
>> ________________________________
>> _______________________________________________
>> 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
>>
>
>
>
> --
> Unpaid intern in BillsBasement at noware dot com
>
>


-- 
Unpaid intern in BillsBasement at noware dot com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20111102/efffc6c9/attachment.htm>


More information about the Insight-developers mailing list