基于图像轮廓分析的室内窗户检测
2018-05-09孔倩倩赵辽英
孔倩倩,赵辽英,张 莉
(杭州电子科技大学计算机学院,浙江 杭州 310018)
0 引 言
窗户作为建筑物外表面的一种典型结构,通常在建筑物外表面中呈现相同或相似的结构,窗户的检测与识别可以简化建筑物三维模型的构建过程[1]。同样,窗户对于居室而言,其不仅起到透光、通风的作用,窗户的装饰还可以美化居室,柔化室内空间的生硬线条[2]。“窗户是居室的眼睛,窗帘则是窗户的灵魂。”窗户的装饰风格对于协调整个室内的装修风格起着重要的作用。若是能够事先拍摄室内的装修效果图,自动在图像中识别室内窗户的位置和大小,将不同款式的窗帘图像贴于窗户之上,使窗户与窗帘融为一体,为用户呈现直观的装饰效果,这将节省用户挑选窗帘的时间和精力。基于这一背景,针对室内的窗户检测具有一定的实用价值和意义。
常见的窗户检测方法可分为2类:基于图像处理的方法[3-4]和基于机器学习的方法[5-9]。基于图像处理的方法通常适用于单一图像(图像中的外墙清晰可见,且不包括树木、汽车等障碍物)中的窗户检测,根据窗户的几何属性,利用梯度投影[3]或阈值分割技术[4],实现窗户检测。基于机器学习的方法通常需要有较多的窗户训练样本,通过特征提取和分类器训练,实现窗户检测。
现有窗户检测方法大都是针对建筑外表面的窗户检测,而室内窗户检测的相关研究鲜有报道。针对窗帘装饰的室内窗户检测通常是对单幅图像中单个窗户的检测,适合直接使用图像处理的方式检测。本文根据窗户与周围环境成像亮度差异以及窗户的几何属性,提出一种基于图像轮廓分析的室内窗户检测方法。
1 室内窗户图像的特点
1)窗户的几何属性。室内窗户的整体形状以矩形居多,整个窗户由玻璃和一些用来支撑玻璃的梁组成,这些梁的面积远远小于玻璃的面积,且把整个窗户分成了多个小矩形。支撑玻璃的梁呈现明显的直线结构,且窗户的外框也呈现明显的直线结构。
2)室内窗户的成像特点。通过窗户的几何特点可知窗户区域除了梁之外就是玻璃。玻璃的颜色单一,纹理一致,透光性较好。根据光线的折射和反射现象,当光线照射到室内窗户玻璃上时,相较于室内其他地方,窗户区域显得比较亮。
2 室内窗户检测的方法
根据室内窗户的几何属性和窗户与周围环境成像的亮度差异,设计如图1所示的窗户检测流程图。
图1 室内窗户检测流程图
主要思想为:通过图像预处理过滤图像中的噪声得到灰度图像,采用阈值分割法分割图像;利用数学形态学的非线性滤波特性,对二值图像进行缺陷修补;采用拓扑结构分析的边界跟踪算法提取轮廓的一系列坐标点;初步筛选符合条件的轮廓的最小外接矩形;判断轮廓最小外接矩形的位置关系,求取彼此之间的距离;最后通过最小生成树对轮廓的最小外接矩形进行分类合并,获得窗户区域的最小外接矩形。
2.1 图像预处理
由摄像头拍摄的室内窗户图像在生成和传送的过程中通常会受到各种噪声的干扰,需对原始图像进行降噪和灰度化处理。图像灰度化[10]是指把由R、G、B三通道数据组成的彩色图像变为单通道数据的灰度图像。采用加权平均法对图像进行灰度化处理,得到:
Gray=WRR+WGG+WBB
(1)
其中WR,WG,WB分别是R,G,B的权值。在生物学中,由于人眼对蓝色最不敏感,绿色最为敏感,为了得到较好的灰度图像,通常取WG>WR>WB。经实验验证,当WR=0.30,WG=0.59,WB=0.11时,得到的灰度图像最为理想。
2.2 阈值分割和缺陷修补
由光线的折射和反射特性可知,室外光线照射在窗户的玻璃上时,室内窗户区域和室内其他区域颜色存在很大区别。这导致经拍摄后的室内图像一般只包含目标(窗户)和背景(除窗户之外的室内区域)2类区域。利用最大类间方差法(OTSU)[11]确定图像分割的灰度阈值T,按式(2)实现图像二值分割。
(2)
其中f(x,y)为原始图像中坐标(x,y)点的像素灰度值,ft(x,y)为二值图像中对应像素灰度值。
为进一步消除经阈值分割后二值图像中可能存在的断续、孤立的像素点或噪声,采用数学形态学[12]中的开运算对二值图像进行缺陷修补。修补后的图像消除了像素点断续、间隔的缺陷,保持了图像原有的基本形状特征,为后续轮廓提取创造了条件。
2.3 轮廓的提取与筛选
2.3.1 轮廓边界跟踪
采用Suzuki等提出的基于拓扑结构分析的边界跟踪算法[13],提取二值图像中各个目标轮廓的边界。
边界跟踪算法的基本思想是:从二值图像左上角开始逐行扫描,给每个连通区域的边界像元赋予相同的标记值,不同的连通区域边界赋予不同的标记值,并且每个连通区域的右边界标记为该区域边界标记的负值。
二值图像的连通区域有2类:一类是区域内像素值都为1,对应的轮廓边界称为外边界;另一类是区域内像素值都为0,对应的轮廓边界称为孔边界。设f(i,j)表示图像中第i行第j列像素的像素值,行扫描过程中二值图像每个连通区域边界起点的判断规则为:
1)如果f(i,j-1)=0且f(i,j)=1,则(i,j)是外轮廓(像素值全为1区域)边界的起始点。
2)如果f(i,j)≥1且f(i,j+1)=0,则(i,j)是孔轮廓边界的起始点。
由于本文在轮廓提取的过程中只跟踪外轮廓,因此下面只介绍外轮廓的边界跟踪算法。图2给出了四邻域的外边界跟踪算法流程图,其中NBD表示边界标记值,初值为1,(i1,j1),(i2,j2),(i3,j3),(i4,j4)表示边界跟踪过程中坐标的中间变量。每扫描到一个新的外边界起点,NBD加1。其中轮廓最右边的边界标记为-NBD,负值是为了避免轮廓右边界被再次当作边界起始点,确保一个轮廓只扫描一次。
图2 边界跟踪算法流程图
2.3.2 轮廓边界坐标信息的存储
根据边界跟踪算法得到各轮廓边界集合,以Freeman链码的形式存储轮廓的信息,其保存的并不是点的坐标,而是轮廓边界起始点坐标以及后续边界的方向值。图3给出了像素p的8方向链码示意图。
图3 8方向链码示意图
链码的方向和像素坐标之间的对应关系如表1所示。以链码值3为例,如果像素p的坐标为(i,j),则根据表1,链码值为3的邻域像素坐标为(i-1,j+1)。因此,只需存储轮廓边界起始坐标值及后续边界的链码值,根据表1,可以得到整个轮廓所有边界的坐标值。
表1 链码值与像素坐标之间的对应关系
坐标链码值01234567X110-1-1101Y01110-1-1-1
2.3.3 轮廓筛选
由于拍摄的室内窗户图像中会包含其他物体,如室内的花盆、桌椅、衣柜、空调等,因此,并不是所提取的轮廓都属于窗户区域,需要对轮廓进行初步筛选。根据轮廓的拓扑结构和轮廓的坐标点,采用最小外接矩形[14]的方式计算目标轮廓的宽度和高度。记w和h为最小外接矩形的宽度和高度,imgW和imgH为原始图像的宽度和高度,λ为最小外接矩形的筛选系数,根据图像窗户区域的几何属性,定义筛选规则:当某个轮廓的最小外接矩形的宽度和高度不满足公式(3)时,排除该轮廓。
(3)
经多次实验验证,λ∈(30,50)较合适。
2.4 轮廓分类与合并
经排除明显不属于窗户区域的轮廓之后,剩下的轮廓中仍可能存在不是窗户区域的轮廓,因此需要进一步分析轮廓外接矩形关系,将剩余轮廓分为窗户区域和非窗户区域,并合并各窗户区域。
经观察,图像中各轮廓的最小外接矩形(以下简称矩形)存在3种关系,分别是:包含关系、水平关系、垂直关系。以图4为例说明矩形间的各种关系。
图4 轮廓最小正外接矩形的位置关系
图4中共有6个矩形,分别标为Ri,i=1,2,…,6。以R1为例,R1与其他矩形间的位置关系分别为:包含关系(R1,R2);水平关系(R1,R3),(R1,R4),(R1,R5);垂直关系(R1,R6)。从图4中可以看出,R6明显不属于窗户区域,应排除,R1~R5属于窗户区域,应该合并这些矩形。矩形分类合并具体过程如下。
2.4.1 求两两矩形之间的距离
记第i个轮廓的最小外接矩形Ri左上角坐标为(xi,yi),其宽度和高度分别为wi和hi。将Ri左上角和右下角的坐标值存储在二维数组Ei=[ei0,ei1,ei2,ei3]中,其中:
(4)
计算两两矩形之间距离d的方法如下:
输入:n个矩形坐标数组Ei,i=1,2,…,n
输出:矩形Ri、Rj之间的距离dij
1.对任意2个矩形Ri、Rj,i≠j
2.if ei2≤ej0//水平关系且Ri在左
3.dij=ej0-ei2
4.else if ej2 5.dij=ei0-ej2 6.else if ei3≤ej1//垂直关系且Ri在上 7.dij=ej1-ei3 8.else if ej3 9.dij=ei1-ej3 10.else //包含关系 11.dij=0 2.4.2 矩形分类 采用最小生成树[15]法将属于窗户的矩形区域进行归类。Kruskal[16]算法是比较常用的最小生成树算法。将各个轮廓的最小外接矩形看成连通图的每个顶点,矩形间的距离作为连通图各边的权值,按照由左到右,由上到下的顺序,构造连通图。通过设定距离的筛选系数ds,将与其它矩形距离过远的矩形排除掉,剩下的就是属于窗户区域的轮廓矩形,再对剩余的矩形进行合并,从而求得整个窗户区域的最小外接矩形。还是以图4为例,对图中R1~R6进行矩形的分类合并。R1~R6分别用顶点v1~v6表示。如图5所示,图5(a)为图4对应的连通图,图5(b)为Kruskal算法得到的最小生成树。由于顶点v6即矩形R6与其他矩形的距离过远,因此不属于窗户区域,排除掉,如图5(b)中虚线所示。 (b) 最小生成树 2.4.3 窗户区域合并 轮廓矩形经Kruskal算法分类后,对属于窗户区域的轮廓矩形进行合并。设有m个矩形需要合并,记矩形的左上角和右下角横坐标的集合为G1,对应的纵坐标集合为G2,则: (5) (6) 设合并后整个窗户的最小外接矩形左上角坐标为(xmin,ymin),右下角坐标为(xmax,ymax),则: (7) (8) 根据矩形左上角和右下角的坐标可以唯一确定窗户的最小外接矩形。 实验环境为CPU Intel(R) Core(TM) i5-4590 3.30 GHz,内存为8 GB,采用Visual Studio 2015结合OpenCV 2.4.10软件平台。 为了验证提出的算法的有效性和可行性,本文对不同角度拍摄的不同室内场景的多幅图像进行了窗户检测实验。如图6所示,场景1是正对窗户区域拍摄的单个窗户的图像,窗户内外都无障碍物遮挡;场景2中的窗户是由多块玻璃组合而成,且支撑玻璃的梁比较明显,呈现明显的直线结构,窗户外成像比较复杂;场景3对窗户的拍摄角度稍微倾斜一些,窗户前的成像有床等障碍物的遮挡,窗户外景物模糊;场景4正对窗户区域进行拍摄,窗户前成像有床等障碍物的遮挡,窗户外景物模糊;场景5中窗户前后的成像都比较复杂。检测结果如图7所示,其中第1行为阈值分割后的二值图,第2行为经数学形态学处理后的二值图,第3行为经过轮廓提取和筛选后的各轮廓的最小外接矩形示意图,第4行为各个轮廓的最小正外接矩形合并后的检测结果。其中数学形态学修补操作采用开运算[17],即先对图像做腐蚀(Erosion)处理,再对图像做膨胀(Dilation)处理。结构元素均为3×3的方形,处理次数均为1次。 (a) 场景1 (b) 场景2 (c) 场景3 (d) 场景4 (e) 场景5图6 不同室内场景 (a) 场景1 (b) 场景2 (c) 场景3 (d) 场景4 (e) 场景5图7 不同室内场景检测过程及最后结果 从图7中的第1行可以看出经过灰度处理二值化后的图像,已经排除了大部分干扰的信息,但图像中还是存在一些细小毛刺和孤立噪声点。从图7第2行可以看出,经过形态学修补后,许多细小的噪声和毛刺被消除。从图7第3行可以看出属于窗户区域和在窗户区域范围内的轮廓被检测出,为表示不同物体的轮廓,采用不同灰度的矩形标注不同物体的轮廓。从图7最后一行可以看出将不同轮廓的矩形进行合并,最终得到窗户的位置,图中深色矩形框标注窗户所在位置。 为了进一步验证本文算法相比其他算法的优越性,考虑到文献[4]的方法也是一种基于图像处理的方法,与本文方法具有可比性,选用文献[4]中的方法对场景3与场景4进行实验,其结果如图8所示。从图8可以看出,该方法无法有效检测室内窗户区域。分析其原因,主要是由于此方法是针对建筑物外表面的窗户检测提出的。建筑物外表面主要由窗户和墙壁2部分组成,外墙窗户结构都相同或者相似,窗户的宽和高也成一定的比例,分布具有方向性和规律性,整个建筑物外表面的图像内容较为简单。但是室内环境较为复杂,室内图像不光有窗户、墙壁还包括室内物体、窗外景物投影等。虽然室内窗户检测与建筑物外表面的窗户检测目标都是窗户,但是这两者的背景有巨大的差别,所以室外窗户检测方法并不适合室内窗户的检测。 (a) 场景3 (b) 场景4图8 文献[4]的实验结果 本文针对室内窗户检测的问题,融合图像处理的多种理论知识,提出了一种基于图像轮廓分析的室内窗户检测方法。本文提出的方法在不完全检测出窗户玻璃区域的情况下仍能检测出室内窗户的区域,而且可以适用于非矩形的窗户检测。实验结果表明本文提出的方法适用于多种不同室内场景图像的窗户检测,更多场景的适用性有待后续理论分析和实验研究。 参考文献: [1] Wang Ruisheng, Bach J, Ferrie F P. Window detection from mobile LiDAR data[C]// Proceedings of the 2011 IEEE Workshop on Applications of Computer Vision. 2011:58-65. [2] 侯梦倩. 新中式风格的室内软装饰设计应用研究[D]. 杭州:浙江理工大学, 2016. [3] Recky M, Leberl F. Window detection in complex facades[C]// Proceedings of the 2nd European Workshop on Visual Information Processing. 2010:220-225. [4] Miljanovic M, Eiter T, Egly U. Detection of windows in facades using image processing algorithms[J]. Indian Journal of Computer Scienceand Engineering, 2012,3(4):539-547. [5] Ali H, Seifert C, Jindal N, et al. Windowdetection in facades[C]// Proceedings of the 14th International Conference on Image Analysis and Processing. 2007:837-842. [7] Mesolongitis A, Stamos I. Detection of windows in point clouds of urban scenes[C]// Proceedings of the 2012 IEEE Computer Society Conference on Computer Vision and Pattern Recognition Workshops. 2012, doi: 10.1109/CVPRW.2012.6238910. [8] 缪君,储珺,张桂梅. 基于图像边缘与玻璃属性约束的窗户检测[J]. 图学学报, 2015,36(5):776-782. [9] 贾凯华,李和志,吴泽敏. 一种新的窗户特征提取方法研究[J]. 测绘工程, 2016,25(10):64-68. [10] 周茗琪. 基于显著度的图像灰度化算法研究[D]. 上海:上海交通大学, 2015. [11] Otsu N.A threshold selection method from gray-level histograms[J]. IEEE Transactions on Systems, Man, and Cybernetics, 1979,9(1):62-66. [12] 蔡剑. 基于数学形态学的图像椒盐噪声去除方法[J]. 电子设计工程, 2016,24(13):182-184. [13] Suzuki S,Abe K. Topological structural analysis of digitized binary images by border following[J]. Computer Vision, Graphics, and Image Processing, 1985,30(1):32-46. [14] 李洋,李岳阳. 一种快速提取植物叶片最小外接矩形的算法[J]. 江南大学学报(自然科学版), 2015,14(3):273-277. [15] Jana P K, Naik A. An efficient minimum spanning tree based clustering algorithm[C]// Proceedings of the 2009 International Conference on Methods and Models in Computer Science. 2009, doi: 10.1109/ICM2CS.2009.5397966. [16] 袁威威. 应用Kruskal的改进算法求最小生成树[J]. 江苏第二师范学院学报(自然科学版), 2017,33(6):12-13. [17] 胡涛,吕虹,孙小虎,等. 基于水平垂直灰度开运算的车牌字符分割算法[J]. 电子技术应用, 2012,38(10):109-111.3 实验结果分析
4 结束语