微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在堆栈图像的每一帧中添加注释信息?

如何解决如何在堆栈图像的每一帧中添加注释信息?

我知道如何在显示在前面的单个图像中添加箭头,但现在我需要在图像堆栈的每一帧上添加箭头注释以指示对比度变化位置并使用 GSM“切片播放器”显示它们。怎么做?

解决方法

有是2D图像和在DigitalMicrograph三维叠层之间没有差别。两者都只是三维数据。作为一个摞这样的“切片”两者都不具有各自独立的标签,也没有注释 - 有只是一个单一的imageTagGroup和单一imageDisplays

因此,为了实现你想要什么,你需要不同的方法。你需要的将您的注释每当显示更新显示不同的切片。

为了做到这一点,你需要一个显示监听器添加到您的图像显示和行为上的 slice_property_changed 的事件。

此一个基本的例子脚本:

Class CStackAnno
{
    ImageDisplay    disp
    Component       arrow
    Number          ListenerID
        
    // This method is called whenever the imagedisplay fires the slice update event
    void OnSlicePropChanged( object self,Number disp_flags,ImageDisplay disp,Number flags1,Number flags2,object slice_id_beg,object slice_id_end )
    {
        image img := disp.ImageDisplayGetImage()
        if ( 3 != img.ImageGetNumDimensions() ) return
        if ( !arrow.ComponentIsValid() ) return
        
        number sx = img.imageGetDimensionsize(0)
        number sy = img.imageGetDimensionsize(1)
        number sz = img.imageGetDimensionsize(2)
        number start,end
        disp.ImageDisplayGetDisplayedLayers( start,end )
        number kLineEndPoint = 2
        arrow.ComponentSetControlPoint( kLineEndPoint,sx/sz * start,0 )
    }
        
    Object Launch( object self,image Img ) 
    {
        if ( !img.ImageIsValid() ) Throw( "Invalid input image." )
        if ( 3 != img.ImageGetNumDimensions() ) Throw( "This script only supports 3D images." )
        disp = img.ImageGetImageDisplay(0)
        
        // Register DisplayListener to catch when it updates
        ListenerID  = disp.ImageDisplayAddEventListener( self,"slice_property_changed:OnSlicePropChanged" )
        
        // Add the annotation
        arrow = NewArrowAnnotation( img.ImageGetDimensionSize(1)/5,img.ImageGetDimensionSize(0)*4/5,0 )        
        arrow.ComponentSetForegroundColor( 0,0.5,1 )
        arrow.ComponentSetBackgroundColor( 0,0.8,1 )
        arrow.ComponentSetDrawingMode( 1 )
        disp.ComponentAddChildAtEnd( arrow )

        return self
    }
    
}

//Main call
image fImg
GetFrontImage(fImg)
Alloc(CStackAnno).Launch(fImg)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。