Search code examples
dm-script

Copying an XY calibration from a 2D image to a 3D image


How can I copy the 2D axes calibration of an image, to a 3D dataset of the same size, except that has an additional depth dimension?


Solution

  • The script below will do that. You use ImageGet/SetDimension.... for that.

    image img2d := GetFrontImage()
    if ( 2 != img2d.ImageGetNumDimensions() ) Throw( "Not 2D")
    number sx = img2D.ImageGetDimensionSize(0)
    number sy = img2D.ImageGetDimensionSize(1)
    
    image img3d := RealImage("3D",4,sx,sy,10)
    for( number i=0; i<2; i++ ){
        img3d.ImageSetDimensionScale( i, img2d.ImageGetDimensionScale(i) )
        img3d.ImageSetDimensionOrigin( i, img2d.ImageGetDimensionOrigin(i) )
        img3d.ImageSetDimensionUnitString( i, img2d.ImageGetDimensionUnitString(i) )
    }
    img3d.ShowImage()
    

    However, based on what you need the 3D image for, it can be better to clone the 2D image and make it into a 3D image. This will preserve all meta-data but set the data values to 0.

    image img2d := GetFrontImage()
    if ( 2 != img2d.ImageGetNumDimensions() ) Throw( "Not 2D")
    
    number sx = img2D.ImageGetDimensionSize(0)
    number sy = img2D.ImageGetDimensionSize(1)
    number sz = 10
        
    
    image img3d := img2d.ImageClone()
    img3d.ImageResize(3, sx, sy, sz)
    img3d.ShowImage()