s1091537 Homework #7

 

1122 Digital Image Processing Assignment #7 報告

學號:s1091537 姓名:蔡佾家

主題: Image Segmentation and Object Detection 影像分割及物件偵測

專案目標:

撰寫一個程式來偵測出指定影像中書桌的桌面區域,並且標出桌面的矩形邊界框與桌角。下左圖的綠色多邊形框為偵測出的桌面區域,右圖中的藍色矩形框則為bounding box,紅點是指尋找出的桌角。

具體而言,我先使用顏色範圍過濾出大致的桌面範圍,這個範圍可能會有遺漏或多算。接著,我使用上課教的Graph-based Image Segmentation方法對影像進行分割。藉由對比「大致桌面範圍」與「分割影像」,我設計了一個演算法修正mask中遺漏或多算的部分,最終得到一個較為精確的mask,從而計算出邊界框與桌角。

開發平台:Microsoft Windows 11, Visual Studio Code, OpenCV 4.6.0, Python 3.7.9

主要概念說明:

1.      以顏色範圍得出大致的桌面mask

我先將影像轉換至HSV色彩空間,並以顏色範圍過濾出大致的桌面mask。下左圖為原圖,中間則為過濾後得到的mask。接著,為了去除雜訊與填補孔洞,我依序進行開運算、閉運算,然後再移除面積過小、明顯不為桌面的區塊。這一連串處理後的影像如右圖,可以看到大多雜訊已被去除。

2.      Graph-based Image Segmentation

    同樣將影像轉換至HSV色彩空間,我使用上課介紹的Graph-based Image Segmentation分割影像。由於分割影像的用途是修補第一步驟得到的mask,其必須精細,因此我設定了較低的模糊化程度與較小的k值。下圖中左邊為原圖,右邊為分割後的影像。

3.      使用分割影像修正桌面的mask

對於上一步驟分割出的每塊區域,我們執行以下動作:如果這塊區域有40% 以上的像素都落在桌面的mask中,標記為這塊區域與mask的交集為黃色,而這塊區域上的其餘部分標示為綠色。當分割區塊的遍歷結束後,mask上仍有區域沒有被標示為黃色或綠色,標示其為紅色。下左圖為原始的mask,右圖為經此處理後的mask

當這個步驟結束後,被標記為黃色的區域即代表其在分割圖像中也為完整區塊,可被視為mask中正確的部分(因為桌面本來就是一大塊顏色相近的完整區塊);被標記為綠色的區域則代表其很可能是目前的mask沒涵蓋到、是桌面的區塊,因為它所屬的分割區塊有一大部分也被包含於mask中;被標記為紅色的區域代表其很可能不是桌面,應該把它從mask移掉,因為分割影像顯示其獨立於大部分的桌面區塊。

    考慮到一個特殊情況:桌面上的檯燈支架、插頭等會遮擋住桌面,如下左圖中的紫色圓圈處。雖然該區塊在影像中不是桌面,但仍可以將其加入以保持桌面的完整性。對於每個紅色或綠色的區域,我們執行以下動作:若其邊界相連的像素有一定比例為黃色,將這塊區域標示為淺藍色(由於紅色區域更不可能是桌面,其比例標準會較綠色區域嚴格)。執行結束後會得到中間的圖。最後,我們可以取出黃色及淺藍色的區塊,這就是修正後的桌面的mask,如下右圖。

    接著,我依序進行開運算、移除小面積區域、閉運算、填補孔洞四個操作,讓mask更為完整。下左圖是原圖,右圖是經處理後的mask。至此我們得到一個精確而完整的桌面的mask

4.      尋找近似多邊形、邊界框與桌角

    對於mask中每個區塊的輪廓,我使用approxPolyDP函式試圖將其近似為四邊形,若成功代表它是一個相對完整的桌面,將近似出的四個頂點作為桌角即可。而若失敗我會以第二個方法尋找桌角:在輪廓點中尋找x+ay及x-ay最大和最小者(a矩形長寬比決定的常數)。儘管在一個不旋轉、歪斜的矩形中,這個方法能保證找出矩形的頂點,但mask中的桌面帶有旋轉與透視變形,因此可能無法準確的求出最佳的桌角。下左圖為步驟尋找出的近似多邊形與桌角,右圖則為邊界框。

成果展示與討論:

1. image1.jpg

2. image2.jpg

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6