一种autocad建筑二维图快速提取并生成楼层轮廓线的方法与流程

文档序号:16742956发布日期:2019-01-28 13:11阅读:990来源:国知局
一种autocad建筑二维图快速提取并生成楼层轮廓线的方法与流程

本发明涉及一种外形提取的方法,更具体地,涉及一种autocad建筑二维图快速提取并生成楼层轮廓线的方法。



背景技术:

建筑二维图高度复杂,但是些项目仅需要建筑二维图楼层的外边界信息,无需其他图元信息。比如,在建立建筑大楼3d模型的时候,只需要建筑大楼每层楼外围形状,因而只需要外边界线及其信息,而不需要其他内部图元的信息。该方法可以实现快速对autocad建筑二维图中的边界特征点进行自动化快速提取,进而利用这些特征点集生成autocad多段线,如图1的红色多段线,用此多段线描述建筑楼层图的外边界并进行3d建模和后续的处理,大大减少了人工操作,提高效率。该方法还可以应用在其他复杂图纸,对实体边界(轮廓)进行提取,如机械零件图的外边界(轮廓)的自动化提取等等。

现有的图像处理技术可以比较好的找到图形的外围轮廓,但是不避开下图1这种情况。如图1所示,楼层外边界需要的是红色部分,而一般的图像处理找外轮廓无法避开突出的部分,并且传统的图像处理找外轮廓得到的一系列像素点,并不能直接得到autocad上的多段线实体,无法进行其他操作(如给楼层边界添加名称信息等)。并且对于斜直线,圆弧等图形,传统的图形处理需要用很多像素点去描述,这样会导致生成的autocad多段线顶点过多,对于后续的操作带来很多大不便。如:顶点过多的多段线用于3d建模刷新效率太低。



技术实现要素:

本发明为克服上述现有技术所述的至少一种缺陷,提供一种autocad建筑二维图快速提取并生成楼层轮廓线的方法,通过设置避开建筑楼层二维图的一些不需要的突出部分,提取楼层外边界的特征点,并且用这些特征点直接在autocad上直线生成近似的多段线,去描述楼层外边界。

为解决上述技术问题,本发明采用的技术方案是:

提供一种autocad建筑二维图快速提取并生成楼层轮廓线的方法,具体步骤如下:

在软件autocad中框选边界部分的实体;并且对框选的实体中非水平和非垂直的直线进行分类标注,直线中,非水平和非垂直的直线标记为a,水平和垂直的直线归记为c,圆弧标记为b;

(1)在步骤(1)之后,将直线和直线、直线和圆弧、圆弧和圆弧之间的交点坐标都找出来标记为一个集合d;在autocad软件上通过人机交互,提示让用户点选一条线作为起始外轮廓边界,记为s;

(2)在步骤(2)之后,将所框选的实体进行图像数字化,即将标记后的a、b、c、d、s分别给不同的像素值;

(3)在步骤(3)之后,设定外墙轮廓迭代的方向,设定顺时针为迭代方向,即选定起始外围轮廓、startpoint2点、startpoint1点、endpiont点;

(4)在步骤(4)之后,进行算法的计算,以startpoint1点,statrpiont2点作为一个向量的起点和终点,以startpoint2点的八邻域像素点为搜索范围,再以startpoint2为向量的起点,以八邻域像素点作为向量的终点;然后把向量替换为向量再次进行判断,找出新的向量一直循环到八邻域出现endpiont点则跳出循环;;

(5)在步骤(5)之后,找到建筑楼层二维图的边界像素点集合d;对这些像素点进行采样,取出特征点;

(6)在步骤(6)之后,图像数字化后,像素图和autocad原始图的坐标的比列都不一样,下面对像素图的像素点坐标做变换,旨在得到autocad原图一致的坐标点,从而便于autocad直接生成楼层外边界多段线。

优选地,在步骤(3)中,设定类a的像素值为1,类b的像素值为2,类c的像素值为3,类s的像素点为0。

优选地,在步骤(4)设定外墙轮廓迭代的方向中,具体步骤如下:

