CN105279787B - 基于拍照的户型图识别生成三维房型的方法 - Google Patents
基于拍照的户型图识别生成三维房型的方法 Download PDFInfo
- Publication number
- CN105279787B CN105279787B CN201510156080.4A CN201510156080A CN105279787B CN 105279787 B CN105279787 B CN 105279787B CN 201510156080 A CN201510156080 A CN 201510156080A CN 105279787 B CN105279787 B CN 105279787B
- Authority
- CN
- China
- Prior art keywords
- line
- rectangle
- vertical
- wall
- horizontal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明提供了一种基于拍照的户型图识别生成三维房型的方法,用于解决传统的基于户型图的三维重建方法不能适用于拍照版户型图的问题。本发明针对拍照户版型图的特点,首先对拍照版户型图进行矫正处理,使矫正后的图像质量与户型图电子版近似,以方便后续的户型图识别;接着针对拍照版户型图特点进行墙体识别,对墙体进行尺寸校正和闭合,生成跨平台的JSON文件;最后Unity3D利用JSON文件的墙体信息进行三维重建。本发明实现对拍照户型图的识别并生成三维房型,能有效解决拍照户型图图像角度倾斜问题,并提供了基于墙体相交锚点的墙体计算方法,方便后续生成的三维墙体可以基于锚点自由拖动拉伸。
Description
技术领域
本发明涉及图像处理、虚拟现实、三维重建等技术领域,具体涉及一种基于拍照的户型图识别生成三维房型的方法。
背景技术
随着中国房地产业的快速发展以及现代年轻人强烈的自主意识,越来越多的年轻人希望能把自己的装修创意应用于自己的房屋装修。但是自主装修者本身不是专业设计师,往往又担心实际的装修效果与自己的创意想象相差太大。为解决这个矛盾,把平面户型图转化为3D户型图,购房者自己预先在3D模型上模拟装修效果,然后再去实际装修房屋。另一方面,随着房地产开发商之间竞争越来越激烈,房地产开发商也越来越需要一种现实增强的技术以立体呈现房屋效果,增强购房人的现实体验,促进房屋销售。目前房地产销售展示仅仅依靠一张平面户型图,不能适应现实需求。所以无论从自主装修者、购房人的角度来看,还是从房地产开发商的角度来看,允许用户自主加载户型图,然后基于户型图进行三维重建从而实现3D展示十分必要。
户型图的来源大致有两种。一种是电子版户型图。这种户型图广泛存在于各大购房网站、家居装修网站、房地产网站。用户可以从这些网站下载与自己户型相近的户型图。这类户型图的特点是图像清晰、标准,可以准确地被图像识别方法识别。如果是正在购房的用户,可以方便地从地产商销售那里获取户型图电子版。如果是已购房用户,就不一定能从房地产销售那里获取户型图电子版。相关网站上也可以下载户型图电子版,只是这些户型图与用户自己的房屋在户型和尺寸上都相差较大。
另一种户型图是拍照版户型图。如果没有自己房屋的电子版户型图,用户可以对自己的户型图宣传彩页拍照;如果没有户型图宣传彩页,用户可以自己手绘户型图,然后拍照。拍照版户型图方式的优点是可以简单方便地获取图像,用于拍照的工具可以是相机、手机、平板电脑等。在电子产品成为日用品的当下,相机、手机、平板电脑等工具非常普遍。这种方式的缺点是:所获取图像受拍摄光线、距离、角度等诸多因素影响,图像质量与电子版图像相比,效果很差。如图1所示为从宣传册上拍摄的户型图,图2是拍摄的手绘户型图。拍照版户型图图像的缺陷有:图像光照不均、图像明暗不均、图像角度倾斜、图像扭曲、图像不清晰等。拍照版户型图图像的种种缺陷,对于三维重建来说,将是一个巨大的挑战。
目前基于户型图进行三维重建的方法分为三种。第一种方法是直接利用CAD等绘图软件绘制的矢量建筑图,在矢量图中分析识别户型结构,然后三维重建(参考文献1:基于结构构件识别的户型图三维重建算法研究[硕士学位论文].北京:清华大学,2013);第二种方法是首先对图像进行矢量化扫描,然后在矢量图中分析识别户型结构,最后三维重建(参考文献2:Generating 3D Building Models from Architectural Drawings:ASurvey.IEEE Computer Graphics and Applications,2009,29(1):20-30);第三种方法是直接对扫描图像进行结构识别,然后三维重建(参考文献3:Improved Automatic Analysisof Architectural Floor Plans.International Conference on Document Analysisand Recognition,2011:864-869)。第一种方法的优点是避免了图像矢量化过程,噪声和干扰与扫描图像相比几乎没有,相关矢量信息完整准确,三维重建准确率最高;缺点是适应范围窄,仅仅适应于利用CAD等绘图软件绘制的矢量建筑图。后两种方法的优点是可以直接针对户型图图像进行三维建模,扩大了适用范围;缺点是户型图结构识别准确率不高,对户型图图像本身要求严格,不能适应设计不规范、有背景信息的类型。由于拍照版户型图具有“图像质量差、图像倾斜扭曲、图像背景杂乱、户型图设计不规范”等现实特点,上述三种基于户型图的三维重建方法均不能适用。因此,本发明提出了一种基于拍照的户型图识别生成三维房型的方法。
发明内容
本发明要解决的问题是:传统的基于户型图的三维重建方法不能适用拍照版户型图,无法提供现场实时的三维重建体验。为了解决该问题,本发明提供了一种基于拍照的户型图识别生成三维房型的方法。
具体的基于拍照的户型图识别生成三维房型的方法,分为三个部分。第一部分为“图像矫正”,包括下列的步骤1到步骤9;第一部分为“墙体识别”,包括下列的步骤10到步骤22;第三部分为“三维重建”,包括下列的步骤23到步骤24。详细步骤如下:
步骤1:对图像进行初步预处理,得到户型图的灰度图;初步预处理包括图像去噪、图像增强和灰度转换;
步骤2:对灰度图进行OTSU二值化处理;OTSU表示最大类间方差法;
步骤3:对步骤2得到的图提取最大边缘轮廓,得到边缘图像;
步骤4:对边缘图像进行Hough变换得到直线坐标信息;
步骤5:从步骤4所得直线中提取最上、最下、最左和最右四条线段;
步骤6:根据四条线段计算透视变换的变换矩阵所需的两组消隐点;
步骤7:计算透视变换的变换矩阵;
步骤8:根据变换矩阵,对原图像的灰度图像进行透视变换,获得矫正后的灰度图像;
步骤9:剪取户型图区域;
步骤10:对步骤9剪取的户型图区域进行外形轮廓检测;
步骤11:采用墙体阈值分割方法对步骤10得到的户型图进行处理,去除与墙体无关区域,得到二值图;
步骤12:对二值图进行腐蚀和膨胀;
步骤13:对步骤12处理后的二值图进行边缘检测,得到边缘图像;
步骤14:对步骤13得到的边缘图像进行Hough变换,将墙体边缘线拟合成线段;
步骤15:对步骤14得到的边缘线段根据角度分类为横线和竖线两个集合;
步骤16:对横线和竖线集合中的线段进行矫正拉直;
步骤17:根据横线集合和竖线集合,获取墙体的简化线;
步骤18:简化线归并;
步骤19:根据简化线生成基于锚点的墙体;
步骤20:根据墙体之间的信息进行门识别;
步骤21:根据墙体之间的信息进行窗识别;
步骤22:生成JSON文件,记录墙体、门窗信息;
步骤23:利用软件Unity3D读取JSON文件,创建墙体、门窗;
步骤24:三维重建完成,漫游展示,装修展示。
所述步骤6中获取矫正前后的所需的两组消隐点,具体步骤为:
步骤6.1.计算最左、最右、最上、最下四条线段ll、lr、lt、lb所在的直线lleft、lright、ltop、lbottom;
步骤6.2.计算直线lleft、lright、ltop、lbottom两两直线所形成的交点,左上、右上、左下、右下交点分别设为:p1(x1,y1)、p2(x2,y2)、p3(x3,y3)、p4(x4,y4);
步骤6.3.计算直线lleft、lright、ltop、lbottom所围成四边形对角线的交点p5(x5,y5);
步骤6.4.计算x坐标和y坐标的矫正量dh和dv:dh=(x2-x1+x4-x3)/4;dv=(y3-y1+y4-y2)/4;
步骤6.5.计算变换后左上、右上、左下、右下消隐点p1'(x1',y1')、p2'(x2',y2')、p3'(x3',y3')、p4'(x4',y4'):
x1'=x5-dh;y1'=y5-dv;x2'=x5+dh;y2'=y5-dv;
x3'=x5-dh;y3'=y5+dv;x4'=x5+dh;y4'=y5+dv。
所述的步骤9中,根据步骤6得到的消隐点坐标,向四边放宽d个像素,在矫正的图像中剪取户型图区域,d=(dh+dv)/10。
所述步骤17,根据竖线集合和横线集合获取墙体简化线,设竖线集合或横线集合中任意一条线段l1(x1,y1,x2,y2),进行如下步骤:
步骤17.1,在线段l1所在集合中寻找匹配墙线l2(x1',y1',x2',y2'),l2要满足如下条件:
a.被匹配墙线l2从未被匹配过;
b.l1和l2之间的距离d与l1和其他未被匹配的线段之间距离相比,d是最短的;d=|x1-x1'|;
c.l1和l2之间所包围的矩形区域是墙体区域。
步骤17.2,确定l1和l2对应的简化线sl(sx1,sy1,sx2,sy2,width),其中(sx1,sy1)和(sx2,sy2)为简化线的两个端点坐标,width为简化线所代表的墙体的宽度;
若l1和l2为竖线,sx1=(x1+x1')/2;sy1=Max(y1,y1');sx2=sx1;sy2=Min(y2,y2');width=|x1-x1'|;将简化线sl加入竖线简化线集合;
若l1和l2为横线,先获得两个中间参数lx和rx,lx=Max(x1,x1');rx=Min(x2,x2');则坐标和宽度为:sx1=(lx+rx)/2;sy1=y1;sx2=sx1;sy2=y1';width=|rx-lx|;将简化线sl加入横线简化线集合。
步骤17.3,根据l1和l2的相对位置关系,进行截断操作,若l1和l2为竖线则在垂直方向上进行判断,若l1和l2为横线则在水平方向上进行判断:
A.在对应的方向上,若l1和l2完全重合,不进行截断;
B.在对应的方向上,若l1居于l2中间,以l1为基准在l2上截断,l2被截断后遗留的两端分别形成新的线段,将新的线段加入对应的竖线或者横线集合中;
C.在对应的方向上,若l1居于l2的一端,以l1为基准在l2上截断,l2被截断后遗留的另一端形成新的线段,将新的线段加入对应的竖线或者横线集合中。
所述步骤19基于锚点的墙体生成,具体步骤如下;
步骤19.1,把简化线集合SimplifyLinesU中的简化线sl(sx1,sy1,sx2,sy2,width)展开成矩形rect,矩形rect以简化线sl为垂直方向的中轴线,以width为矩形宽度;设(x1,y1)、(x2,y2)、(x3,y3)和(x4,y4)分别为矩形左上、右上、左下和右下的四个顶点坐标;
步骤19.2,如果矩形rect的高度大于宽度的2倍,矩形rect加入竖直矩形集合LineRecV,否则加入水平矩形集合LineRecH;
步骤19.3,设LineRecV中竖直矩形RectV表示为(x1,y1,x2,y2,x3,y3,x4,y4),设LineRecH中的水平矩形RectH表示为(x1',y1',x2',y2',x3',y3',x4',y4'),则确定RectV和RectH的位置关系如下:
A1.竖直矩形RectV和水平矩形RectH没有相交区域;
A2.竖直矩形RectV和水平矩形RectH有相交区域,且竖直矩形RectV的x1、x2居于水平矩形RectH的x1'、x2'之间;
A3.计算竖直矩形RectV四个顶点和水平矩形RectH四个顶点直接的距离,如下列16个距离公式:
d11=(x1-x1′)2+(y1-y1′)2;d21=(x2-x1′)2+(y2-y1′)2;
d12=(x1-x2′)2+(y1-y2′)2;d22=(x2-x2′)2+(y2-y2′)2;
d13=(x1-x3′)2+(y1-y3′)2;d23=(x2-x3′)2+(y2-y3′)2;
d14=(x1-x4′)2+(y1-y4′)2;d24=(x2-x4′)2+(y2-y4′)2;
d31=(x3-x1′)2+(y3-y1′)2;d41=(x4-x1′)2+(y4-y1′)2;
d32=(x3-x2′)2+(y3-y2′)2;d42=(x4-x2′)2+(y4-y2′)2;
d33=(x3-x3′)2+(y3-y3′)2;d43=(x4-x3′)2+(y4-y3′)2;
d34=(x3-x4′)2+(y3-y4′)2;d44=(x4-x4′)2+(y4-y4′)2;
A4.对这16个距离进行排序,找到最小的距离d,
如果d=d13,竖直矩形RectV第1个顶点和水平矩形RectH第3个顶点重合相交;
如果d=d31,竖直矩形RectV第3个顶点和水平矩形RectH第1个顶点重合相交;
如果d=d24,竖直矩形RectV第2个顶点和水平矩形RectH第4个顶点重合相交;
如果d=d42,竖直矩形RectV第4个顶点和水平矩形RectH第2个顶点重合相交;
如果d=d21,竖直矩形RectV第2个顶点和水平矩形RectH第1个顶点重合相交;
如果d=d12,竖直矩形RectV第1个顶点和水平矩形RectH第2个顶点重合相交;
如果d=d34,竖直矩形RectV第3个顶点和水平矩形RectH第4个顶点重合相交;
如果d=d43,竖直矩形RectV第4个顶点和水平矩形RectH第3个顶点重合相交;
步骤19.4,利用步骤19.3中竖直矩形和水平矩形位置关系,将竖直矩形集合LineRecV中的任意竖直矩形RectV,对水平矩形集合LineRecH中的任意水平矩形RectH进行截断或者修正,将修正后的水平矩形加入墙体集合Walls;修正后的矩形都基于锚点。
步骤19.5,利用步骤19.3中竖直矩形和水平矩形位置关系,将水平矩形集合LineRecH中的任意水平矩形RectH,对竖直矩形集合LineRecV中的任意竖直矩形RectV进行截断或者修正,将修改后的竖直矩形加入墙体集合Walls;修正后的矩形都基于锚点。
本发明方法的优点与积极效果在于:
(1)本发明提出了一种基于拍照的户型图识别生成三维房型的方法,而传统的基于户型图的三维重建方法不能适用于拍照版户型图,无法提供现场实时的三维重建体验。
(2)本发明中提出了一种拍照户型图的矫正方法,能有效解决拍照户型图图像角度倾斜,以便进行后续的户型图墙体识别,所适用的拍照户型图,不仅包括常见的地产商宣传彩页户型图,还包括用户自己手绘的户型图。
(3)本发明中提出了一种基于墙体相交锚点的墙体计算方法,以方便后续生成的三维墙体可以基于锚点自由拖动拉伸。
由于三维户型具有真实感和直观性的特征,本发明在现实中将会有广泛的应用,可以应用于房地产商房屋展示、房屋水电设计模拟、房屋装修模拟。普通用户可以利用三维户型进行室内漫游体验、家具摆放预览、规划空间位置分配、模拟装修效果。
附图说明
图1是一个较倾斜的拍照版户型图;
图2是一个拍照版的手绘户型图;
图3是本发明的基于拍照的户型图识别生成三维房型方法的流程示意图;
图4是对图1进行初步预处理后进行OTSU二值化处理的结果示意图;
图5是对图4进行最大边缘轮廓的结果示意图;
图6是进行畸变前后消隐点的连线图;
图7是本发明实施例中透视变换校正图;
图8是本发明实施例中剪裁后的户型图;
图9是本发明实施例所获得的外围轮廓图;
图10是本发明实施例获得的阈值分割图;
图11是本发明实施例腐蚀膨胀处理后的二值图;
图12是本发明实施例对二值图进行边缘检测得到的边缘图像;
图13是本发明实施例中步骤16中校正拉伸后的横线和竖线集合示意图;
图14是根据横线或竖线获取墙体的简化线的示意图;
图15是本发明实施例归并后的简化线集合示意图;
图16是本发明方法步骤19中竖直矩形和水平矩形的位置关系示意图;
图17是本发明实施例经过步骤19后识别的墙体示意图;
图18是本发明实施例最终识别的户型图;
图19是本发明实施例利用Unity3D读入JSON文件后三维重建的2D视图;
图20是图19对应的2D图在三维重建后的3D视图;
图21是在户型图客厅中漫游的一个示意图;
图22是在3D户型客厅装修后漫游的一个示意图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明针对传统的基于户型图的三维重建方法不能适用拍照版户型图、无法提供现场实时的三维重建体验的问题,提供了一种新颖的基于拍照的户型图识别生成三维房型的方法。本发明所适用的拍照户型图,不仅包括常见的地产商宣传彩页户型图,例如图1;还包括用户自己手绘的户型图,例如图2。本发明针对拍照户版型图的特点,首先对拍照版户型图进行矫正处理,使矫正后的图像质量与户型图电子版近似,以方便后续的户型图识别;接着针对拍照版户型图特点进行墙体识别,对墙体进行尺寸校正和闭合,生成跨平台的JSON文件;最后Unity3D利用JSON文件的墙体信息进行三维重建。
如图3所示,本发明提供的基于拍照的户型图识别生成三维房型的方法,具体步骤如下:
步骤1:初步预处理。
对需要识别的户型图进行预处理,包括图像去噪、图像增强和灰度转换,以获得更加清晰,对比度更强的灰度图。图像去噪可以滤除一些图像传感器引入的噪声;图像增强可以增强图像的对比度,使得墙体的特征更明显;灰度转化使得彩色的户型图变成灰度图以便对图像进行下一步的处理。本发明实施例中对图1进行初步预处理。
步骤2:OTSU二值化处理。
OTSU就是计算出灰度图最佳阈值的方法,也称为大律法或最大类间方差法。通过对灰度图的处理自行得到一个最佳的阈值,并最后用这个阈值二值化灰度图。OTSU二值化方法如下:
(1)先对灰度图进行直方图计算并归一化处理,得到0-255之间每个像素在灰度图中出现的概率,即表示为某个像素在灰度图中出现了n个,灰度图总的像素点为N个,则这个像素的出现概率为Pi=n/N。
(2)每个灰度图可以由阈值k将灰度图分为A,B两大类,很容易得到A,B类在灰度图中的出现概率以及灰度均值。
(3)计算灰度图A、B类的类间方差,在最佳阈值K处,求得的类间方差最大,也就是类间方差最大的那个时刻的阈值就为灰度图的最佳阈值。
本发明实施例中对图1进行初步预处理后,在进行OTSU二值化处理的结果如图4所示。
步骤3:求最大边缘轮廓。
户型图的外围轮廓基本上是由墙体组成,这是一个显著特征。后续的消隐点计算主要集中在最大外围轮廓上。这样处理的优点,一方面可以有效排除拍照户型图中非墙体因素的干扰,另一方面可以减少后续消隐点计算量。
本发明实施例中采用OpenCV的findContours函数来求最大边缘轮廓,这个函数的原型为:
voidfindContours(InputOutputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,int mode,int method,Point offset=Point())
参数说明:
输入图像image必须为一个2值单通道图像;
contours参数为检测的轮廓数组,每一个轮廓用一个point类型的vector表示;
hiararchy参数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0]~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,该值设置为负数。
mode表示轮廓的检索模式,包括:
(1)CV_RETR_EXTERNAL表示只检测外轮廓;
(2)CV_RETR_LIST检测的轮廓不建立等级关系;
(3)CV_RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
(4)CV_RETR_TREE建立一个等级树结构的轮廓。
method为轮廓的近似办法,包括:
(1)CV_CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
(2)CV_CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息。
(3)CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinlchain近似方法。
offset表示代表轮廓点的偏移量,可以设置为任意值。对感兴趣区(ROI)图像中找出的轮廓,并要在整个图像中进行分析时,这个参数还是很有用的。
本步骤利用findContours找到所有轮廓,计算这些轮廓的净面积(减去内包轮廓面积);然后找到净面积最大的轮廓,从而得到最大外围轮廓图像。部分代码如下:
本发明实施例中对图4提取的最大边缘轮廓如图5所示。
步骤4:Hough变换。
Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下,这种变换有着理想的效果。
本发明实施例中采用OpenCV的HoughLinesP函数实现该步骤,minRect为步骤3得到的最大轮廓所围矩形。代码如下:
HoughLinesP函数的原型为:
voidHoughLinesP(InputArrayimage,OutputArray lines,double rho,doubletheta,int threshold,double minLineLength=0,double maxLineGap=0)
其中:image为输入图像,要求是8位单通道图像;lines为输出的直线向量,每条线用4个元素表示,即直线的两个端点的4个坐标值;rho和theta分别为距离和角度的分辨率;threshold为阈值;minLineLength为最小直线长度,如果小于该值,则不被认为是一条直线;maxLineGap为最大直线间隙,如果有两条线段是在一条直线上,它们之间有间隙,如果这个间隙大于该值,则被认为是两条线段,否则是一条线段。
本发明实施例中通过如下代码实现Hough变换:
float gap=minRect[0].size.width/7;
float minlenth=minRect[0].size.width/12;
HoughLinesP(dst,lines,1,CV_PI/180,minlenth,minlenth,gap);
其中,gap表示步骤3所得的最大边缘轮廓宽度的1/7,minlenth表示步骤3所得的最大边缘轮廓宽度的1/12,minRect[0]是步骤3所得的最大边缘轮廓。
HoughLinesP函数中,dst表示经步骤3提取最大边缘轮廓的图像,距离分辨率数值为1,角度分辨率数值为CV_PI/180,阈值设置为minlenth,最小直线长度设置为minlenth,最大直线间隙设置为gap。
通过试验表明,采用所述参数,可有效识别出所需线段。
步骤5:提取符合条件的最上、最下、最左和最右四条线段。
设步骤4得到的直线集合为L,则对于直线集合L的任意线段l(x1,y1,x2,y2),(x1,y1)和(x2,y2)为线段的两个端点坐标。对线段l进行如下计算:
步骤5.1.计算l的夹角和中点坐标(x3,y3)如下:
夹角θ的计算公式为:x3=(x1+x2)/2;y3=(y1+y2)/2。
步骤5.2.最左线段ll需满足两个条件:a.π/4≤θ≤3π/4,b.x3值最小;
步骤5.3.最右线段lr需满足两个条件:a.π/4≤θ≤3π/4,b.x3值最大。
步骤5.4.最上线段lt需满足两个条件:
a.0≤θ≤π/4或3π/4≤θ≤π,b.y3值最小;
步骤5.5.最下线段lb需满足两个条件:
a.0≤θ≤π/4或3π/4≤θ≤π,b.y3值最大。
步骤6:计算矫正前后的两组消隐点。
对于最左、最右、最上、最下线段ll、lr、lt、lb:
步骤6.1.计算线段ll、lr、lt、lb所在的直线lleft、lright、ltop、lbottom;
步骤6.2.计算直线lleft、lright、ltop、lbottom两两直线所形成的交点,左上、右上、左下、右下交点分别设为:p1(x1,y1)、p2(x2,y2)、p3(x3,y3)、p4(x4,y4);
步骤6.3.计算直线lleft、lright、ltop、lbottom所围成四边形对角线的交点p5(x5,y5);
步骤6.4.计算x坐标和y坐标的矫正量dh和dv:dh=(x2-x1+x4-x3)/4;dv=(y3-y1+y4-y2)/4;
步骤6.5.计算变换后左上、右上、左下、右下消隐点p1'(x1',y1')、p2'(x2',y2')、p3'(x3',y3')、p4'(x4',y4'):
x1'=x5-dh;y1'=y5-dv;x2'=x5+dh;y2'=y5-dv;
x3'=x5-dh;y3'=y5+dv;x4'=x5+dh;y4'=y5+dv。
步骤7:计算透视变换的变换矩阵。
根据步骤6得到的畸变前后的消隐点,计算变换矩阵。通用的变换公式为:
u,v是变换前坐标,x,y是变换后坐标,其中x=x'/w',y=y'/w'。
通常w=1,根据矩阵乘法法则,上面的变换公式改写为:
[x,y]对应步骤6.5中的消隐点p1'(x1',y1')、p2'(x2',y2')、p3'(x3',y3')、p4'(x4',y4'),[u,v]对应步骤6.2中的点p1(x1,y1)、p2(x2,y2)、p3(x3,y3)、p4(x4,y4),通常a33=1。把这八个点代入改写后的变换公式,联立方程求取a11,a12,a13,a21,a22,a23,a31,a32,a33。
为所要计算的变换矩阵。
本实例所得的变换矩阵为:
本发明实施例中得到如图6所示的矫正前后的两组消隐点的连线图,比较规则矩形的是矫正后的消隐点的连线图,比较倾斜的是矫正前的消隐点的连线图。
步骤8:透视变换。
透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。透视变换是中心投影的射影变换,在用非齐次射影坐标表达时是平面的分式线性变换。透视变换常用于图像的校正。图7是本发明实施例中进行透视变换矫正后的图像。
步骤9:剪取户型图区域。
根据步骤6中的畸变后的消隐点坐标,向四边放宽d个像素,在透视变换矫正的图像中剪取户型图区域。d为正整数。本发明实施例中设置d=(dh+dv)/10,可取得有效合理的户型图区域。
图8为剪取的户型图区域。
步骤10:轮廓检测。户型图的外围轮廓基本上是由墙体组成,并且外围轮廓之外的区域一般是颜色均匀分布的背景,基于户型图具有的这样的特点,使用传统的自动阈值分割方法可获得户型图的外形轮廓。如图9为本发明实施例所获得的外围轮廓图。
步骤11:对户型图进行墙体自适应阈值分割,得到二值图。
首先根据步骤10检测出的外形轮廓区域进行自适应阈值分割,获得墙体区域;然后计算出墙体区域平均灰度W与非墙体区域平均灰度O,得到墙体分割阈值T=(W+O)/2;最后,利用分割阈值T对步骤9得到的灰度图进行处理,得到二值图。
其中,I(x,y)为户型灰度图在(x,y)点的像素值,r(x,y)为经阈值分割后的图像在(x,y)点的像素。本步骤可以剔除掉家具、地板、装饰物品等干扰信息,只呈现墙体信息,以利于进一步单独对墙体进行识别。如图10为本发明实施例获得的阈值分割图。
步骤12:对步骤11所得的二值图进行腐蚀和膨胀,过滤一些小的干扰信息。如图11为本发明实施例得到的腐蚀膨胀处理后的二值图。
步骤13:对步骤12处理后的二值图进行边缘检测,得到边缘图像。进行边缘检测可检测出墙体的边缘。如图12为本发明实施例在该步骤得到的边缘图像。
步骤14:Hough变换;
对边缘图像进行Hough变换,墙体边缘线被拟合成多条线段Lines。
步骤15:对步骤14得到的边缘线段根据倾斜角度分类为横线和竖线两个集合;
对于线段集合Lines中的任意线段l(x1,y1,x2,y2),(x1,y1)和(x2,y2)为线段的两个端点坐标。线段的分类条件如下:
如果|x1-x2|>len并且|y1-y2|<len,线段l加入横线集合HLines;
如果|y1-y2|>len并且|x1-x2|<len,线段l加入竖线集合VLines;
len为线段的倾斜阈值,通常设置len=5。
步骤16:对横线和竖线集合中的线段进行矫正拉直;
由于横线和竖线可能有一定程度的倾斜,所以需要进行矫正拉直。
对于横线集合HLines中的任意线段hl(x1,y1,x2,y2),拉直后的新坐标为l'(x1',y1',x2',y2')。
x1'=x1;y1'=(y1+y2)/2;x2'=x2;y2'=y1';
对于竖线集合VLines中的任意线段vl(x1,y1,x2,y2),拉直后的新坐标为l'(x1',y1',x2',y2')。
x1'=(x1+x2)/2;y1'=y1;x2'=x1';y2'=y2。
图13为校正拉伸后的横线和竖线集合,数字为线的序号。
步骤17:根据横线集合和竖线集合,计算墙体的简化线;
本步骤要找出线段之间的匹配关系。
一段墙的左右线段或上下线段具有匹配关系,和其它线段不具备匹配关系。具有匹配关系的两条线简化成一条中线,代表一段墙。一段墙具有上下和左右两种匹配,由于他们所围成的矩形区域相等,所以两条简化线归并为一条简化线,这是步骤18要解决的问题。
如图14所示,矩形代表一段墙,是最简单最基本的结构。竖线vl1和竖线vl2具备匹配关系,形成简化线sl1;;横线hl1和横线hl2具备匹关系,形成简化线sl2。由于sl1和sl2重合,所以只保留其中一条简化线。
户型图墙体的简化线集合SimplifyLines中的任意一条简化线sl(x1,y1,x2,y2,width),(x1,y1)和(x2,y2)为简化线上下的两个端点坐标,width为简化线所代表的墙体的宽度。
根据竖线集合VLines获取墙体简化线的方法如下:
步骤17.1,对于竖线集合VLines中的任意一条竖线vl1(x1,y1,x2,y2),对应的匹配墙线vl2(x1',y1',x2',y2'),要满足如下条件:
a.被匹配墙线vl2从未被匹配过;
b.vl1和vl2之间的距离d与vl1和其他未被匹配的线段之间距离相比,d是最短的;
d=|x1-x1'|;
c.vl1和vl2之间所包围的矩形区域是墙体区域,判断是否是墙体区域可以通过统计黑点像素所占比例实现。
步骤17.2,vl1和vl2对应的简化线sl(sx1,sy1,sx2,sy2,width)的计算公式如下:
sx1=(x1+x1')/2;sy1=Max(y1,y1');sx2=sx1;sy2=Min(y2,y2');width=|x1-x1'|;
简化线sl加入竖线简化线集合SimplifyLinesV。
步骤17.3,判断vl1和vl2在垂直方向上的关系,进行截断操作:
a.如果在垂直方向上,vl1和vl2完全重合,不进行截断;
b.如果在垂直方向上,vl1居于vl2中间,以vl1为基准在vl2上截断,vl2被截断后遗留的上端和下端分别形成新的线段,加入竖线集合VLines;
c.如果在垂直方向上,vl1居于vl2的一端,以vl1为基准在vl2上截断,vl2被截断后遗留的另一端形成新的线段,将新的线段加入竖线集合VLines;
横线集合HLines对应的墙体简化线计算方法同上,得到横线简化线集合SimplifyLinesH。横线集合HLines中的任意一条横线hl1(x1,y1,x2,y2),对应的匹配墙线hl2(x1',y1',x2',y2'),hl2要满足步骤17.1中的a,b和c三个条件,即:hl2从未被匹配过;hl1和hl2之间的距离与hl1和其他未被匹配的线段之间距离相比是最短的;hl1和hl2之间所包围的矩形区域是墙体区域。在步骤17.2中,横线hl1和hl2对应的简化线sl(sx1,sy1,sx2,sy2,width)的计算公式为:
lx=Max(x1,x1');rx=Min(x2,x2');sx1=(lx+rx)/2;sy1=y1;sx2=sx1;sy2=y1';width=|rx-lx|;
其中,lx和rx为两个中间参数。将横线hl1和hl2对应的简化线sl加入横线简化线集合。
在步骤17.3中,对于横线hl1和hl2的截断操作,实在水平方向上进行判断,然后截断。
步骤18:简化线归并;
合并横线简化线集合SimplifyLinesH和竖线简化线集合SimplifyLinesV,得到合并后的简化线集合SimplifyLinesU,具体的简化线归并方法如下:
步骤18.1,把竖线简化线集合SimplifyLinesV和横线简化线集合SimplifyLinesH中的一个简化线sl展开成矩形T,该矩形以简化线以垂直方向的中轴线,以width为矩形宽度。
步骤18.2,归并条件如下:
a.如果简化线sl的展开矩形T不被其它展开矩形包围,并且是唯一的,简化线sl加入简化线集合SimplifyLinesU;
b.如果简化线sl的展开矩形T不被其它展开矩形包围,但不是唯一的,只允许其中一条简化线作为唯一代表加入简化线集合SimplifyLinesU,不允许重复;
c.如果简化线sl的展开矩形T是唯一的,但被其它展开矩形包围,简化线sl不能加入简化线集合SimplifyLinesU。
图15为归并后的简化线集合,粗体线为简化线,数字为简化线的序号。
步骤19:根据简化线生成基于锚点的墙体;
在户型图中,横墙和竖墙的相交处称为锚点。如果要创建基于锚点的墙体,就需要在锚点处对横墙和竖墙进行截断或收缩。如果要截断或收缩,就需要判断横墙和竖墙之间的关系。墙体集合Walls中的墙体用矩形wallrect(x1,y1,x2,y2,x3,y3,x4,y4)来表示,(x1,y1)、(x2,y2)、(x3,y3)和(x4,y4)分别为矩形的四个顶点。
详细的生成基于锚点的墙体的方法如下:
步骤19.1,把简化线集合SimplifyLinesU中的简化线sl(sx1,sy1,sx2,sy2,width)展开成矩形rect,这个矩形以简化线为垂直方向的中轴线,以width为矩形宽度。rect(x1,y1,x2,y2,x3,y3,x4,y4),包括矩形左上、右上、左下、右下的四个顶点坐标。矩形rect代表墙体矩形。
步骤19.2,如果矩形rect的高度大于宽度的2倍,矩形rect加入竖直矩形集合LineRecV,否则加入水平矩形集合LineRecH。
步骤19.3,判断LineRecV中的竖直矩形RectV(x1,y1,x2,y2,x3,y3,x4,y4)和LineRecH中的水平矩形RectH(x1',y1',x2',y2',x3',y3',x4',y4')的位置关系。典型的位置关系如图16所示。判断方法如下:
A1.竖直矩形RectV和水平矩形RectH没有相交区域,如图16(a);
A2.如果竖直矩形RectV和水平矩形RectH有相交区域,竖直矩形RectV的x1、x2居于水平矩形RectH的x1'、x2'之间,如图16(b);
A3.在A1和A2两种类型之外,其他类型的判断需要计算竖直矩形RectV四个顶点和水平矩形RectH四个顶点直接的距离,如下列16个距离公式:
d11=(x1-x1′)2+(y1-y1′)2;d21=(x2-x1′)2+(y2-y1′)2;
d12=(x1-x2′)2+(y1-y2′)2;d22=(x2-x2′)2+(y2-y2′)2;
d13=(x1-x3′)2+(y1-y3′)2;d23=(x2-x3′)2+(y2-y3′)2;
d14=(x1-x4′)2+(y1-y4′)2;d24=(x2-x4′)2+(y2-y4′)2;
d31=(x3-x1′)2+(y3-y1′)2;d41=(x4-x1′)2+(y4-y1′)2;
d32=(x3-x2′)2+(y3-y2′)2;d42=(x4-x2′)2+(y4-y2′)2;
d33=(x3-x3′)2+(y3-y3′)2;d43=(x4-x3′)2+(y4-y3′)2;
d34=(x3-x4′)2+(y3-y4′)2;d44=(x4-x4′)2+(y4-y4′)2;
A4.对这16个距离进行排序,找到最小的距离d;
如果d=d13,竖直矩形RectV第1个顶点和水平矩形RectH第3个顶点重合相交,如图16(c);
如果d=d31,竖直矩形RectV第3个顶点和水平矩形RectH第1个顶点重合相交,如图16(d);
如果d=d24,竖直矩形RectV第2个顶点和水平矩形RectH第4个顶点重合相交,如图16(e);
如果d=d42,竖直矩形RectV第4个顶点和水平矩形RectH第2个顶点重合相交,如图16(f);
如果d=d21,竖直矩形RectV第2个顶点和水平矩形RectH第1个顶点重合相交,如图16(g);
如果d=d12,竖直矩形RectV第1个顶点和水平矩形RectH第2个顶点重合相交,如图16(h);
如果d=d34,竖直矩形RectV第3个顶点和水平矩形RectH第4个顶点重合相交,如图16(i);
如果d=d43,竖直矩形RectV第4个顶点和水平矩形RectH第3个顶点重合相交,如图16(j)。
步骤19.4,利用步骤19.3中竖直矩形和水平矩形位置关系,将竖直矩形集合LineRecV中的任意竖直矩形RectV(x1,y1,x2,y2,x3,y3,x4,y4),对水平矩形集合LineRecH中的任意水平矩形RectH(x1',y1',x2',y2',x3',y3',x4',y4')进行截断或者修正,将修正后的水平矩形加入墙体集合Walls,修正后的矩形都基于锚点。
以图16(c)为例,修正后的水平矩形RecH(nx1',ny1',nx2',ny2',nx3',ny3',nx4',ny4')的坐标如下:
设置参数w1和w2为:w1=(x2-x1)*0.5;w2=(y3'-y1')*0.5;则各修正的坐标如下:
nx1'=x1'+w1;ny1'=y1';nx2'=x2';ny2'=y2';nx3'=x3'+w1;ny3'=y3';nx4'=x4';ny4'=y4'。
步骤19.5,利用步骤19.3中竖直矩形和水平矩形位置关系,将水平矩形集合LineRecH中的任意水平矩形RectH(x1',y1',x2',y2',x3',y3',x4',y4'),对竖直矩形集合LineRecV中的任意竖直矩形RectV(x1,y1,x2,y2,x3,y3,x4,y4)进行截断或者修正,修正后的竖直矩形加入墙体集合Walls,修正后的矩形都基于锚点。
图17为识别的墙体表示,数字为墙体的序号,如图17所示,墙体都是基于锚点截断的。
步骤20:根据墙体之间的信息进行门识别;
墙体之间存在弧度为π/4的圆弧,代表门,利用这个特征进行门的识别。
步骤21:根据墙体之间的信息进行窗识别;
墙体之间存在距离均等的平行线,代表窗,利用这个特征进行窗的识别。
图18为识别的最终结果,最粗的线代表墙体,中间粗细的线代表门,最细的线代表窗。
步骤22:生成JSON文件,记录墙体、门窗信息;
把墙体、门窗信息写入JSON文件。JSON文件在不同平台之间传递。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。
步骤23:Unity3D读取JSON文件,创建墙体、门窗;
通过软件Unity3D进行编程,利用JSON文件的墙体信息进行三维重建。
图19为Unity3D读入JSON文件后,三维重建的2D视图。
图20是三维重建后的3D视图,与平面户型图的视角相同。
步骤24:三维重建完成,漫游展示,装修展示。
在三维场景内漫游。
图21是在户型图客厅中漫游,可以看到各个房间的入口。
在三维场景内加入家具灯饰进行装修。
图22是在3D户型客厅装修后的漫游图,可以看到室内全景。
由于三维户型具有真实感和直观性的特征,本发明在现实中将会有广泛的应用,可以应用于房地产商房屋展示、房屋水电设计模拟、房屋装修模拟。普通用户可以利用三维户型进行室内漫游体验、家具摆放预览、规划空间位置分配、模拟装修效果。
Claims (6)
1.一种基于拍照的户型图识别生成三维房型的方法,其特征在于,其实现步骤如下:
步骤1:对图像进行初步预处理,得到户型图的灰度图;预处理包括图像去噪、图像增强和灰度转换;
步骤2:对灰度图进行OTSU二值化处理;OTSU表示最大类间方差法;
步骤3:对步骤2得到的OTSU二值化处理后的图提取最大边缘轮廓,得到边缘图像;
所述的最大边缘轮廓,采用OpenCV的findContours函数找到所有轮廓,计算所找到的各轮廓的净面积,找到净面积最大的轮廓,从而得到最大轮廓图像;
步骤4:对边缘图像进行Hough变换得到直线坐标;
步骤5:从步骤4所得直线中提取最上、最下、最左和最右四条线段;
设步骤4得到的直线集合为L,对L中的任意线段l(x1,y1,x2,y2),(x1,y1)和(x2,y2)为线段的两个端点坐标,计算获取该线段的夹角θ和中点坐标(x3,y3)分别为:
<mrow>
<mi>&theta;</mi>
<mo>=</mo>
<mi>arctan</mi>
<mrow>
<mo>(</mo>
<mfrac>
<mrow>
<msub>
<mi>y</mi>
<mn>2</mn>
</msub>
<mo>-</mo>
<msub>
<mi>y</mi>
<mn>1</mn>
</msub>
</mrow>
<mrow>
<msub>
<mi>x</mi>
<mn>2</mn>
</msub>
<mo>-</mo>
<msub>
<mi>x</mi>
<mn>1</mn>
</msub>
</mrow>
</mfrac>
<mo>)</mo>
</mrow>
<mo>,</mo>
<msub>
<mi>x</mi>
<mn>3</mn>
</msub>
<mo>=</mo>
<mrow>
<mo>(</mo>
<msub>
<mi>x</mi>
<mn>1</mn>
</msub>
<mo>+</mo>
<msub>
<mi>x</mi>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
<mo>/</mo>
<mn>2</mn>
<mo>;</mo>
<msub>
<mi>y</mi>
<mn>3</mn>
</msub>
<mo>=</mo>
<mrow>
<mo>(</mo>
<msub>
<mi>y</mi>
<mn>1</mn>
</msub>
<mo>+</mo>
<msub>
<mi>y</mi>
<mn>2</mn>
</msub>
<mo>)</mo>
</mrow>
<mo>/</mo>
<mn>2</mn>
<mo>;</mo>
</mrow>
然后选取符合条件的线段,如下:
最左线段ll需满足两个条件:a.π/4≤θ≤3π/4,b.x3值最小;
最右线段lr需满足两个条件:a.π/4≤θ≤3π/4,b.x3值最大;
最上线段lt需满足两个条件:a.0≤θ≤π/4或3π/4≤θ≤π,b.y3值最小;
最下线段lb需满足两个条件:a.0≤θ≤π/4或3π/4≤θ≤π,b.y3值最大;
步骤6:根据步骤5得到的四条直线计算透视变换的变换矩阵所需的两组消隐点;
步骤7:计算透视变换的变换矩阵;
步骤8:根据变换矩阵,对原图像的灰度图像进行透视变换,获得矫正后的灰度图像;
步骤9:剪取户型图区域;
步骤10:对步骤9剪取的户型图区域进行外形轮廓检测;
步骤11:采用墙体阈值分割方法对步骤10得到的户型图进行处理,去除与墙体无关区域,得到二值图;
步骤12:对二值图进行腐蚀和膨胀;
步骤13:对步骤12处理后的二值图进行边缘检测,得到边缘图像;
步骤14:对步骤13得到的边缘图像进行Hough变换,将墙体边缘线拟合成线段;
步骤15:将步骤14得到的边缘线段根据角度分类为横线和竖线两个集合;
步骤16:对横线和竖线集合进行矫正拉直;
步骤17:根据横线集合和竖线集合,分别获取墙体的简化线;根据横线集合得到墙体的横线简化线集合,根据竖线集合得到墙体的竖线简化线集合;
步骤18:将墙体横线简化线集合与竖线简化线集合中的简化线归并;
步骤19:根据简化线生成基于锚点的墙体;
步骤20:进行门识别;
步骤21:进行窗识别;
步骤22:生成JSON文件,记录墙体和门窗信息;JSON是JavaScript Object Notation的简写,是一种数据交换格式;
步骤23:利用软件Unity3D读取JSON文件,创建墙体和门窗;
步骤24:三维重建完成,进行漫游展示和装修展示。
2.根据权利要求1所述的基于拍照的户型图识别生成三维房型的方法,其特征在于,所述的步骤4中,采用OpenCV的HoughLinesP函数实现Hough变换,设置HoughLinesP函数中的阈值和最小直线长度均为最大边缘轮廓宽度的1/12,最大直线间隙设置为最大边缘轮廓宽度的1/7。
3.根据权利要求1所述的基于拍照的户型图识别生成三维房型的方法,其特征在于,所述的步骤6的实现方法是:设得到的最左、最右、最上和最下线段为ll、lr、lt和lb,执行下面步骤:
步骤6.1.计算线段ll、lr、lt、lb所在的直线lleft、lright、ltop、lbottom;
步骤6.2.计算直线lleft、lright、ltop、lbottom两两直线所形成的交点,左上、右上、左下、和右下的交点分别设为:p1(x1,y1)、p2(x2,y2)、p3(x3,y3)、p4(x4,y4);
步骤6.3.计算直线lleft、lright、ltop、lbottom所围成四边形对角线的交点p5(x5,y5);
步骤6.4.计算x坐标和y坐标的矫正量dh和dv:dh=(x2-x1+x4-x3)/4;dv=(y3-y1+y4-y2)/4;
步骤6.5.获得变换后左上、右上、左下、右下消隐点p1'(x1',y1')、p2'(x2',y2')、p3'(x3',y3')、p4'(x4',y4'):
x1'=x5-dh;y1'=y5-dv;x2'=x5+dh;y2'=y5-dv;
x3'=x5-dh;y3'=y5+dv;x4'=x5+dh;y4'=y5+dv。
4.根据权利要求3所述的基于拍照的户型图识别生成三维房型的方法,其特征在于,所述的步骤9中,根据步骤6矫正后的消隐点坐标,将消隐点的连线图向四边放宽d个像素,在矫正的图像中剪取户型图区域,其中d=(dh+dv)/10。
5.根据权利要求1所述的基于拍照的户型图识别生成三维房型的方法,其特征在于,所述的步骤17,根据竖线集合和横线集合获取墙体简化线,设竖线集合或横线集合中任意一条线段l1(x1,y1,x2,y2),进行如下步骤:
步骤17.1,在线段l1所在集合中寻找匹配墙线l2(x1',y1',x2',y2'),l2要满足如下条件:
a.被匹配墙线l2从未被匹配过;
b.l1和l2之间的距离d与l1和其他未被匹配的线段之间距离相比,d是最短的;d=|x1-x1'|;
c.l1和l2之间所包围的矩形区域是墙体区域;
步骤17.2,确定l1和l2对应的简化线l(sx1,sy1,sx2,sy2,width),其中(sx1,sy1)和(sx2,sy2)为简化线的两个端点坐标,width为简化线所代表的墙体的宽度;
(1)若l1和l2为竖线,sx1=(x1+x1')/2;sy1=Max(y1,y1');sx2=sx1;sy2=Min(y2,y2');width=|x1-x1'|;将简化线l加入竖线简化线集合;
(2)若l1和l2为横线,先获得两个中间参数lx和rx,lx=Max(x1,x1');rx=Min(x2,x2');则坐标和宽度为:sx1=(lx+rx)/2;sy1=y1;sx2=sx1;sy2=y1';width=|rx-lx|;将简化线l加入横线简化线集合;
步骤17.3,根据l1和l2的相对位置关系,进行截断操作,若l1和l2为竖线则在垂直方向上进行判断,若l1和l2为横线则在水平方向上进行判断:
A.在对应的方向上,若l1和l2完全重合,不进行截断;
B.在对应的方向上,若l1居于l2中间,以l1为基准在l2上截断,l2被截断后遗留的两端分别形成新的线段,将新的线段加入对应的竖线或者横线集合中;
C.在对应的方向上,若l1居于l2的一端,以l1为基准在l2上截断,l2被截断后遗留的另一端形成新的线段,将新的线段加入对应的竖线或者横线集合中。
6.根据权利要求1所述的基于拍照的户型图识别生成三维房型的方法,其特征在于,所述的步骤19基于锚点的墙体生成,具体步骤如下;
步骤19.1,把简化线集合中的简化线sl(sx1,sy1,sx2,sy2,width)展开成矩形rect,矩形rect以简化线sl为垂直方向的中轴线,以width为矩形宽度,设(x1,y1)、(x2,y2)、(x3,y3)和(x4,y4)分别为矩形左上、右上、左下和右下的四个顶点坐标;
步骤19.2,如果矩形rect的高度大于宽度的2倍,矩形rect加入竖直矩形集合LineRecV,否则加入水平矩形集合LineRecH;
步骤19.3,设LineRecV中竖直矩形RectV表示为(x1,y1,x2,y2,x3,y3,x4,y4),设LineRecH中的水平矩形RectH表示为(x1',y1',x2',y2',x3',y3',x4',y4'),则确定RectV和RectH的位置关系如下:
A1.竖直矩形RectV和水平矩形RectH没有相交区域;
A2.竖直矩形RectV和水平矩形RectH有相交区域,且竖直矩形RectV的x1、x2居于水平矩形RectH的x1'、x2'之间;
A3.计算竖直矩形RectV四个顶点和水平矩形RectH四个顶点直接的距离,如下列16个距离公式:
d11=(x1-x1′)2+(y1-y1′)2;d21=(x2-x1′)2+(y2-y1′)2;
d12=(x1-x2′)2+(y1-y2′)2;d22=(x2-x2′)2+(y2-y2′)2;
d13=(x1-x3′)2+(y1-y3′)2;d23=(x2-x3′)2+(y2-y3′)2;
d14=(x1-x4′)2+(y1-y4′)2;d24=(x2-x4′)2+(y2-y4′)2;
d31=(x3-x1′)2+(y3-y1′)2;d41=(x4-x1′)2+(y4-y1′)2;
d32=(x3-x2′)2+(y3-y2′)2;d42=(x4-x2′)2+(y4-y2′)2;
d33=(x3-x3′)2+(y3-y3′)2;d43=(x4-x3′)2+(y4-y3′)2;
d34=(x3-x4′)2+(y3-y4′)2;d44=(x4-x4′)2+(y4-y4′)2;
A4.对这16个距离进行排序,找到最小的距离d,
如果d=d13,竖直矩形RectV第1个顶点和水平矩形RectH第3个顶点重合相交;
如果d=d31,竖直矩形RectV第3个顶点和水平矩形RectH第1个顶点重合相交;
如果d=d24,竖直矩形RectV第2个顶点和水平矩形RectH第4个顶点重合相交;
如果d=d42,竖直矩形RectV第4个顶点和水平矩形RectH第2个顶点重合相交;
如果d=d21,竖直矩形RectV第2个顶点和水平矩形RectH第1个顶点重合相交;
如果d=d12,竖直矩形RectV第1个顶点和水平矩形RectH第2个顶点重合相交;
如果d=d34,竖直矩形RectV第3个顶点和水平矩形RectH第4个顶点重合相交;
步骤19.4,利用竖直矩形和水平矩形位置关系,将竖直矩形集合LineRecV中的任意竖直矩形RectV对水平矩形集合LineRecH中的任意水平矩形RectH进行截断或者修正,将截断或修正后的水平矩形加入墙体集合Walls;截断或修正后的矩形都基于锚点;
步骤19.5,利用竖直矩形和水平矩形位置关系,将水平矩形集合LineRecH中的任意水平矩形RectH,对竖直矩形集合LineRecV中的任意竖直矩形RectV进行截断或者修正,将截断或修正后的竖直矩形加入墙体集合Walls;截断或修正后的矩形都基于锚点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510156080.4A CN105279787B (zh) | 2015-04-03 | 2015-04-03 | 基于拍照的户型图识别生成三维房型的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510156080.4A CN105279787B (zh) | 2015-04-03 | 2015-04-03 | 基于拍照的户型图识别生成三维房型的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105279787A CN105279787A (zh) | 2016-01-27 |
CN105279787B true CN105279787B (zh) | 2018-01-12 |
Family
ID=55148737
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510156080.4A Active CN105279787B (zh) | 2015-04-03 | 2015-04-03 | 基于拍照的户型图识别生成三维房型的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105279787B (zh) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106023305B (zh) * | 2016-05-10 | 2018-12-25 | 曹屹 | 三维空间的建模方法和装置 |
CN106407523B (zh) * | 2016-09-01 | 2019-09-06 | 深圳市彬讯科技有限公司 | 一种基于Tumax户型图一键生成CAD施工图的系统 |
CN107122528B (zh) * | 2017-04-13 | 2021-11-19 | 广州乐家数字科技有限公司 | 一种户型图参数化可再编辑建模方法 |
CN107330979B (zh) * | 2017-06-30 | 2020-09-18 | 电子科技大学中山学院 | 建筑户型的矢量图生成方法、装置及终端 |
CN107798725B (zh) * | 2017-09-04 | 2020-05-22 | 华南理工大学 | 基于Android的二维住房户型识别和三维呈现方法 |
CN108171669A (zh) * | 2017-12-29 | 2018-06-15 | 星阵(广州)基因科技有限公司 | 一种基于OpenCV算法的图像矫正方法 |
CN108399644A (zh) * | 2018-02-05 | 2018-08-14 | 北京居然之家家居连锁集团有限公司 | 一种墙体图像识别方法及其装置 |
CN108763606B (zh) * | 2018-03-12 | 2019-12-10 | 江苏艾佳家居用品有限公司 | 一种基于机器视觉的户型图元素自动提取方法与系统 |
CN108717726B (zh) * | 2018-05-11 | 2023-04-28 | 北京家印互动科技有限公司 | 三维户型模型生成方法及装置 |
CN108961152B (zh) * | 2018-05-30 | 2020-01-14 | 贝壳找房(北京)科技有限公司 | 平面户型图生成方法和装置 |
CN108961395B (zh) * | 2018-07-03 | 2019-07-30 | 上海亦我信息技术有限公司 | 一种基于拍照重建三维空间场景的方法 |
CN108961405A (zh) * | 2018-07-23 | 2018-12-07 | 广东易凌科技股份有限公司 | 基于soa的面向公众服务的房产信息系统 |
CN109408935B (zh) * | 2018-10-17 | 2023-04-18 | 东易日盛家居装饰集团股份有限公司 | 一种区域划分方法及装置 |
CN109598783A (zh) * | 2018-11-20 | 2019-04-09 | 西南石油大学 | 一种房间3d建模方法及家具3d预览系统 |
CN109993797B (zh) * | 2019-04-04 | 2021-03-02 | 广东三维家信息科技有限公司 | 门窗位置检测方法及装置 |
CN110163954A (zh) * | 2019-04-12 | 2019-08-23 | 平安城市建设科技(深圳)有限公司 | 三维户型模型生成方法、装置、设备及存储介质 |
CN110163956A (zh) * | 2019-04-12 | 2019-08-23 | 平安城市建设科技(深圳)有限公司 | 三维户型图生成方法、装置、设备和存储介质 |
CN110197153B (zh) * | 2019-05-30 | 2023-05-02 | 南京维狸家智能科技有限公司 | 一种户型图中墙体自动识别方法 |
CN112150492A (zh) * | 2019-06-26 | 2020-12-29 | 司空定制家居科技有限公司 | 户型图的读取方法、装置以及存储介质 |
CN110348368B (zh) * | 2019-07-08 | 2021-06-01 | 创新奇智(北京)科技有限公司 | 一种户型图的人工智能解析方法、计算机可读介质及系统 |
CN110458927A (zh) * | 2019-08-02 | 2019-11-15 | 广州彩构网络有限公司 | 一种自动将图片生成三维户型模型的信息处理方法 |
CN110956196B (zh) * | 2019-10-11 | 2024-03-08 | 东南大学 | 一种城市建筑物窗墙比自动识别方法 |
CN111161350B (zh) * | 2019-12-18 | 2020-12-04 | 北京城市网邻信息技术有限公司 | 位置信息及位置关系确定方法、位置信息获取装置 |
CN111127357B (zh) * | 2019-12-18 | 2021-05-04 | 北京城市网邻信息技术有限公司 | 户型图处理方法、系统、装置和计算机可读存储介质 |
CN113240769B (zh) * | 2019-12-18 | 2022-05-10 | 北京城市网邻信息技术有限公司 | 空间链接关系识别方法及装置、存储介质 |
CN111275820B (zh) * | 2020-01-15 | 2023-09-19 | 深圳市华橙数字科技有限公司 | 基于二维平面绘制三维墙体方法、装置、终端和存储介质 |
CN111308495B (zh) * | 2020-03-13 | 2022-03-08 | 厦门知本家科技有限公司 | 一种雷达测距生成室内户型3d数据的方法 |
CN111506695B (zh) * | 2020-04-23 | 2023-02-28 | 内蒙古师范大学 | Gpx数据处理成面数据时的坐标方向识别方法及系统 |
CN111814575B (zh) * | 2020-06-12 | 2023-02-03 | 上海品览数据科技有限公司 | 一种基于深度学习和图像处理的户型图识别方法 |
CN111968247B (zh) * | 2020-07-10 | 2021-10-19 | 北京城市网邻信息技术有限公司 | 三维房屋空间的构建方法、装置、电子设备及存储介质 |
CN111859510B (zh) * | 2020-07-28 | 2024-08-13 | 苏州苏高新数字科技有限公司 | 房间快速换装方法、智能终端 |
CN112734564A (zh) * | 2021-01-11 | 2021-04-30 | 无锡锡商银行股份有限公司 | 一种房屋抵押贷款远程下户的房屋信息核验方法 |
CN112926392B (zh) * | 2021-01-26 | 2022-07-08 | 杭州聚秀科技有限公司 | 一种基于轮廓筛选的建筑平面图纸房间识别方法 |
CN113887388B (zh) * | 2021-09-29 | 2022-09-02 | 云南特可科技有限公司 | 一种动态目标识别及人体行为分析系统 |
CN114549483A (zh) * | 2022-02-25 | 2022-05-27 | 山东科汇电力自动化股份有限公司 | 一种基于halcon单目视觉的耐火砖尺寸测量方法 |
CN114972579B (zh) * | 2022-06-22 | 2023-04-07 | 北京城市网邻信息技术有限公司 | 户型图构建方法、装置、设备及存储介质 |
CN115205418B (zh) * | 2022-09-15 | 2022-12-13 | 武汉智筑完美家居科技有限公司 | 户型图重构方法、装置及电子设备、存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101915570A (zh) * | 2010-07-20 | 2010-12-15 | 同济大学 | 一种基于灭点的地面移动测量影像线段自动提取分类方法 |
CN102521884A (zh) * | 2011-12-16 | 2012-06-27 | 南京大学 | 一种基于LiDAR数据与正射影像的3维屋顶重建方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014020337A (ja) * | 2012-07-23 | 2014-02-03 | Metawater Co Ltd | タービン発電機 |
-
2015
- 2015-04-03 CN CN201510156080.4A patent/CN105279787B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101915570A (zh) * | 2010-07-20 | 2010-12-15 | 同济大学 | 一种基于灭点的地面移动测量影像线段自动提取分类方法 |
CN102521884A (zh) * | 2011-12-16 | 2012-06-27 | 南京大学 | 一种基于LiDAR数据与正射影像的3维屋顶重建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105279787A (zh) | 2016-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105279787B (zh) | 基于拍照的户型图识别生成三维房型的方法 | |
CN112348815B (zh) | 图像处理方法、图像处理装置以及非瞬时性存储介质 | |
CN106228507B (zh) | 一种基于光场的深度图像处理方法 | |
CN108257139B (zh) | 基于深度学习的rgb-d三维物体检测方法 | |
Recky et al. | Windows detection using k-means in cie-lab color space | |
US11816829B1 (en) | Collaborative disparity decomposition | |
CN104376548B (zh) | 一种基于改进型surf算法的图像快速拼接方法 | |
CN110232389B (zh) | 一种基于绿色作物特征提取不变性的立体视觉导航方法 | |
JP5830546B2 (ja) | 対象物のモデル変換に基づくモデルパラメータの決定 | |
Duchêne et al. | Multi-view intrinsic images of outdoors scenes with an application to relighting | |
WO2016011834A1 (zh) | 一种图像处理方法及系统 | |
CN111611643A (zh) | 户型矢量化数据获得方法、装置、电子设备及存储介质 | |
CN111401266B (zh) | 绘本角点定位的方法、设备、计算机设备和可读存储介质 | |
JP2019192022A (ja) | 画像処理装置、画像処理方法及びプログラム | |
CN108377374A (zh) | 用于产生与图像相关的深度信息的方法和系统 | |
Kagarlitsky et al. | Piecewise-consistent color mappings of images acquired under various conditions | |
CN111192194A (zh) | 一种针对幕墙建筑立面的全景图像拼接方法 | |
WO2023250088A1 (en) | Method, apparatus, and computer-readable medium for foreground object deletion and inpainting | |
Recky et al. | Façade segmentation in a multi-view scenario | |
Mayer et al. | Building facade interpretation from uncalibrated wide-baseline image sequences | |
CN108022245A (zh) | 基于面线基元关联模型的光伏面板模板自动生成方法 | |
CN112381747A (zh) | 基于轮廓特征点的太赫兹与可见光图像配准方法及装置 | |
CN107346421A (zh) | 一种基于颜色不变性的视频烟雾检测方法 | |
Cushen et al. | Markerless real-time garment retexturing from monocular 3d reconstruction | |
Dafni et al. | Detecting moving regions in CrowdCam images |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |