阈值分割法在直升机驾驶舱模拟器中的应用研究
2016-09-07史永胜邹玉超
史永胜, 邹玉超
(中国民航大学 航空工程学院,天津 300300)
阈值分割法在直升机驾驶舱模拟器中的应用研究
史永胜, 邹玉超
(中国民航大学 航空工程学院,天津300300)
通过对直升机起降特点及视角转换的分析研究,建立模拟起降模型;以VC++为工具,采用双缓冲技术及光栅处理技术,解决了驾驶舱图片透明化过程中存在的闪烁问题;在完成驾驶舱透明化处理的基础上通过采用阈值分割方法,实现了驾驶舱与跑道在同一窗体不同区域中的显示,通过组件调用的方式完成驾驶舱按键对飞机起降的控制,并结合多线程技术完成了直升机模拟起降的仿真测试;该方法能直观清楚的反映直升机起降过程中驾驶舱内部及外部跑道的情况,对直升机起飞降落故障研究有一定的参考价值。
双缓冲;图片透明化;阈值分割;区域显示;组件调用;多线程技术
0 引言
通过应用计算机仿真技术,将现代飞行控制与模拟仪器的结合而产生的模拟飞行控制技术越来越得到广泛的应用,如通过结合MFC实现多通道视景仿真,在Vega环境下完成模型动态控制以及模拟飞行器的各类飞行模拟试验[1-3]等。
鉴于直升机特殊的起降特点,在直升机模拟仿真中常用的方法有基于小波变换的图像分割法[4]、基于知识粒度的图像分割法[5]和基于阈值分割法[6]等多种方法。本文在上述几种算法的基础上经过分析比较,采用阈值分割算法来对直升机驾驶舱进行构建,并结合组件调用这一理念对直升机模拟起降方法做了研究分析,通过多线程技术完成了直升机起降的模拟仿真。
1 设计思想
在该系统的设计过程中,主要完成以下几方面的设计:驾驶舱仪表面板的区域透明化、驾驶舱与起降带的区域化显示、通过组件调用完成飞机起降控制以及起降过程中仪表参数的显示。
1.1透明化
透明化处理过程由三部分组成M=∑(N1,N2,N3),其中N1表示对想要处理的区域做单色处理,即用单一色将该区域覆盖∀x∈N1,∃y,stx→y;N2表示处理区域外的剩余区域,N2=Ω-N1(Ω为全集);N3表示处理后的区域,设
∀x∈A,A=∪(I1,I2,…In)(其中A表示需要透明化处理的区间),
∃y∈B,B=∪(J1,J2,…Jn)(其中B表示与A中元素相叠加的元素的集合)
如果x×y=φ,则N3=A×B,即为透明区域。
1.2区域划分
在区域透明化的基础上,假设
∀x,∃δ,stx-δ∈N1,x+δ∈N2
1.3组件调用控制
设A={a1,a2,…},B={b1,b2,…},C={c1,c2,…} 其中A表示表单元的合集,B表示控制单元的合集,C表示被控制单元的合集。假设f(x),f(y),f(z)分别为A、B、C的函数,则对于∀z∈C,∃x∈A,y∈B,使得
上式表示在表单元和控制元件状态选定的条件下会有相应数据与其匹配,并且该数据会以特定形式在规定区域内以运动形式表现出来。
1.4多线程处理
在分区域显示过程中,由于不同区域内显示不同的对象,且各对象中还存在调用控制关系,所以引入多线程技术来完成上述过程的处理。
设∀x∈A,y∈B,f(x)表示区域M中任意成员函数,g(y)表示区域N中任意成员函数,f(x)与g(y)相互独立并且∃z∈N,使得g(z)→f(z),即当区域N中发出一个指令时,区域M中会有成员函数相应该指令并作出相应的回应。
2 模型体系结构设计
2.1模型结构组成
模型根据功能分类的差别将整体结构划分为图像区域透明化模块,区域显示模块,组件调用控制模块以及多线程控制仿真模块。其功能结构图如图1所示。
图1 功能结构图
区域透明化模块通过对选定区域进行颜色附着与调和方法实现透明化处理,然后再应用阈值分割法进行区域分割,在不同区域中调用不同的图像。图像交互处理模块是通过采用调用组件的方法对不同区域中的图像做对应的处理操作。
2.2运行控制
模型以事件驱动为主要方式来执行运行控制操作,将调用模块以组件方式封存并加载到不同的控制函数下,通过采用点击响应方式,完成对事件消息的接受与处理,并将不同的组件在不同的区域内显示出来。
由于该系统是由多个模块组成,系统功能的实现要由各个模块之间协调一致才能完成,所以各模块之间以事件消息和数据信息为纽带进行联系,具体到程序中就是以指针和参数为主要桥梁将各个模块之间联系起来。当主控制模块发出指令时,各个模块之间根据主模块的命令对各自所负责的区域进行控制和响应,如当点击发动机开关按钮时,直升机仪表开始旋转,外部场景开始下降,使直升机完成起飞过程。
3 模块功能的实现
3.1区域图像透明化处理
绘制"透明"位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为"透明色"。通过将位图的背景色指定为"透明色",在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上。
绘制“透明”位图的关键是创建一个“掩码”位图(mask bitmap),“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在Windows编程中,绘图都要用到设备描述表,我们需创建两个内存设备描述表:位图设备描述表(image DC)和“掩码”位图设备描述表(mask DC)。位图设备描述表用来装入位图,而“掩码”位图设备描述表用来装入“掩码”位图。图像透明化处理模块创建流程图如图2所示。
图2 透明模块流程图
3.2区域分块显示模块
根据迭代阈值分割算法,创建剪裁区CRgn,然后通过CDC类的SelectClipRgn函数将该裁剪区选入设备场景中,最后通过BitBlt函数显示位图。通过选取目标图像上一系列的点选定所需要的不规则图形,然后用红色框线画出选出的图像。根据所画出的边界,用阈值分割算法的原理通过程序把图片按框线分成两个不规则的区域。
通过水平/垂直交叉点数判别法来判断阈值点是否在选定的区域,以此将图片分成两个互不相关的区域,在每个区域内设定一个图片显示功能,来分别显示前景图片与背景图片。分块显示原理图如图3所示。
图3 区域分块原理图
3.3组件调用控制模块
为了简化编程过程,模型的构建采用组件调用的方法实现。通过设计驾驶舱仪表按钮,将其作为直升机起降的开关,根据需要将不同区域内的图像封装为几个不同的组件,将不同组件载入不同的按钮下方。根据需要改变按钮布局形状完成模型调控的初步设计。
为了实现模型虚拟起降的仿真功能,需要对控制元件状态与封装组件的关系进行设定,并结合驾驶舱仪表盘信息来达到对直升机起降过程的全程监测。三者之间的关系如图4所示。
图4 组件调用原理图
3.4仿真
直升机模拟起降的仿真通过系统调用已导出的加载区域图像,按照加载DLL->属性设置->获取外部数据的步骤实现。系统采用多线程技术实时监控控制单元状态,捕获实时数据,并将数据转化成特定的形式显示到对应的区域中。
3.5动态处理过程
上述的各个过程是以VC++作为主要工具,基于GDI设备接口基础上生成的,各部分对应的仿真过程代码如下:
//载入图片
LoadImage();
//设置图片高度与宽度
bmWidth;
bmHeight;
//创建与显示DC相兼容的内存DC
CreateCompatibleDC();
//将选定的位图选入内存DC
SelectObject();
//开始缩放目标区域---源区域
StretchBlt();
//创建不规则区域
CreatePolygonRgn();
//选择创建的不规则区域SelectClipRgn();
//按钮设置
DoModal();
//可视化移动
if(direction_T("")
&&speed_T("")&time_T(""))
{
when(IDOK)
{
ShowPic();//显示图片
}
}
4 实例验证分析
4.1载入原始图像
从文件中将所需要的图片选入内存,在载入内存之前已经完成对图片选定区域的填色处理,驾驶舱仪表盘之外的区域都进行了填色处理,方便后续工作的进行。
4.2原始图像透明化处理
按图2所示的流程图,对原始图像做对应的处理,主要处理代码如下:
//显示原图像
MaskDC.BitBlt(0,0,r1.Width(),r1.Height( ) , &MemoryDC,0, 0,SRCCOPY );
//对原图像做“与”处理
dc1->StretchBlt(r1.left,10,r1.Width(), r1.Height(),&MemoryDC,TempX,TempY,BITWidth,BITHeight,SRCINVERT);
//对“与”处理图像再做“异或”
dc1->StretchBlt(r1.left,10,r1.Width(),
r1.Height(),&MaskDC,TempX,TempY,BITWidth, BITHeight,SRCAND);
//最后再做“与”处理
dc1->StretchBlt(r1.left,10,r1.Width( ), r1.Height(),&MemoryDC,TempX,TempY,BITWidth,BITHeight, SRCINVERT);
通过上述代码完成了对原始图像5的区域透明化处理,即将蓝色区域经过几次调色处理后变成了透明化状态,处理结果如图6所示。
图5 原始图像
图6 透明处理结果
对比图5与图6,可以发现已经将黑色区域完全透明化,而这一透明化区域会被当作一个特别模块,通过下面的分割算法加以划分。
4.3多区域划分
在透明处理结果的基础上,通过采用阈值分割算法,将显示窗体划分为多个区域。
像由于选点个数太多的情况下,程序处理过程过慢所以只在能保证区域大致范围不变的情况下尽可能少的选择分割点,这也造成区域划分过程中边界比较凌乱,加大取点个数可以解决这一问题。
4.4组件调用及控制
在完成多区域划分后,将跑道图像及驾驶舱面板图像作为组件封存,设定驾驶舱开关按键,将组件分别嵌入到对应的区域内,如图7所示。
图7 组件调用
在完成组件调用后,将封存组件加载到按钮相应函数下,结合多线程技术实现了直升机在跑道上起降的过程,如图8所示。
图8 直升机模拟起降
5 结语
本文提出了一种基于阈值分割的直升机模拟起降模型的设计方法。系统采用面向对象的程序设计思想完成图像单元的设计与封装,使用GDI及纹理贴图的方法实现区域分块显示图像的绘制,应用组件调用的方法实现模型模拟起降控制过程的构建,利用DLL及多线程等技术完成直升机模拟起降的仿真测试功能。本文所提出的设计方法程序处理过程比较简洁、便于维护更改、易于扩充、开发成本低,其思想通用性强,可扩充到其它系统或平台的设计之中。
[1]王娇艳,康凤举,由延军. MFC框架下的多通道视景仿真技术 [J].火力与指挥控制,2010(7):130-132.
[2]朱晓辉, 江浩. Vega环境下的某飞行器视景仿真的实现[J].现代电子技术,2012(13):32-34.
[3]张玲, 陈宁. 飞行模拟器飞行仿真系统集成方法研究[J].飞行力学,2010(3):39-42.
[4]马银平,李赐健. 基于小波变换的遥感图像分割方法研究[D].南昌:南昌航空大学,2013.
[5]周金容, 周春荣, 潘峰. 基于知识粒度的图像分割新算法[J].计算机工程与设计,2014(10):3563-3567.
[6]吴怀群,黄宵宁,杨忠. 一种基于熵值的自动阈值图像分割方法[J].应用科技,2011(8):1-4.
[7]李忠新, 茅耀斌, 王执铨. 基于对数极坐标映射的图像拼接方法[J]. 中国图象图形学报, 2005, 10(1): 59-63.
[8]张伟, 任仙怡, 张桂林, 等. 基于对数极坐变换和仿射变换的目标识别定位方法[J]. 中国图象图形学报, 2005, 11(9): 1255.
[9]张亮.基于双缓冲技术的VC++图形刷新技术的原理和实现[J].福建电脑,2010(6):110.
[10] Kohli P ,Ladicky L ,Torr P HS.Robust higher order potentials for enforcing label consistency [J]. International Journal of Computer Vision, 2012,82(3):302-324.
[11]张磊.基于VC++的高效绘图——双缓冲技术[J].硅谷,2009(20):61.
[12]Wang Wenping ,Bert J,Zheng Dayue,etal. Computation of rotationg minimizing frame[J]. ACM Transactions on Graphics,2011,27(1):1-7.
[13]郝建强,宫云战.叶红点对多边形位置检测的稳定串行最优与并行的算法[J].计算机应用研究,2010(4):1342-1348.
[14] Liu Y, Zhang D S,Lu G J, et al. A survey of content-based image retrieval with high level semantics[J]. Pattern Recognition,2013,40(12):282-288.
Landing of Helicopter Simulation Method Based on Threshold Segmentation Research
Shi Yongsheng, Zou Yuchao
(College of Aeronautical Engineering,Civil Aviation University of China,Tianjin300300,China)
Through the analysis of the helicopter landing characteristics and perspective transformation, establishing a simulation model of the landing of helicopter. With VC + + as a tool, adopting double buffer technology and processing technology of grating has solved the cockpit picture flicker problems exist in the process of transparency. On the basis of the completion of the cockpit transparent processing , using threshold segmentation method achieves the cockpit and the runway shows in different regions of the same form. Through the way of component calls complete the aircraft cockpit buttons controlling the landing of helicopter, and combined with multithreading technology to complete the simulation of helicopter landing simulation test. This method can directly reflect clearly the helicopter cockpit inside and outside the runway in the process of takeoff and landing, the flying helicopter fault study has certain reference value.
double buffer; image transparency; threshold segmentation; area shows;component calls; multithreading technology
2015-07-28;
2015-09-07。
国家自然科学基金委员会于中国民用航空总局联合资助(61179048);天津市支撑计划项目(重点)(11ZCKFGX04100)。
史永胜(1965-),男,辽宁锦州人,教授,博士,主要从事结构智能化设计、故障诊断与结构修理、专家系统、知识表示方向的研究。
邹玉超(1989-),男,硕士,主要从事虚拟维修、图像处理方向的研究。
1671-4598(2016)01-0259-03
10.16526/j.cnki.11-4762/tp.2016.01.072
TP391.9
A