如何用DM脚本实现连续STEM成像时逐帧调整光栅旋转角度?
如何用DM脚本实现逐帧旋转光栅的STEM连续采集?
我需要编写DM脚本,通过DigiScan实现STEM图像连续采集,要求每帧图像的光栅旋转角度逐帧增加(比如每次增加10度)。目前已写出基础脚本,但不清楚如何修改以实现角度逐帧递增,也不确定能否在连续采集间隙修改光栅旋转角度。
现有脚本如下:
Number paramID Number width = 512 // pixels Number height = 512 // pixels Number rotation = 0 // degrees Number pixelTime = 3.2 // microseconds Number lSynch = 0 paramID = DSCreateParameters( width, height, rotation, pixelTime, lSynch ) Number signalIndex = 0 Number dataDepth = 4 // bytes Number selected = 1 Number dataDepth // 这里重复定义了变量,需要删除 Image dsImage Number imageID dsImage := IntegerImage( DSGetSignalName( signalIndex ), dataDepth, 0, width, height ) dsImage.ShowImage( ) imageID = dsImage.GetImageID( ) DSSetParametersSignal( paramID, signalIndex, dataDepth, selected, imageID ) Number continuous = 0 Number synchronous = 1 - continuous Number nFrame = 10 while( iFrame < nFrame ){ // 这里未初始化iFrame,会报错 DSStartAcquisition( paramID, continuous, synchronous ) DSwaitUntilFinished( ) // How to rotate STEM images here? } dsImage.DeleteImage( ) DSDeleteParameters( paramID )
解决方案
可以在每帧采集完成后修改光栅旋转角度,核心是利用DSModifyParameters函数更新已创建的采集参数,具体修改步骤如下:
- 初始化循环变量:在循环前添加
Number iFrame = 0;,避免未定义变量报错 - 删除重复变量定义:去掉重复的
Number dataDepth行 - 逐帧更新旋转角度:在采集完成后,递增
rotation值,再调用DSModifyParameters更新参数 - 可选:保留每帧图像:如果需要保留所有帧,不要复用同一个
dsImage,而是每帧创建新图像或复制当前图像后再更新
修改后的完整脚本:
Number paramID Number width = 512 // pixels Number height = 512 // pixels Number rotation = 0 // degrees Number pixelTime = 3.2 // microseconds Number lSynch = 0 paramID = DSCreateParameters( width, height, rotation, pixelTime, lSynch ) Number signalIndex = 0 Number dataDepth = 4 // bytes Number selected = 1 Image dsImage Number imageID dsImage := IntegerImage( DSGetSignalName( signalIndex ), dataDepth, 0, width, height ) dsImage.ShowImage( ) imageID = dsImage.GetImageID( ) DSSetParametersSignal( paramID, signalIndex, dataDepth, selected, imageID ) Number continuous = 0 Number synchronous = 1 - continuous Number nFrame = 10 Number iFrame = 0 // 初始化循环变量 while( iFrame < nFrame ){ DSStartAcquisition( paramID, continuous, synchronous ) DSwaitUntilFinished( ) // 保存当前帧(可选,避免被下一帧覆盖) Image currentFrame := dsImage.ImageClone() currentFrame.SetName( "STEM Frame " + (iFrame+1) + " (Rotation: " + rotation + "°)" ) currentFrame.ShowImage() // 更新旋转角度并修改采集参数 rotation += 10 DSModifyParameters( paramID, width, height, rotation, pixelTime, lSynch ) iFrame += 1 } dsImage.DeleteImage( ) DSDeleteParameters( paramID )
关键说明
- 修改时机:必须在
DSWaitUntilFinished()之后修改参数,确保当前帧采集完成,避免干扰正在进行的采集 - 参数更新:
DSModifyParameters用于修改已通过DSCreateParameters创建的参数集,这里只需要更新rotation值,其他参数保持不变即可 - 图像保存:如果直接复用
dsImage,新采集的帧会覆盖旧帧,添加克隆步骤可以保留每帧的原始数据 - 角度范围:注意光栅旋转角度的硬件限制,避免超出设备允许的范围(通常0-360°)
内容的提问来源于stack exchange,提问作者kachigusa
相关产品推荐
相关产品推荐