若步骤(4)选择的是最下边界作为起始外围轮廓,则把最左的0像素点作为startpoint2点,次最左的0像素点作为startpoint1点,把最右的0像素点作为endpiont点;若步骤(4)选择的是最上边界作为起始外围轮廓,则把最右的0像素点作为startpoint2点,次最右的0像素点作为startpoint1点,把最左的0像素点作为endpiont点;若步骤(4)选择的是最右边界作为起始外围轮廓,则把最下的0像素点作为startpoint2点,次最下的0像素点作为startpoint1点,把最上的0像素点作为endpiont点;若步骤(4)选择的是最左边界作为起始外围轮廓,则把最上的0像素点作为startpoint2点,次最上的0像素点作为startpoint1点,把最下的0像素点作为endpiont点。

优选地,在步骤(5)中,算法的计算的具体步骤如下:

(i)以步骤(4)中的startpoint1,statrpiont2作为一个向量的起点和终点,以startpoint2的八邻域像素点为搜索范围,再以startpoint2为向量的起点,以八邻域像素点作为向量的终点(已选的边界像素点不进行重复判断);计算向量和向量的余弦值;其中为像素点坐标;从而得出余弦角的公式为:

且计算向量和向量的叉乘:

(ii)进行判断;如果向量和向量的叉乘值大于0,则θ1=θ1,如果叉乘值小于0,则θ1=-θ1,最后取θ1~θ8中最大θ值对应的向量为目标向量,向量的终点为我们要找的外边界像素点;

(iii)设定再以新找到的像素点的八零域进行上述判断,找出下个外边界像素点;方法的几何含义是:以顺时针的方向循环时,边界像素点总在上一次向量的最左边;向量的叉乘的正负能判断向量先对向量时处于左边还是右边,结合θ角能求出相对与向量最左的向量,且对应的θ角最大。

优选地,在步骤(iii)中,

在startpoint2的八邻域内有向量,将向量分别与向量按照上面所述求出θ1和θ2的值,得到θ1<θ2,则选择向量为对应的像素值为4的点为外边界像素点(contourpoint);接着向量变为刚才得到的向量,再以contourpoint的八邻域像素点进行下次判断,一直循环到contourpoint的八邻域出现endpoint点则跳出循环;每次搜索的八邻域中,如果含有像素值为4的像素点,在找到外边界像素点(contourpoint)后,把与contourpoint点最近的像素值为4的点激活。

优选地,在步骤(7)中,

对集合d1的每个像素点坐标进行坐标变换,公式如下:

为变换后的坐标,为变换前的坐标,并即变换后的点集合为d2。

优选地,在步骤(7)中,在autocad上输入一个建筑二维图边界的放置基准点setpoint(即在该点生成楼层边界多段线);假设以点集合为d2第一个像素点与setpoint坐标对应。setpoint.x为setpoint的横坐标,setpoint.y因为setpoint的纵坐标。δx为基准点横坐标和第一个像素点横坐标的差值,δy为基准点横坐标和第一个像素点纵坐标的差值。

然后对点集合d2每一个点进行变换,即

优选地,在步骤(7)中,求1个像素点对应实际工程图中的距离(即使像素点距离大小与实际建筑二维图距离一致),记为r;具体步骤如下:根据建筑二维图的边界外形,选择最上最下点(或最左最右点);若选择的是最上最下点,则记录这两点的纵坐标差δd,若选择的是最左最右点则记录这两点的横坐标差δd;对应的求出点集合d1中的最上最下像素点的纵坐标差δd(或者最左最右像素点横坐标差δd)

优选地,在步骤(7)中,生成建筑二维楼层边界线的具体步骤如下:以点集合d2的第一个点为标准点,对其余的像素点坐标进行r比例变换,假设点集合d2第一个点为rate_point1,其余点为rate_point_n;x代表横坐标,y代表纵坐标;δpx两点间的横像素坐标差;

δpx=rate_point_n.x-rate_point1.x

