基于VC的太阳光斑图像识别跟踪系统设计与实现
2018-03-10孙雷孙庆苏
孙雷+孙庆苏
摘 要:塔式太阳能聚光发电系统,在实际运用中由于天气、温度和镜子的执行传动结构等因素产生误差,太阳光不一定能够按照理想的情况反射到聚光位置。为使定日镜能够准确跟踪太阳和反射太阳热能,提出一种基于VC的太阳光斑图像识别跟踪系统,使用视频捕捉和图像处理技术,获取太阳光斑的误差偏移距离,并将这个修正数据通过串口发送给控制系统。根据定日镜自动跟踪太阳轨迹、反射光斑并进行图像修正的试验,结果显示能够计算确定图像中光斑的位置,获取实际偏差,并且在监视器上清晰看见每面定日镜的轮廓及其反射的光斑。系统采用图像匹配算法,具有精度高等特点,能够有效实现太阳光斑的识别与跟踪。
关键词:太阳光斑;识别;跟踪;定日镜场; VC
DOIDOI:10.11907/rjdk.172320
中图分类号:TP317.4
文献标识码:A 文章编号:1672-7800(2018)002-0205-03
0 引言
太阳能是最丰富、持久的能源,但因能量密度低,使其被提取需要聚光,目前主要的太阳能聚光发电系统有塔式、槽式,其中,塔式是太阳能热发电系统中具有吸引力的一种方式[1]。
由于太阳东升西落,定日镜场中的每一面镜子也必须由东向西,同时由下而上、再由上而下运动,才能保证每一面镜子对阳光的反射聚集到塔上的吸热器上。根据每一面镜子与吸热器的相对位置、时间、地点等,可以计算出每一面镜子在任何时刻的方位角和仰角[2],但是,由于大气折射、机械误差、热胀冷缩、材料老化等原因,将引起反射的偏差,影响发电效率。
图像识别系统可作为控制系统的负反馈,及时调整每一面镜子的方位角和仰角,使每一面镜子对阳光的反射永远对准吸热器,提高发电效率。具体方法是安装高清晰摄像头,实时采集定日镜反射的图片,进行图像识别,找出图像中的太阳光斑(即太阳的位置)与标准图片进行比对,如果所拍摄光斑X、Y向偏差与标准太阳光斑位置偏离,发出修正信息对镜子设定值进行修正[3],同时记录或报警。
1 系统设计
1.1 功能设计
在太阳能热发电电站中,定日镜的作用是收集太阳辐射能并将其汇聚到吸热器处,它由按一定方式排列的可绕双轴跟踪的定日镜组成,每个定日镜通过绕轴转动跟踪太阳,并将辐射到其表面的太阳能反射到塔顶吸热器[4]。
太阳光斑图像识别跟踪系统的功能是采用特殊的高清摄像图像识别方法,用于定日镜受外力位移出现的偏差修正,使得定日镜能够准确跟踪太阳和反射太阳热能。
1.2 可行性分析
由于太阳不停在转动,为了使光线经过定日镜反射后能够一直照射到这个面上,需要根据太阳在不同时间的位置来调整定日镜的水平和垂直位置。但是,根据太阳的运行规律计算的太阳轨迹会因为天气、温度和镜子的执行传动结构等产生误差,太阳光不一定能够按照理想的情况反射到聚光位置,而且当其中的一面或几面镜子发生偏离,没有反射到聚光位置的时候也无法知道。由此设计,利用图像识别系统,将这个偏差值反馈给控制系统,控制系统可以利用偏差值进行修正。
太阳能控制系统主要由计算机、摄像机(CCD)、聚光接收器、定日镜和定日镜控制系统组成,核心是图像分析监测系统,系统组成如图1所示。利用摄像机拍摄整个定日镜场的画面,由于摄像头和镜场中的各面镜子都相对固定,在抓取的图片中可以区分出每一面镜子位置太阳光线是平行的光线,镜子上太阳光斑的偏移即是接收点的偏移。因此,在软件中通过对光斑轮廓的判断获取光斑的中心值[5],然后算出与中心点像素的偏差值,并将这个像素的偏差值转化为实际的偏差值,发送给控制系统。
1.3 系统流程
太阳能图像分析监测系统采用Visual C++设计,使用视频捕捉和图像处理技术,获取太阳光斑的误差偏移距离,并将这个修正数据通过串口发送给控制系统。
软件设计思想是获取摄像机采集并通过图像卡传输过来的视频,对视频图像进行图片抓取,通过软件算法进行太阳光斑的识别,计算确定图像中光斑的位置,然后通过计算获取实际偏差,将光斑的实际偏移距离通过串口发送到控制系统中,图2为软件的流程图。
2 系统实现
2.1 太阳光斑位置识别
太阳能图像分析系统的基本思想是采用轮廓与特征提取相结合的方法,首先系统采用VC++定时器的功能,每5s进行一次太阳光斑位置的识别[6],获取相应的数据,读取图片,然后获取图片的大小,根据图片中点的像素值来判断满足要求的点,由满足要求的点来判断光斑的轮廓,根据轮廓来计算中心值。
计算实际偏差值流程是计算每像素值对应的实际距离参数,根据这个参数算出实际距离。
2.2 串口数据发送
在获取太阳光斑的位置数据后,采用Modbus通讯协议,用串口将数据发送出去,串口发送数据流程为,首先在初始化软件时建立串口连接,然后监听端口,有数据发送过来后,执行读操作。获取数据报文格式,根据报文格式组织数据,执行写操作,将数据发送过去。图3為串口发送数据流程图[7]。
2.3 程序实现
图像分析监测系统程序设计的重点是光斑的识别算法,还有主要的类的实现,使用类封装函数功能,使程序有很好的可读性,并减少一些重复的工作[8]。在封装的类中实现视频流读入、图片保存、位图编程以及串口通讯的实现。
2.3.1 类的设计
图像分析监测系统程序主要包含以下几个类:①Class CRecoSunView:一个从基类CView继承的类;②Class CBmproDlg:图片处理类;③Class CComm:一个串口通讯类;④Class CDib:从CObject类继承的类;⑤Class CSampleGrabberCB:从基类ISampleGrabberCB继承的类。endprint
主要类定义说明为:
(1)CRecoSunView类。此类主要完成了以下功能,实现对参数的初始化,视频图象接口的初始化,视频图象的显示,以及定时函数的实现,图象处理函数的调用,和串口通讯的实现。
(2)CBmproDlg类。此类的主要功能是实现对图片的读取,图片的分割扫描,扫描后对斑点中心点的判断。
(3)CComm类。此类的主要功能是实现对串口的操作,包括串口的打开,设置,以及数据发送和接收以及一个数据接收响应线程。
(4)CDib类。此类的主要功能是实现对位图文件的装载,读文件,写文件以及对位图的各种属性操作。
(5)CSampleGrabberCB类。此类的主要功能是实现对视频流中的图片抓取,以及文件的保存。
2.3.2 光斑识别算法
识别光斑是在类CBmproDlg中进行的,主要功能是实现对位图的读取,识别位图中的光斑位置。识别光斑的算法为:
(1)调用函数dib.load()函数读取位图,调用dib.GetWidth()和dib.GetHeight()获取图片的宽、高。
(2)给数组xydata,line,pt分配空间大小。
(3)按照定义的分割区域,进行像素扫描,对满足条件的像素进行标记,保存在xydata数组中。
(4)扫描完成后,区域中的满足条件的点组成线,对无法成线的斑点舍弃,得到的结果保存在line数组中。
(5)由线来构成一个斑点的形状,并由组成的斑点的轮廓来计算斑点的中心值,結果保存在pt数组中。
(6)由计算得到的斑点中心值与实际定义的中心相减,即得到偏差值。
2.3.3 算法的程序实现
首先调用dib.load(lpszDibFile)函数来装载图片,ScanRect数组的数据即是分割的范围,按照ScanRect数组定义的范围进行循环,获取满足条件的点,获取点后,调用OnOpen()函数。在OnOpen函数中,算法的实现为,当点的标志位为真时,则调用函数getline获取线的范围。依次调用,则最后获取的就是线的范围。然后调用OnGetp()函数,函数的功能是有线获取光斑的轮廓,当line数组的标志位为真时,调用getp()函数来获取后继的线还原轮廓,由轮廓获取中心值[9]。
if (dib.Load(lpszDibFile))
{
for(int scan=0;scan<4;scan=scan+2)
{
for(i=ScanRect[scan].x;i { m=0; for(j=ScanRect[scan].y;j { if(pan(i,j)) //判断此点像素值是否满足太阳光斑的特征 { …… huafen(); //如满足,找出y轴方向所有满足光斑条件判断的点 } 2.3.4 软件代码说明 软件代码如下: float value=(float)254/(752*3);//计算实际一个像素的实际表示 OnPhoto(); //抓取图片 CBmproDlg dlg; const char *lpctStr=(LPCTSTR)mCB.str; dlg.OnBrowse(lpctStr);//处理抓取的图片,获取数据 for(int i=0;i<2;i++) { float x=(float)value*dlg.pot[i].x; float y=(float)value*dlg.pot[i].y; pot[i].x=(int)x;//(float)(value*dlg.pot[i].x)); pot[i].y=(int)y;//(float)value*dlg.pot[i].y); } ChangeStatusBar(); OnCOM(); 3 系统数据记录与处理 根据多日来定日镜自动跟踪太阳轨迹、反射光斑并进行图像修正的试验,对软件结果检测:镜子的中心像素位置为X:350、Y:312,计算实际距离的参数为10/7。 利用算法得出的像素距离与镜子的中心位置相减,即可得到光斑以镜子中心位置为圆心的几何坐标值,再用计算实际距离的参数来算出实际距离。 在获取的图片中,选出一部分图片,如图4、图5,利用这3个参数设置,软件的运行结果分别如下: 光斑中心点:X:354 Y:319 实际偏差:ΔX:5 ΔY:-10 光斑中心点:X:362 Y:309 实际偏差:ΔX:17 ΔY:4 4 结语 定日镜的跟踪控制是塔式太阳能发电系统的关键技术,由于定日镜执行机构不可测的因素使定日镜运动出现偏差,本文设计了太阳光斑图像识别跟踪系统,采用VC++图像分析算法,有效实现了太阳光斑的识别与跟踪。 通过实际测试,在太阳光斑图像识别跟踪系统中,可以在监视器上清晰看见每面定日镜的轮廓及其反射的光斑,通过太阳光斑图像识别跟踪系统与其它系统的结合,可以控制定日镜跟踪太阳运行轨迹,把光斑实时反射到正确位置[10]。 参考文献: [1] 杜春旭,吴玉庭,王普,等.塔式太阳能发电系统镜场跟踪角分析[J].工程热物理学报,2012,33(9):1575-1579. [2] 余强,徐二树,常春,等.塔式太阳能电站定日镜场的建模与仿真[J].中国电机工程学报,2012,32(23):90-97. [3] 许芳.塔式太阳能定日镜聚光成像建模及仿真[J].太阳能学报,2010,32(10):1304-1309. [4] 耿其,东朱天宇,陈飞.塔式太阳能热发电中的定日镜跟踪系统设计[J].热力发电,2009,38(2):81-83. [5] 王孝红,刘化果.塔式太阳能定日镜控制系统综述[J].济南大学学报,2010,24(3):302-307. [6] 王鹏飞,王鹏.基于Visual C++6.0的Windows应用程序定时器研究[J].计算机技术与发展,2013,23(2):44-48. [7] 王中训,徐超.基于VC++6.0的多串口通信方法[J].计算机应用,2008,28(6):254-257. [8] 杨韬.用C语言实现类封装的研究[J].微型机与应用,2016,35(21):24-27. [9] 李洪雷.VC++环境下基于OpenCV的摄像机标定系统的开发[J].计算机应用与软件,2011,28(6):19-22. [10] 王魏.塔式太阳能定日镜聚光策略及其应用仿真[J].上海电气技术,2014,97(3):36-40.