一种光伏屋顶及光伏障碍物自动识别算法的制作方法

文档序号:17373995发布日期:2019-04-12 23:05阅读:429来源:国知局
一种光伏屋顶及光伏障碍物自动识别算法的制作方法

本发明涉及一种光伏设计技术,特别涉及一种基于正射图像和高程信息的光伏屋顶及光伏障碍物自动识别算法。



背景技术:

目前光伏行业设计屋顶光伏项目时,光伏组件的排布位置需要避开屋顶上的光伏障碍物。光伏障碍物包括气楼、女儿墙、排风设备、空调外机、水箱和采光带等。普通障碍物和屋顶平面具有一定的高度差,而采光带为屋顶透光需要,和屋顶平面没有明显的高度差,但是可以从视觉上进行区分。传统方法进行方案设计时,需要在正射影像上,手动框选屋顶及相关的光伏障碍物,存在费时、容易遗漏的问题。



技术实现要素:

本发明是针对光伏障碍物影响光伏项目设计时间和准确率的问题,提出了一种光伏屋顶及光伏障碍物自动识别算法,可自动识别屋顶的同时识别光伏障碍物。

本发明的技术方案为:一种光伏屋顶自动识别算法,具体包括如下步骤:

1)数据采集及处理:

采集一片实际目标区域的三维地理模型,利用自动处理软件,导出得到完整的正射图和数字表面高程图,正射图中每个像素点包含区域的rgb信息,数字表面高程图中每个像素点包含对应的高度信息,两幅图片的大小、分辨率以及左上角的地理位置都相同;找到每个像素点pi(xi,yi)对应的rgb值(ri,gi,bi)和高程值zi,每个像素点的位置和对应实际的地理坐标位置;相邻像素点的地理位置之间有一个固定的采样距离d米;

2)屋顶轮廓定位:

基于目标区域的正射rgb图像信息,利用训练好的图像识别框架,识别得到每个屋顶的大致范围;并通过求凸包络算法,得到每个屋顶的大致轮廓坐标集合im,m为屋顶的个数;

3)屋顶信息识别:

对图像识别的每个屋顶的轮廓内,采用最小二乘拟合和种子填充算法,找到屋顶平面内的点,拟合得到一个平面,求出对应的平面方程,并修正屋顶轮廓范围:

具体实现步骤如下:

3a)对图像识别得到的任意一个屋顶轮廓坐标集合i,找到其中位置坐标的极大和极小值,从而得到一个包围屋顶的矩形窗口,四个角点的像素坐标分别为(xmin,ymin),(xmax,ymin),(xmax,ymax),(xmin,ymax);

3b)在对应的数字表面高程图中,利用gdal包提供的方法读取四个角点包围的矩形区域点集,记为m;如果屋顶范围内像素点过多,则进行适当的预处理,对原始数据进行降采样;得到新的像素点集m';同时,将对应的多边形轮廓坐标i中每个点的坐标转化为降采样后的近似坐标i’;

3c)在多边形i’轮廓范围内,以设定步长,筛选出多个候选点作为初始种子像素,用于搜索屋顶平面:在筛选的种子像素中选择一个像素点p0(x0,y0)作为初始种子,根据初始像素点及其周围四个点p01(x0-1,y0),p02(x0+1,y0),p03(x0,y0-1)和p04(x0,y0+1),及像素点对应的高程值z0、z01~z04得到一个平面点集l,采用最小二乘法,拟合得到一个(x,y,z)空间内的初始平面,并计算得到平面方程a0x+b0y+c0z+d0=0;

3c-1):从种子像素p0出发,根据填充算法,在像素点集m'内依次向周围搜索下一个点,搜索到平面方程内的点,则将新点加入平面中重新拟合平面方程式;如当前点为pj(xj,yj),当前点所在平面方程为akx+bky+ckz+dk=0,则接下去待搜索的点为pj周围的四个点为(xj-1,yj),(xj+1,yj),(xj,yj-1),(xj,yj+1);依次判断这四个坐标对应点的位置是否在点集m’内,如果是则按步骤3c-2)进行4个新点是否在当前平面上的判断;