δpy=rate_point_n.y-rate_pointl.y

rate_point_n.x=rate_point1.x+r*δpx

rate_point_n.y=rate_point1.y+r*δpy

记经过该步骤变换的像素点坐标为点集合d3,点集合d3则为建筑二维楼层边界图的特征点,用这个点集d3作为autocad的多段线顶点,则可以在基点setpoint处生成建筑二维楼层边界线

与现有技术相比,本发明的有益效果是:

本发明提供一种autocad建筑二维图快速提取并生成楼层轮廓线的方法,通过设置避开建筑楼层二维图的一些不需要的突出部分,提取楼层外边界的特征点,并且用这些特征点直接在autocad上直线生成近似的多段线,去描述楼层外边界。本发明把斜直线、圆弧和非斜直线归为三类,分别以不同的像素值表示(有利于接下来取特征点,使得较少的特征点就可以描述上述三类图元),再以像素值为4的像素点表示autocad的图元交点(为了跳出边界进入建筑二维图的突出部分),能快速找到建筑二维图的楼层边界特征点,并用这些特征点生成autocad上的多段线,大大的减少了人工操作。

附图说明

图1为本发明现有技术处理的图形外围轮廓的结构示意图。

图2为本发明的流程图。

图3为本发明步骤(6)中边界像素点寻找的示意图。

图4为点集合d生成多段线的示意图。

图5为坐标变换的结构示意图。

图6为本发明的具体工作流程图。

图7为算法生成的效果图。

具体实施方式

下面结合具体实施方式对本发明作进一步的说明。其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本专利的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。

实施例

如图1至7所示为本发明一种autocad建筑二维图快速提取并生成楼层轮廓线的方法的实施例,具体步骤如下:

(1)在软件autocad中框选边界部分的实体;并且对框选的实体中非水平和非垂直的直线进行分类标注,直线中,非水平和非垂直的直线标记为a,水平和垂直的直线归记为c,圆弧标记为b;

(2)在步骤(1)之后,将直线和直线、直线和圆弧、圆弧和圆弧之间的交点坐标都找出来标记为一个集合d;在autocad软件上通过人机交互,提示让用户点选一条线作为起始外轮廓边界,记为s;

(3)在步骤(2)之后,将所框选的实体进行图像数字化,即将标记后的a、b、c、d、s分别给不同的像素值;

(4)在步骤(3)之后,设定外墙轮廓迭代的方向,设定顺时针为迭代方向,即选定起始外围轮廓、startpoint2点、startpoint1点、endpiont点;

(5)在步骤(4)之后,进行算法的计算,以startpoint1点,statrpiont2点作为一个向量的起点和终点,以startpoint2点的八邻域像素点为搜索范围,再以startpoint2为向量的起点,以八邻域像素点作为向量的终点;然后把向量替换为向量再次进行判断,找出新的向量一直循环到八邻域出现endpiont点则跳出循环;

(6)在步骤(5)之后,找到建筑楼层二维图的边界像素点集合d;对这些像素点进行采样,取出特征点;

(7)在步骤(6)之后,图像数字化后,像素图和autocad原始图的坐标的比列都不一样,下面对像素图的像素点坐标做变换,旨在得到autocad原图一致的坐标点,从而便于autocad直接生成楼层外边界多段线。

其中,在步骤(3)中,设定类a的像素值为1,类b的像素值为2,类c的像素值为3,类s的像素点为0。

另外,在步骤(4)设定外墙轮廓迭代的方向中,具体步骤如下:

若步骤(4)选择的是最下边界作为起始外围轮廓,则把最左的0像素点作为startpoint2点,次最左的0像素点作为startpoint1点,把最右的0像素点作为endpiont点;若步骤(4)选择的是最上边界作为起始外围轮廓,则把最右的0像素点作为startpoint2点,次最右的0像素点作为startpoint1点,把最左的0像素点作为endpiont点;若步骤(4)选择的是最右边界作为起始外围轮廓,则把最下的0像素点作为startpoint2点,次最下的0像素点作为startpoint1点,把最上的0像素点作为endpiont点;若步骤(4)选择的是最左边界作为起始外围轮廓,则把最上的0像素点作为startpoint2点,次最上的0像素点作为startpoint1点,把最下的0像素点作为endpiont点。

其中,在步骤(5)中,算法的计算的具体步骤如下:

(i)以步骤(4)中的startpoint1,statrpiont2作为一个向量的起点和终点,以startpoint2的八邻域像素点为搜索范围,再以startpoint2为向量的起点,以八邻域像素点作为向量的终点(已选的边界像素点不进行重复判断);计算向量和向量的余弦值;其中为像素点坐标;从而得出余弦角的公式为:

且计算向量和向量的叉乘:

(ii)进行判断;如果向量和向量的叉乘值大于0,则θ1=θ1,如果叉乘值小于0,则θ1=-θ1,最后取θ1~θ8中最大θ值对应的向量为目标向量,向量的终点为我们要找的外边界像素点;

(iii)设定再以新找到的像素点的八零域进行上述判断,找出下个外边界像素点;方法的几何含义是:以顺时针的方向循环时,边界像素点总在上一次向量的最左边;向量的叉乘的正负能判断向量先对向量时处于左边还是右边,结合θ角能求出相对与向量最左的向量,且对应的θ角最大。

另外,在步骤(iii)中,

在startpoint2的八邻域内有向量,将向量分别与向量按照上面所述求出θ1和θ2的值,得到θ1<θ2,则选择向量为对应的像素值为4的点为外边界像素点(contourpoint);接着向量变为刚才得到的向量,再以contourpoint的八邻域像素点进行下次判断,一直循环到contourpoint的八邻域出现endpoint点则跳出循环;每次搜索的八邻域中,如果含有像素值为4的像素点,在找到外边界像素点(contourpoint)后,把与contourpoint点最近的像素值为4的点激活。

其中,在步骤(7)中,对集合d1的每个像素点坐标进行坐标变换,公式如下:

为变换后的坐标,为变换前的坐标,并即变换后的点集合为d2。

另外,在步骤(7)中,在autocad上输入一个建筑二维图边界的放置基准点setpoint(即在该点生成楼层边界多段线);假设以点集合为d2第一个像素点与setpoint坐标对应。setpoint.x为setpoint的横坐标,setpoint.y因为setpoint的纵坐标。δx为基准点横坐标和第一个像素点横坐标的差值,δy为基准点横坐标和第一个像素点纵坐标的差值。

然后对点集合d2每一个点进行变换,即

其中,在步骤(7)中,求1个像素点对应实际工程图中的距离(即使像素点距离大小与实际建筑二维图距离一致),记为r;具体步骤如下:根据建筑二维图的边界外形,选择最上最下点(或最左最右点);若选择的是最上最下点,则记录这两点的纵坐标差δd,若选择的是最左最右点则记录这两点的横坐标差δd;对应的求出点集合d1中的最上最下像素点的纵坐标差δd(或者最左最右像素点横坐标差δd)

另外,在步骤(7)中,生成建筑二维楼层边界线的具体步骤如下:以点集合d2的第一个点为标准点,对其余的像素点坐标进行r比例变换,假设点集合d2第一个点为rate_point1,其余点为rate_point_n;x代表横坐标,y代表纵坐标;δpx两点间的横像素坐标差;

δpy=rate_point_n.x-rate_point1.x

δpy=rate_point_n.y-rate_point1.y

rate_point_n.x=rate_point1.x+r*δpx

rate_point_n.y=rate_point1.y+r*δpy

记经过该步骤变换的像素点坐标为点集合d3,点集合d3则为建筑二维楼层边界图的特征点,用这个点集d3作为autocad的多段线顶点,则可以在基点setpoint处生成建筑二维楼层边界线。

具体的原理步骤如下:

(1)先在autocad软件上框选边界部分的实体。(由于建筑平面图一般都很复杂,用autocad有选择性的框选边界附近部分,能加速算法的实现)。

