通过事件监听器的方式获取一系列STEM图像

Acquire a series of STEM images via the method of event listener

最近我想在实时显示上附加一个事件监听器,以便自动获取一系列图像,使用的偶数地图是"data_value_changed"。在 TEM 模式下,一切都很好,可以正确获得 3D 堆栈。不幸的是,在将其应用于来自 DigiScan 的实时 STEM 图像时,脚本完全失败了。后来我才意识到,在这种模式下,图像是通过扫描逐像素更新的,而不是逐帧更新的。另一个事件映射 "data_changed" 被进一步测试,但仍然以失败告终。

使用 DM2.0 或更高版本,获取一系列定制的 STEM 图像似乎更容易,因为可以通过脚本方便地访问 DigiScan 控制。不幸的是,我们的显微镜很旧,只安装了 DM 1.5。

是否有特定于此目的的事件映射或事件处理程序的方法根本不合适?

提前致谢

The data changed event handler is suitable, but there is no event for a particular frame/complete event.

相反,您的事件处理代码需要有创意并处理您获得的事件多于您想要的情况。您实际上只对(也)更改图像中最后一个像素的事件感兴趣(因为帧是按顺序填充的),但是只要图像的子部分发生更改,您就会收到事件。

因此您需要 "filter" 尽快并 CPU 保守地处理这些事件。

最简单的方法是在每个事件中收集最后一个像素的 并将其与存储值进行比较。如果值改变了,那么这个像素也改变了,表明帧是 "complete" 并且你想使用这个事件。否则,只是 return 没有进一步的行动。

"new" 帧与前一帧的数值 相同 值的可能性非常小(- 对于扫描图像 - ),因此在大多数情况下案件是你需要做的。

如果这对您来说还不够,您可以查看更长的时间 - 但也会消耗更多 CPU 周期 - 像每次计算 "now" 和 [=34] 之间的布尔更改映射一样检查=] 并跟踪 "last" 的变化。然后,如果较早的索引有 "jump over",您就知道您的 "buffered" 最后一张图像实际上是一个完整的帧。 (请注意,您将总是在帧末尾看到一次数据更新。因此这会起作用。)

有一个此类脚本的示例in this answer here。如果这对您不起作用,请评论或改写您的问题,以详细了解您 运行 遇到问题的地方。