基于Sapera LT实现图像连续存储的方法

张益恭+杨磊+程向明



摘 要: 多功能天文经纬仪是中国科学院云南天文台研制的一种新型天体测量望远镜。介绍了多功能天文经纬仪图像采集系统中所使用的基于Sapera LT的图像连续存储方法。对该方法的软件实现流程及功能代码编写进行了说明,给出了源代码,并对实现图像序列连续存储功能的主要函数进行了说明。对使用过程中所遇到的问题,进行了分析,并给出两点建议。
关键词: 多功能天文经纬仪; Sapera LT; 图像采集; 图像存储
中图分类号: TN911.73?34 文献标识码: A 文章编号: 1004?373X(2017)08?0094?03
A method of image sequences storage based on Sapera LT
ZHANG Yigong1,2, YANG Lei1,2, CHENG Xiangming1,2
(1. Yunnan Observatory of National Astronomical Observatory, CAS, Kunming 650011, China;
2. Key Lab for Celestial Body Structure, CAS, Kunming 650011, China)
Abstract: The multi?function astronomical theodolite developed by Yunnan Astronomical Observatory is a new astrometric telescope. A method of Sapera LT based image consecutive storage used in the image acquisition system of the multi?function astronomical theodolite is introduced. The software flow and functional code compiling of this method is described. The source code is given in this paper. The main parameters of realizing the image sequence consecutive storage function is elaborated. The problem met in the application process is analyzed, and two suggestions are offered.
Keywords: multi?function astronomical theodolite; Sapera LT; image acquisition; image storage
0 引 言
多功能天文经纬仪[1]是云南天文台研制的一种新型天体测量仪器,利用转轴观测、镜筒弯沉测定、水平差测定、轴准直差测定等手段,实时测定仪器中的各个部套的误差,从而达到较高的精度。该仪器可以用于测量大气折射改正、铅垂线的改正以及经纬度的测定[2?5]。
该仪器采用一台非制冷数字CCD相机作为星像和人造星像的采集终端,两台非制冷模拟CCD相机用来测定水平差和轴准直差。该仪器要求,多幅图像以外触发的方式连续曝光,转轴前后分别进行数据资料的采集和存储,需针对该要求对CCD相机采集时序进行设计,并进一步实现图像的连续存储。
Sapera LT[6?7]是加拿大Dalsa公司开发的专用于图像采集与控制的开发库,具有独立于硬件、能够多处理操作的特点。并提供了功能强大的相机配置工具CamExpert,便于用户使用操作。该软件库被广泛地应用于科学研究与工业控制领域。本文基于Sapera LT实现了多功能天文经纬仪中图像资料的采集与连续存储,在多年的天文观测中运行稳定,使用效果良好。
1 硬件介绍及功能实现要求
多功能天文经纬仪有三个光路:主光路、电水准光路、轴准直光路。主光路采用的CCD相机为美国Imperx公司的BOBCAT 系列数字面阵相机,轴准直光路和电水准光路采用的CCD相机为丹麦JAI公司的CCD模拟面阵相机,数字相机使用的图像采集卡为加拿大DALSA公司的X64?CL iPro数字采集卡,模拟相机使用的图像采集卡为DALSA的X64?AN Quad模拟采集卡。相机具体的参数见表1。
表1 相机配置参数
多功能天文经纬仪采用转轴观测模式[8?9],一个晴夜观测约200颗恒星,一颗星的观测流程为:转轴前首先采集50幅主光路的人造星像,在采集100幅恒星像,采集恒星像的同时采集电水准光路人造星像和轴准直光路人造星像各100幅。之后一起进行转轴,即仪器方位轴部分以上绕方位轴转置180°,同时将镜筒随着高度轴旋转到预制天顶距约2倍的角度,使得镜筒仍指向被测星。之后采集被测星100幅图像,采集恒星像的同时,电水准和轴准直光路的模拟相机同时采集100幅图像,最后采集50幅主光路人造星像,具体的工作模式[10]见图1。
仪器观测过程中通过读取观测纲要,对整个观测流程进行控制,望远镜控制系统通过GPS获取时间基准,按照仪器的观测模式进行控制运行并根据观测纲要所标定的时间节点给出相机触发信号。而最终要实现的目标是通过相机获取连续图像序列并进行保存。采用VC++ 6.0,配置DALSA公司的Sapera LT 6.31 Release 开发包,作为多功能天文经纬仪图像采集存储软件的开发环境。Sapera LT提供回调函数用于图像数据的处理,这也是最初考虑的存储方案,但是在具体实现的过程中,通过对采集帧数计数的方式对回调函数进行测试,发现采集帧数计数不准确,无法保证图像资料存储的稳定性。因此选择采用专门的存储线程,通过纲要的读取,GPS对时间的延迟控制来实现图像的连续存储。
2 具體的软件功能实现及程序设计
通过对观测纲要的读取,以及用GPS时间校准电脑机器时间,使得图像存储线程与工作在外触发方式的CCD相机采集图像相匹配,对一颗恒星进行观测并对所采集图像序列进行连续存储的流程框图如图2所示。
对于图像的连续存储主要分为两个部分:时间节点的判定和图像存储的实现。程序中时间节点的判定主要利用CTime类中的GetCurrentTime()函数获取当前机器时钟单位时间,之后通过CTimeSpan定义一个时间变量来获取机器时间与纲要时间的时间差。使用WIN32 API函数Sleep()进行时间延迟等待。对于图像的存储的实现则使用Sepera LT所提供的API函数来实现。实现图像连续存储功能的代码如下:
BOOL CDIGITCAMDoc::Save()
{
int m_StartFrame ;
CString m_Options="?format raw";
int filecnt=1;
for(int i=0;i<g_nmultiimg;i++)
{
CString F9; //file counter
CString FF="zxj";
CString F10=".raw"; //file format
F9.Format("%03d",filecnt);
FileName=FilePath+FF+F9+F10;
filecnt++;
m_StartFrame=(m_Buffers == NULL) ? 0 : m_Buffers?>
GetIndex();
m_Buffers?>Next();
m_Buffers?>Save(FileName, m_Options);
m_Buffers?>Clear(m_StartFrame);
}
return TRUE;
}
自定义函数Save()采用了循环的方式对图像进行连续存储。调用Sapera LT中SapBuffer类中的GetIndex(),Next(),Save(),Clear()四个函数。首先通过GetIndex()来获取Buffer的地址,然后用Next()来找到Buffer的第一块内存,最后用Save()来将图像数据按照固定的格式存到存储到硬盘中,存储完毕后用Clear()函数将缓存清除释放。
3 结 论
文中所提及的基于Sapera LT所实现的图像连续存储方法是针对云南天文台多功能天文经纬仪所特有的观测采集模式所设计的。在采集的过程中利用望远镜转轴时间及等待待观测星进入预定望远镜视场所需要的时间存储图像序列。该方法对于有同样处理需求的工作项目有借鉴意义。对于该方法中有两个关键点需要注意:
(1) 硬盘的写入速度。虽然目前主流的SATA 3.0接口理论速度能够达到6 Gb/s,但是实际使用过程中其存储速度会大打折扣, 另外在实际使用过程中发现,如果磁盘空间所剩余可用存储空间较小,会影响到图像的存储质量。因此建议对于存储用磁盘的选取,可以采用企业级硬盘、或者采用磁盘阵列的方式,这样能够提升图像的存储速度并降低出错率。
(2) 时间序列的控制。在多功能天文经纬仪的图像采集存储过程中,由于采集时间的节点是固定的,并预留有可供存储数据的时间,因此可以使用延迟等待的方法进行图像的存储,但是对于一些需要不间断连续采集存储的工作项目,这种方法不一定可行,对于上述工作可以采用定时存储的方法或者以按帧存储的方式进行图像的存储。
参考文献
[1] WANG Jiancheng, CHEN Linfei, YANG Lei, et al. The principle of measuring unusual change of underground mass by optical astrometric instrument [J]. Geodesy and geodynamics, 2012, 4: 32?38.
[2] MAO W, LI B, YANG L, et al. Constructing an observational model of the neutral atmospheric refraction delay from measured values of the astronomical refraction [J]. Astron J, 2007, 134(5): 2054?2060.
[3] MAO W, ZHANG H, LI B, et al. A possible means of improving the accuracy of refraction delay correction of neutral atmosphere [J]. Chinese astronomy and astrophysics, 2007, 31(2): 211?220.
[4] 铁琼仙,林辉,杨磊,等.建立经纬度异常变化三角监测网的仪器和误差的测定[J].天文研究与技术,2008,5(4):360?364.
[5] 胡辉,苏有锦,付虹,等.大姚、普洱地震前云南天文台时纬残差异常[J].自然灾害学报,2007,16(5):106?110.
[6] Dalsa. Sapera LT? 6.31 users manual [EB/OL]. [2009?09?12]. http://www.teledynedalsa.com/mv/support.
[7] Dalsa. Sapera++ LT? 6.31 programmers manual [EB/OL]. [2009?11?10]. http://www.teledynedalsa.com/mv/support.
[8] MAO W, LI Z M, FAN Y, et al. A new method of determining absolute azimuth and latitude and suggestion for a new type of meridian circle [C]. IAU Symp, 1986, 109: 551?552.
[9] 冒蔚,李志明,范瑜,等.子午天文方法[M].北京:科学出版社,1987.
[10] 张益恭,李彬华,杨磊,等.多功能天文经纬仪图像采集系统[J].天文研究与技术,2014,11(1):72?79.