(2)把框选的实体中非水平和非垂直的直线识别出来归为类a,把圆弧识别出来作为类b,把除了上述说明的实体识别出来作为类c。

(3)然后把直线和直线、直线和圆弧、圆弧和圆弧之间的交点坐标都找出来作为一个集合d。(这里只求上述三种实体的交点,是因为一般建筑二维图的边界都由这三种实体组成,如果该边界还有其他类型实体组成,则可以把它们的交点加上,交点用于后面的算法,处理方式一样)。人机交互点选一条(最右,最右最上或者最下)边界作为起始外围轮廓边界,记为类s。

(4)把上述的所框选的实体进行图像数字化,数字化过程中,类a、类b、类c、类s分别给不同的像素值(这里假设类a给像素值1,类b给像素值2,类c给像素值3,类s给像素点0),对于3中所述的交点,把交点所在的像素点的像素值设置成4.此外,类s还要记录它是属于类a、b、c的哪一类。

(5)规定外墙轮廓迭代的方向,本说明书以顺时针为迭代方向。若步骤3选择的是最下边界作为起始外围轮廓,则把最左的0像素点极为startpoint2点,次最左的0像素点作为startpoint1点,把最右的0像素点作为endpiont点。(若步骤3选择的是最上边界作为起始外围轮廓,则把最右的0像素点极为startpoint2点,次最右的0像素点作为startpoint1点,把最左的0像素点作为endpiont点。若步骤3选择的是最右边界作为起始外围轮廓,则把最下的0像素点极为startpoint2点,次最下的0像素点作为startpoint1点,把最上的0像素点作为endpiont点。若步骤3选择的是最左边界作为起始外围轮廓,则把最上的0像素点极为startpoint2点,次最上的0像素点作为startpoint1点,把最下的0像素点作为endpiont点。)

(6)算法的主要部分是,以步骤5的startpoint1,statrpiont2作为一个向量的起点和终点,以startpoint2的八邻域像素点为搜索范围,再以startpoint2为向量的起点,以八邻域像素点作为向量的终点(已选的边界像素点不进行重复判断)。计算向量和向量的余弦值。其中为像素点坐标。

计算向量和向量的叉乘:

如果向量和向量的叉乘值大于0,则θ1=θ1,如果叉乘值小于0,则θ1=-θ1,最后取θ1~θ8中最大θ值对应的向量为目标向量,向量的终点为我们要找的外边界像素点。然后再以新找到的像素点的八零域进行上述判断,找出下个外边界像素点。方法的几何含义是:以顺时针的方向循环时,边界像素点总在上一次向量的最左边。向量的叉乘的正负能判断向量先对向量时处于左边还是右边,结合θ角能求出相对与向量最左的向量(对应的θ角最大)。如图2所示,在startpoint2的八邻域内有向量,将向量分别与向量按照上面所述求出θ1和θ2的值,得到θ1<θ2,则选择向量为对应的像素值为4的点为外边界像素点(contourpoint)。接着向量变为刚才得到的向量,再以contourpoint的八邻域像素点进行下次判断,一直循环到contourpoint的八邻域出现endpoint点则跳出循环。此间所找的contourpoint和像素值为0的像素点构成了建筑平面图的外边界像素点集合d。

(7)上述步骤每次搜索的八邻域中,如果含有像素值为4的像素点,在找到外边界像素点(contourpoint)后,把与contourpoint点最近的像素值为4的点激活。

(8)如果步骤6遇到八邻域中没有可选的像素点了,且没有回到endpoint点,那说明程序进入了突出边界路径。此时需要把循环点跳回到最近激活的像素值为4的点,从这个点八邻域进行步骤6的边界像素点的寻找。寻找过程不能与之前走过的突出边界路径一样,即在最近激活的4像素点八领域寻找新的边界路径。如果循环点跳回最近激活的4像素值点依旧没有新的路径选择,则继续往上一个激活的4像素值点调回,重复上述寻找步骤。举例如图3:红色的方向皆不是我们想要找的建筑二维图边界,当步骤6的循环到了a方向的3像素点时,已经无法继续循环下去,则需要跳回最近激活的4像素点,从该店继续步骤6判断,选择到b方向,此时4像素点再次被激活,又到b方向尽头时,发现无法再进行下去,则又跳回4像素点,找到了c方向。接着按照步骤6会继续走到d方向尽头,又出现无法循环的且没有回到endpoint的情况,则跳回最近激活的4像素点,发现没有新的路径可以走,则该4像素点没被激活,继续往上一个4像素点跳回,则可以找到e方向。如图2所示。

