hierarchy,CV_RETR_CC0MP,CV_CHAIN_APPR0X_ SIMPLE);
[0137]doublemaxarea= 0 ;//maxarea表不當前最大輪廓凈面積
[0138]doubleOutArea;//0utArea表示外圍輪廓面積
[0139]doubleInArea;/7lnArea表不內包輪廓面積
[0140]intidx= 0 ;/7idx是用于遍歷外輪廓的輪廓索引
[0141]intidy= 0 ;//idy是用于遍歷內輪廓的輪廓索引
[0142]intMax_idx= 0 ;//Max_idx表示輪廓凈面積最大的輪廓索引
[0143]for( ;idx〉= 0;idx=hierarchy[idx] [0])// 遍歷外輪廓
[0144] {
[0145]OutArea=fabs(contourArea(contours[idx]));//fabs求絕對值;contourArea 求當前輪廓面積
[0146]InArea= 0;
[0147]for(idy=hierarchy[idx] [2] ;idy〉=0;idy=hierarchy[idy] [0])//遍歷當 前輪廓包含的子輪廓[014 引 {
[0149]InArea+ =fabs(contourArea(contours[idy]));
[0150] }
[015。if(OutArea-InArea〉maxarea){//判斷當前輪廓凈面積是否大于maxarea
[0152]maxarea=OutArea-InArea;
[0153]Max_idx=idx;//更新凈面積最大輪廓索引
[0154] }
[0155] }
[0156] 本發(fā)明實施例中對圖4提取的最大邊緣輪廓如圖5所示。
[0157] 步驟4出OU曲變換。
[0158] 化U曲變換是一種使用表決原理的參數估計技術。其原理是利用圖像空間和 化U曲參數空間的點一線對偶性,把圖像空間中的檢測問題轉換到參數空間。通過在參數空 間里進行簡單的累加統(tǒng)計,然后在化U曲參數空間尋找累加器峰值的方法檢測直線?;疷曲 變換的實質是將圖像空間內具有一定關系的像元進行聚類,尋找能把運些像元用某一解析 形式聯系起來的參數空間累積對應點。在參數空間不超過二維的情況下,運種變換有著理 想的效果。
[0159] 本發(fā)明實施例中采用化enCV的化11曲^1163口函數實現該步驟,minRect為步驟3 得到的最大輪廓所圍矩形。代碼如下:
[0160] 化U曲LinesP函數的原型為:
[0161]voidHoughLinesP(InputArrayimage,OutputArraylines,doublerho,double theta,intthreshold,doubleminLineLength= 0,doublemaxLineGap= 0)
[0162] 其中:image為輸入圖像,要求是8位單通道圖像;lines為輸出的直線向量,每條 線用4個元素表示,即直線的兩個端點的4個坐標值;rho和theta分別為距離和角度的分 辨率;t虹eshold為闊值;minLineLength為最小直線長度,如果小于該值,則不被認為是一 條直線;maxLineGap為最大直線間隙,如果有兩條線段是在一條直線上,它們之間有間隙, 如果運個間隙大于該值,則被認為是兩條線段,否則是一條線段。
[0163] 本發(fā)明實施例中通過如下代碼實現化U曲變換:
[0164]floatgap=minRect[0].size,width/7 ;
[016引 floatminlenth=minRect[0].size,width/12 ;
[016引 Hou曲LinesP(dst,lines, 1,CV_PI/180,minlenth,minlenth,gap);
[0167] 其中,gap表示步驟3所得的最大邊緣輪廓寬度的l/7,minlenth表示步驟3所得 的最大邊緣輪廓寬度的1/12,minRect[0]是步驟3所得的最大邊緣輪廓。
[0168] 化U曲LinesP函數中,dst表示經步驟3提取最大邊緣輪廓的圖像,距離分辨 率數值為1,角度分辨率數值為CV_PI/180,闊值設置為minlenth,最小直線長度設置為 minlenth,最大直線間隙設置為gap。
[0169] 通過試驗表明,采用所述參數,可有效識別出所需線段。
[0170] 步驟5:提取符合條件的最上、最下、最左和最右四條線段。
[017。設步驟4得到的直線集合為L則對于直線集合L的任意線段1 (Xi,yi,而,y2),(Χι,yi)和(X2, y2)為線段的兩個端點坐標。對線段1進行如下計算:
[017引步驟5.1.計算1的夾角和中點坐標柄,y3)如下:
[0173] 夾角Θ的計算公式為;
[0174] 步驟5. 2.最左線段11需滿足兩個條件:a. 31 /4《Θ《3 31 /4, b. &值最小;
[0Π5] 步驟5. 3.最右線段Ir需滿足兩個條件:a. π/4《Θ《3 π/4, b. &值最大。
[0176] 步驟5. 4.最上線段It需滿足兩個條件:
[0177] a. 0《Θ《ji/4或33i/4《Θ《ji,b. y3值最??;
[0178] 步驟5. 5.最下線段化需滿足兩個條件:
[0179] a. 0《目《π/4或3π/4《目《π,b. y3值最大。
[0180] 步驟6 :計算矯正前后的兩組消隱點。
[0181] 對于最左、最右、最上、最下線段11、Ir、It、化:
[018引步驟6. 1.計算線段11、Ir、It、化所在的直線lleft、Iri曲t、Itop、化ottom ; [018引步驟6. 2.計算直線lleft、Iri曲t、Itop、化ottom兩兩直線所形成的交點,左上、 右上、左下、右下交點分別設為:Pi(Xl, yi)、化(而,y2)、P3(X3, y3)、P4(X4, y4);
[0184]步驟6. 3.計算直線lleft、Iri曲t、Itop、化ottom所圍成四邊形對角線的交點 Ρ5(Χ5,Υ5);
[018引 步驟6. 4.計算X坐標和y坐標的矯正量化和dv:化=(而-義1+與-義3)/4;dv= (y;5-yi+y廣72)/4 ;
[0186] 步驟6.5.計算變換后左上、右上、左下、右下消隱點口1'知1',71')、化'(而',72')、 Ps' (xs', Ys')'P4. y/):
[0187] x/ = X廣dh 巧1' = y廣dv ;而' =Xs+dh 巧2' = y;rdv ;
[018引 X3' = X廣dh 巧3' = Ys+dv ;X4' = Xs+dh 巧4' = Ys+dv。
[0189] 步驟7 :計算透視變換的變換矩陣。
[0190] 根據步驟6得到的崎變前后的消隱點,計算變換矩陣。通用的變換公式為:
[0191]
[019引U,V是變換前坐標,X,y是變換后坐標,其中X=X' /V,y=y' /V。
[0193] 通常W= 1,根據矩陣乘法法則,上面的變換公式改寫為:
[0194]
[0195] [X,y]對應步驟 6. 5 中的消隱點Pi'(V,y/)、口2'(而',72')、口3' 柄',73')、 口4'(V,y/ ),山V]對應步驟 6. 2 中的點Pi(Xi,yi)、口2 (而,y2)、口3 柄,y3)、口4 (X4,y4),通常曰33 -1。把遠八個點代入改與后的變換公式,聯^^萬^^求取曰。,曰12,曰13,曰21,曰22,曰23,曰31,曰32,曰33。
[0196]
為所要計算的變換矩陣。
[0197] 本實例所得的變換矩陣為
[019引本發(fā)明實施例中得到如圖6所示的矯正前后的兩組消隱點的連線圖,比較規(guī)則矩 形的是矯正后的消隱點的連線圖,比較傾斜的是矯正前的消隱點的連線圖。
[0199] 步驟8:透視變換。
[0200] 透視變換(PerspectiveTransformation)是指利用透視中屯、、像點、目標點Ξ點 共線的條件,按透視旋轉定律使承影面(透視面)繞跡線(透視軸)旋轉某一角度,破壞原 有的投影光線束,仍能保持承影面上投影幾何圖形不變的變換。透視變換是中屯、投影的射 影變換,在用非齊次射影坐標表達時是平面的分式線性變換。透視變換常用于圖像的校正。 圖7是本發(fā)明實施例中進行透視變換矯正后的圖像。
[020。 步驟9:剪取戶型圖區(qū)域。
[0202] 根據步驟6中的崎變后的消隱點坐標,向四邊放寬d個像素,在透視變換矯正的圖 像中剪取戶型圖區(qū)域。d為正整數。本發(fā)明實施例中設置d=(化+dv)/10,可取得有效合 理的戶型圖區(qū)域。
[020引圖8為剪取的戶型圖區(qū)域。
[0204]步驟10 :輪廓檢測。戶型圖的外圍輪廓基本上是由墻體組成,并且外圍輪廓之外 的區(qū)域一般是顏色均勻分布的背景,基于戶型圖具有的運樣的特點,使用傳統(tǒng)的自動闊值 分割方法可獲得戶型圖的外形輪廓。如圖9為本發(fā)明實施例所獲得的外圍輪廓圖。
[020引步驟11對戶型圖進行墻體自適應闊值分割,得到二值圖。
[0206] 首先根據步驟10檢測出的外形輪廓區(qū)域進行自適應闊值分割,獲得墻體區(qū)域;然 后計算出墻體區(qū)域平均灰度W與非墻體區(qū)域平均灰度0,得到墻體分割闊值T= (W+0)/2 ; 最后,利用分割闊值T對步驟9得到的灰度圖進行處理,得到二值圖。
[0207]
[0208] 其中,I(x,y)為戶型灰度圖在(x,y)點的像素值,r(x,y)為經闊值分割后的圖像 在(x,y)點的像素。本步驟可W剔除掉家具、地板、裝飾物品等干擾信息,只呈現墻體信息, W利于進一步單獨對墻體進行識別。如圖10為本發(fā)明實施例獲得的闊值分割圖。
[0209] 步驟12 :對步驟11所得的二值圖進行腐蝕和膨脹,過濾一些小的干擾信息。如圖 11為本發(fā)明實施例得到的腐蝕膨脹處理后的二值圖。
[0210] 步驟13 :對步驟12處理后的二值圖進行邊緣檢測,得到邊緣圖像。進行邊緣檢測 可檢測出墻體的邊緣。如圖12為本發(fā)明實施例在該步驟得到的邊緣圖像。
[0211] 步驟14出OU曲變換;
[0212] 對邊緣圖像進行化U曲變換,墻體邊緣線被擬合成多條線段Lines。
[0213] 步驟15 :對步驟14得到的邊緣線段根據傾斜角度分類為橫線和豎線兩個集合;
[0214]對于線段集合Lines中的任意線段1 (Xi,yi,而,y2),(Xi,yi)和(而,y2)為線段