3c-2):检查搜索的新点是否为新的点,即是否已经判断过,有记录,已经有记录,则继续判断下一个点;如没有记录,将该点坐标(xj-1,yj)带入平面方程akx+bky+ckz+dk=0,得到该点与平面的高度差为|(ak(xj-1)+bkyj+dk)/ck-zj|,判断高度差是否在阈值允许的高度差范围内;如果在范围中,则将该点加入平面点集l,并重新拟合得到一个新的平面方程ak+1x+bk+1y+ck+1z+dk+1=0,并且将点(xj-1,yj)作为当前种子,对周围四个点进行搜索和判断;如果不在范围中,说明该点不在平面内,将此点加入平面外点集cm’li,记录后,按前一个有效点平面方程继续检查下一点;

3c-3):执行以上的搜索和判断点,直到搜索到该平面点集l的边界,即l内的点都用做种子判断过,且周围找不到新的高程值在平面范围内的点,根据搜索到的最后一点重新拟合的平面方程alx+bly+clz+dl=0即为该平面的最终方程;3c-4):对平面内的所有经过搜索和判断的点集l,拟合得到一个外包络多边形h’,将多边形h’坐标转换到降采样前的坐标h。根据图像识别得到的轮廓i和识别屋顶平面得到的轮廓h分别得到包围的多边形区域si和sh,求两个区域交集得到重叠部分区域sih,并得到其外轮廓,即为修正后的屋顶轮廓;

3c-5):计算重叠部分区域sih的面积,如果面积小于设定面积阈值,说明初始点选择错误,此时重新选择初始种子,并回到3c-1)步再次进行屋顶轮廓识别;如果面积大于设定面积阈值,此时再计算重叠部分区域sih占图像识别得到的屋顶区域si的比重sih/si,如果该值小于设定比重阈值,说明图像识别得到的不只是一个屋顶;从si中去除sih区域,继续在剩下的区域中利用dsm图像中的高程信息识别得到屋顶区域并和图像识别区域si求交集得到sih2;如此重复,直到识别出的屋顶区域sih1、sih2…sihm总合占si的比值达到规定的阈值,即认为图像识别区域si中所有屋顶区域均被识别。

一种光伏障碍物自动识别算法,根据所述光伏屋顶自动识别算法识别出屋顶区域的基础上对障碍物进行识别:

在屋顶轮廓范围内,以平面方程为参考,基于高程信息找出不在误差范围内的障碍物,得到对应的轮廓坐标和高度;

步骤a:

a-1:在屋顶区域si中,根据每个点pj(xj,yj)到屋顶平面方程alx+bly+clz+dl=0的距离,利用跨平台计算机视觉库中imgproc.threshold方法筛选出超过阈值的点,即为障碍物上的点;然后用imgproc.findcontours方法,将障碍物点进行分类,相邻的点为同一个障碍物,并得到每个障碍物的外轮廓点集;障碍物上每个点相对屋顶的高度,通过计算点到屋顶平面方程距离的方式得到;

a-2:对每个识别得到的障碍物轮廓,利用轮廓简化算法筛选,得到几个关键点组成的轮廓;算法步骤:从轮廓点集中选出一个初始点pn,及其下一点pn+1和下下一点pn+2;计算角度∠pnpn+1pn+2,如果该角度与180°的差值小于一个阈值,则认为这三个点在同一条直线上,因此将点pn+1从轮廓点集中删除,并继续以点pn+2为起始,判断∠pn+2pn+3pn+4;如果差值大于阈值,则认为pn+1为关键点,保留在轮廓点集中,继续以点pn+1为起始,判断∠pn+1pn+2pn+3;直到所有点都遍历完,剩下的即简化后的障碍物轮廓;

步骤b:

b-1:对障碍物点集进行筛选:根据障碍物外轮廓的位置,去除屋顶外的障碍物;根据障碍物包含的点集数量,去除过小的障碍物;

b-2:将剩余障碍物的外轮廓坐标,转化为步骤1)中数据采集的dsm图中的像素位置。