(9)根据前面的步骤,我们能找到建筑楼层二维图的边界像素点集合d。下面则对这些像素点进行采样,因为该集合的点太多,最终生成的autocad的多段线不需要这么多点,只需要特征点。如果把全部的点集合d都用来生成多段线,则会使得画出来的autocad多段线的点太多,给以后的边界可视化和使用带来很大不便。如图3所示。把步骤10、11、12优化后的点集记为集合d1。

(10)把相邻的像素值为3或者4的点进行判断,是否在统一直线上。具体的方法为:判断相邻的像素值为3的像素点的横坐标或纵坐标是否一致。如果如果一致,说明它们是一条直线上的点,则只取首尾两点,其他的像素点删除。

(11)把相邻的像素点为1的点集只取首尾两点,取完之后,若…11411…这种情况,可以通过判断前一对11像素点的斜率,和后一对11像素点的斜率是否一致,若一致或者两者斜率的差低于阈值k,可将两者合并为一条斜直线。(k的值可以视情况而给)

(12)相邻像素值为2的点集,说明这些点集是圆弧实体组成的,这可以根据实际需要的建筑二维图边界的精度来确定一个阈值f。这个阈值f决定最后边界多段线拟合圆弧的精度。如阈值f取3,即在相邻像素点为2的点集中,每3个像素点,取一个点。

(13)图像数字化后,像素图和autocad原始图的坐标的比列都不一样,下面对像素图的像素点坐标做变换,旨在得到autocad原图一致的坐标点,用于autocad直接生成楼层外边界多段线。一般情况下,图像数字化之后的坐标系如图3左边所示,而autocad的坐标系则如图4右边所示,故需要对集合d1的每个像素点坐标进行坐标变换,公式如下:

为变换后的坐标,为变换前的坐标,并即变换后的点集合为d2。

(14)在autocad上输入一个建筑二维图边界的放置基准点setpoint(即在该点生成楼层边界多段线)。假设以点集合为d2第一个像素点与setpoint坐标对应。setpoint.x为setpoint的横坐标,setpoint.y因为setpoint的纵坐标。δx为基准点横坐标和第一个像素点横坐标的差值,δy为基准点横坐标和第一个像素点纵坐标的差值。

然后对点集合d2每一个点进行变换,即

(15)求1个像素点对应实际工程图中的距离(即使像素点距离大小与实际建筑二维图距离一致),记为r。根据建筑二维图的边界外形,选择最上最下点(或最左最右点)。若选择的是最上最下点,则记录这两点的纵坐标差δd,若选择的是最左最右点则记录这两点的横坐标差δd。对应的,求出点集合d1中的最上最下像素点的纵坐标差δd(或者最左最右像素点横坐标差δd)。

(16)以点集合d2的第一个点为标准点,对其余的像素点坐标进行r比例变换。假设点集合d2第一个点为rate_point1,其余点为rate_point_n。x代表横坐标,y代表纵坐标。δpx两点间的横像素坐标差

δpx=rate_point_n.x-rate_point1.x

δpy=rate_point_n.y-rate_point1.y

rate_point_n.x=rate_point1.x+r*δpx

rate_point_n.y=rate_point1.y+r*δpy

记经过步骤16变换的像素点坐标为点集合d3。点集合d3则为建筑二维楼层边界图的特征点,用这个点集d3作为autocad的多段线顶点,则可以在基点setpoint处生成建筑二维楼层边界线。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

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