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