|
需求突然轉換到,識別有背景的戶型圖: 具體效果參考空間大師,首先提出墻體,然后識別門窗、家具。 空間大師對實現(xiàn)思路幾乎沒有幫助,絕望之際找到一篇論文,看結果還不錯,于是我們就開始根據(jù)論文一步步實現(xiàn)。 論文為:基于形狀與邊緣特征的戶型圖識別研究_江州,有兩種方法: 一、基于形狀特征的戶型圖識別 1、墻體線分割 彩色圖-->灰度圖-->統(tǒng)計灰度直方圖,最大值即為背景灰度。 墻體的幾何特征,平直度: 若某灰度值的平直度越高,則代表該灰度值的整體分布越趨于平直化。 墻體分割算法的主要流程為: (1)統(tǒng)計全局圖像的灰度值,(2)計算分布圖中峰值灰度的平直度,(3)平直度最高的灰度值即為墻體線的灰度,(4)二值化閾值(通常取灰度域)。 2、墻體線降噪 觀察發(fā)現(xiàn),噪聲部分連圖片連通區(qū)大小遠小于墻體線構成的連通區(qū),且峰值連通區(qū)的數(shù)目決定了墻體的數(shù)量。 提出,基于連通區(qū)的快速去噪算法,主要思路:(1)統(tǒng)計全局的連通區(qū)大小,(2)找到能分割出所有峰值連通區(qū)對應的最小閾值,(3)以該閾值的1/2作為分割閾值,對圖像中的連通區(qū)進行分割。 3、墻體線矯正與分析 4、門窗的分割與識別 窗:平行線的紋理特征 門:圓弧所分割兩個區(qū)域的面積比 二、基于邊緣特征的戶型圖識別(我們進行了代碼實現(xiàn)) 1、像素級邊緣提取 對于邊緣提取,canny算子的效果最好,保留了圖像更多的細節(jié),且對部分破損邊緣進行修補,但處理時間長; sobel算子,能較好地保持邊緣細節(jié),速度快,但自動過濾掉了一部分不關注的邊緣。 選擇了sobel算子進行邊緣檢測。 (1)去標尺,得到處理圖像的邊界(灰度值投影找峰值的方法) imageWithoutRuler(image, imageWithoutR, border); (2)邊緣梯度的計算,計算四個方向的sobel梯度模板,選取最大的作為其梯度值及方向。 采用四個方向的梯度模板的好處在于充分利用8鄰域內像素灰度信息的同時,判斷方向快速且只涉及到加法。 sobelGrad(src_gray, gradImage, thetaImage, ShowthetaImage, border); 梯度圖: 方向圖: (3)閾值分割及非極大值抑制 閾值分割,對感興趣的圖像進行分離,提取出梯度較高的像素點,這些像素點灰度值變化劇烈,為邊緣的候選點。 論文推薦分割的閾值: 非極大值抑制,保證該店為局部范圍內梯度最大的點,保證邊緣為單像素寬度,方便進行后續(xù)的邊緣追蹤。 方法:在該梯度上,該像素點大于等于相鄰的兩個像素點的梯度值。 threshold_nms(gradImage, thetaImage, gradImage1, border, 0.3);
(4)去冗余點與毛刺 (冗余點的定義沒看懂。) 毛刺,即分支點的特征為:在像素的八鄰域內,有不超過一個像素點。 removeBurr(gradImage1, gradImage2, border);
(5)邊緣跟蹤 為了方便后續(xù)對邊緣數(shù)據(jù)進行參數(shù)化,必須對提取的邊緣進行編碼。其編碼算法的步驟如下: 步驟 1:從左到右,從上到下,檢索出所有連續(xù)邊界的起始點,記下起始點坐標,并將該點的灰度值,置為背景灰度 0; 步驟 2:以該點的梯度方向為搜索方向,不斷循環(huán)檢索下一個頂點。若找到,則加下該檢索方向,并將該點的灰度值置為背景灰度 0;若沒找到,說明該點是孤立點,即邊緣的終點,跳出循環(huán); 步驟 3:以像素數(shù)目門限對跟蹤結果進行過濾,低于門限的邊緣被濾除。 該邊緣編碼方案與傳統(tǒng)的編碼方法進行比較,一方面,直接對源圖像內的像素點進行置零操作,極大地減少了遍歷次數(shù);另一方面,在檢索下一個邊界點時,把上一個檢索方向作為優(yōu)先檢索方向,檢索效率得到了較大的提升。 edgeTracking(gradImage2, thetaImage, border, lines_before);
2、亞像素級邊緣提取 。。。。。。 我們的困境在于不知道怎么去除干擾項,實現(xiàn)了部分代碼后,發(fā)現(xiàn)論文中是手動去除干擾。。放棄。 |
|
|