一种光伏障碍物自动识别算法,根据所述光伏屋顶自动识别算法识别出屋顶区域的基础上对障碍物进行识别,出现非高程信息障碍物识别,则按下面步骤识别:

c-1:搭建图像识别模型:基于经典的卷积神经网络模型,结合密集特征金字塔网络和旋转检测网络,搭建采光带检测模型;

c-2:模型训练:利用现有的rgb高程图像,人工标注屋顶采光带样本,对样本进行预处理,转化成深度算法需要的格式,扩增样本量、划分不同的训练验证集合,之后用图像识别模型进行训练;

c-3:将需要识别的高程图像,代入训练好的模型中,识别得到屋顶采光带的轮廓坐标。

c-1:搭建图像识别模型:基于经典的卷积神经网络模型,结合密集特征金字塔网络和旋转检测网络,搭建采光带检测模型;

c-2:模型训练:利用现有的rgb高程图像,人工标注屋顶采光带样本;对样本进行预处理,转化成深度算法需要的格式,扩增样本量、划分不同的训练验证集合;之后用图像识别模型进行训练;

c-3:将需要识别的高程图像,代入训练好的模型中,识别得到屋顶采光带的轮廓坐标;

c-4:根据步骤c-3中识别得到的多个屋顶轮廓,对采光带轮廓坐标进行筛选;如果采光带完全在一个屋顶轮廓内,保留;如果某个采光带不完全在任何一个屋顶轮廓内,则判断此采光带和此屋顶轮廓的重叠面积是否大于一个95%,如大于95%,则认为采光带在该屋顶轮廓范围内,保留,如小于95%则认为采光带不在该屋顶轮廓范围内,作为无效采光带删除,95%为设定的阈值,可根据精度调整。

本发明的有益效果在于:本发明一种光伏屋顶及光伏障碍物自动识别算法,结合高程图和正射影图两种图像的信息,通过自动识别算法,对全图的屋顶和屋顶光伏障碍物信息进行搜索和识别,大大提高了设计工作效率和识别精度,减少了人为操作所花费的时间和精力。

附图说明

图1为本发明光伏屋顶及光伏障碍物自动识别算法流程示意图;

图2为本发明屋顶障碍物识别结果的示意图。

具体实施方式

如图1所示光伏屋顶及光伏障碍物自动识别算法流程示意图,具体包括如下步骤:

1、数据采集及处理:

基于一片实际目标区域的三维地理模型,利用自动处理软件(如商业软件contextcapture),导出得到完整的正射图(每个像素点包含区域的rgb信息)和dsm图(数字表面高程图,digitalsurfacemodel,每个像素点包含对应的高度信息)。两幅图片的大小、分辨率以及左上角的地理位置都相同。因此,找到每个像素点pi(xi,yi)对应的rgb值(ri,gi,bi)和高程值zi。每个像素点的位置,对应实际的地理坐标位置。相邻像素点的地理位置之间有一个固定的采样距离d米。比如一幅1000*1000像素的正射图和同样大小的dsm图,左上角的实际地理坐标为(x0,y0),则其任意像素点(xi,yi)的实际地理位置为(d×xi+x0,d×yi+y0)。

2、屋顶轮廓定位

基于目标区域的正射rgb图像信息,利用训练好的图像识别框架,识别得到每个屋顶的大致范围。并通过求凸包络算法,得到每个屋顶的大致轮廓坐标集合im,m为屋顶的个数。

3、屋顶信息识别

对图像识别的每个屋顶的轮廓内,采用最小二乘拟合和种子填充算法,找到屋顶平面内的点(不包括障碍物),拟合得到一个平面,求出对应的平面方程,并修正屋顶轮廓范围。

具体实现步骤如下:

步骤a:

对图像识别得到的任意一个屋顶轮廓坐标集合i,找到其中位置坐标的极大和极小值,从而得到一个包围屋顶的矩形窗口,四个角点的像素坐标分别为(xmin,ymin),(xmax,ymin),(xmax,ymax),(xmin,ymax);

步骤b:

在对应的dsm图中,利用gdal包提供的方法读取四个角点包围的矩形区域点集,记为m。如果屋顶范围内像素点过多,需要进行适当的预处理,对原始数据进行降采样。假设原始分辨率为0.02米,即相邻像素点之间实际距离。降采样采用在原始图像上每n个(n≥1)像素取1个点组成新的矩形区域,则新的矩形分辨率为0.02*n米。取点时,从左上角第一个点向右、向下依次间隔取点,如果行或列末尾剩余像素中不够读取一个新点,则直接舍去,得到新的像素点集m'。同时,将对应的多边形轮廓坐标i中每个点的坐标转化为降采样后的近似坐标i’。

步骤c:

在多边形i’轮廓范围内,以一定步长,筛选出多个候选点作为种子像素,用于搜索屋顶平面。在筛选的种子像素中选择一个像素点p0(x0,y0)作为初始种子。根据初始像素点及其周围四个点p01(x0-1,y0),p02(x0+1,y0),p03(x0,y0-1)和p04(x0,y0+1),及像素点对应的高程值z0、z01~z04得到一个平面点集l,采用最小二乘法,拟合得到一个(x,y,z)空间内的初始平面,并计算得到平面方程a0x+b0y+c0z+d0=0。

c-1)从种子像素p0出发,根据填充算法,在像素点集m'内依次向周围搜索下一个点,搜索到平面方程内的点,则将新点加入平面中重新拟合平面方程式。如当前点为pj(xj,yj),当前点所在平面方程为akx+bky+ckz+dk=0,则接下去待搜索的点为pj周围的四个点为(xj-1,yj),(xj+1,yj),(xj,yj-1),(xj,yj+1)。依次判断这四个坐标对应点的位置是否在点集m’内,如果是则按步骤c-2)进行4个新点是否在当前平面上的判断。

c-2)检查搜索的点(如上一步中点(xj-1,yj))是否为新的点,即是否已经判断过(每次判断完一个点都会进行记录)。已经有记录,则继续判断下一个点;如没有记录,将该点坐标(xj-1,yj)带入平面方程akx+bky+ckz+dk=0,得到该点与平面的高度差为|(ak(xj-1)+bkyj+dk)/ck-zj|(根据方程计算得到的该点坐标处平面高程值为-(ak(xj-1)+bkyj+dk)/ck),与zj的差即为点和平面的高程差,可近似看作点到平面的距离),判断高度差是否在阈值允许的高度差范围内。如果在范围中,则将该点加入平面点集l,并重新拟合得到一个新的平面方程ak+1x+bk+1y+ck+1z+dk+1=0,并且将点(xj-1,yj)作为当前点(种子),对周围四个点进行搜索和判断;如果不在范围中,说明该点不在平面内,将此点加入平面外点集cm’li,记录后,按前一个有效点平面方程继续检查下一点。

每次搜索根据一个种子判断周围四个点中是不是有平面里的点,有的话把它们当做种子放到栈里面。因为栈是先进后出,每次都是从栈里拿一个种子,判断一下周围是否有新的种子,再把新的种子放到栈里面,没有的话拿下一个种子,最后等到栈空了,这次搜索就结束了。以新的种子为一个新的搜索开始。

c-3)执行以上的搜索和判断点,直到搜索到该平面点集l的边界,即l内的点都用做种子判断过,且周围找不到新的高程值在平面范围内的点,根据搜索到的最后一点重新拟合的平面方程alx+bly+clz+dl=0即为该平面的最终方程。

c-4)对平面内的所有经过搜索和判断的点集l,拟合得到一个外包络多边形h’,将多边形h’坐标转换到降采样前的坐标h。根据图像识别得到的轮廓i和识别屋顶平面得到的轮廓h分别得到包围的多边形区域si和sh,求两个区域交集得到重叠部分区域sih,并得到其外轮廓,即为修正后的屋顶轮廓。

c-5)计算重叠部分区域sih的面积,如果面积过小,小于设定面积阈值,说明初始点可能选择错误,比如在障碍物上,因此只识别了障碍物上的一个区域。此时需要重新选择初始种子,并回到c-1)步再次进行屋顶轮廓识别。如果面积没有过小,此时再计算重叠部分区域sih占图像识别得到的屋顶区域si的比重sih/si。如果该值小于设定比重阈值,说明图像识别得到的不只是一个屋顶,如南北坡的情况。从si中去除sih区域,继续在剩下的区域中利用dsm图像中的高程信息识别得到屋顶区域并和图像识别区域si求交集得到sih2。如此重复,直到识别出的屋顶区域sih1、sih2…sihm总合占si的比值达到规定的阈值,即认为图像识别区域si中所有屋顶区域均配识别。

4、障碍物识别

在屋顶轮廓范围内,以平面方程为参考,基于高程信息找出不在误差范围内的障碍物,包括气楼、女儿墙、排风设备、空调外机和水箱等,得到对应的轮廓坐标和高度。在屋顶轮廓范围内,基于图像识别方法,找出高度信息无法识别的光伏障碍物,如采光带等。

步骤a:

1)在屋顶区域si中,根据每个点pj(xj,yj)到屋顶平面方程alx+bly+clz+dl=0的距离,利用opencv(基于bsd许可(开源)发行的跨平台计算机视觉库)中imgproc.threshold方法筛选出超过阈值的点,即为障碍物上的点。然后用imgproc.findcontours方法,将障碍物点进行分类,相邻的点为同一个障碍物,并得到每个障碍物的外轮廓点集。障碍物上每个点相对屋顶的高度,可以通过计算点到屋顶平面方程距离的方式得到。

2)对每个识别得到的障碍物轮廓,利用轮廓简化算法筛选,得到几个关键点组成的轮廓。算法步骤:从轮廓点集中选出一个初始点pn,及其下一点pn+1和下下一点pn+2。计算角度∠pnpn+1pn+2,如果该角度与180°的差值小于一个阈值,则认为这三个点在同一条直线上,因此将点pn+1从轮廓点集中删除,并继续以点pn+2为起始,判断∠pn+2pn+3pn+4;如果差值大于阈值,则认为pn+1为关键点,保留在轮廓点集中,继续以点pn+1为起始,判断∠pn+1pn+2pn+3。直到所有点都遍历完,剩下的即简化后的障碍物轮廓。

步骤b:

1)对障碍物点集进行筛选。根据障碍物包含的点集数量,去除过小的障碍物,比如房屋边上树木等。

2)将剩余障碍物的外轮廓坐标,转化为原始dsm图(是指步骤1中数据采集的dsm图)中的像素位置。

5、非高程信息障碍物识别

对于无法利用高程信息识别的光伏障碍物,如采光带等,需要利用图像识别算法在高程图像上进行识别,并根据屋顶轮廓进行筛选。

1)搭建图像识别模型。基于经典的卷积神经网络模型,可结合密集特征金字塔网络和旋转检测网络,搭建采光带检测模型。

2)模型训练。利用现有的rgb高程图像,人工标注屋顶采光带样本。对样本进行预处理,转化成深度算法需要的格式,扩增样本量、划分不同的训练验证集合。之后用图像识别模型进行训练。

3)将需要识别的高程图像(屋顶识别前的高程图),代入训练好的模型中,识别得到屋顶采光带的轮廓坐标。

4)根据步骤3)中识别得到的多个屋顶轮廓,对采光带轮廓坐标进行筛选。因为图像识别容易受到图像质量的影响,可能将其他物体误识别为采光带。因此,如果采光带完全在一个屋顶轮廓内,保留;如果某个采光带不完全在任何一个屋顶轮廓内,则判断此采光带和此屋顶轮廓的重叠面积是否大于一个阈值(95%),如大于阈值,则认为采光带在该屋顶轮廓范围内,保留,如小于阈值则认为采光带不在该屋顶轮廓范围内,作为无效采光带删除。

6、识别信息汇总

综合识别得到的屋顶轮廓、坡度和朝向,以及障碍物的轮廓和相对屋顶的高度,汇总到正射影像上,以便校验,并进行后续的光伏方案设计。如图2是在正射图中标出的两种障碍物轮廓。图中1为风机,根据高程信息识别后得到近似多边形轮廓及高度;2为采光带,利用图像识别得到近似的矩形轮廓。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1