影像處理 | Boundary Extraction & Region Filling

這是我在中興大學資工系修習影像處理 Digital Image Processing這門課程所做的課後作業,在這個作業中,我將會使用到數學形態學(Mathematical morphology)中的一些技巧,包含侵蝕(Erosion)、膨脹(Dilation),來實現如標題所需要的邊界抽取(Boundary Extraction)及區域填充(Region Filling)。

本作業的原理是這樣,我們可以在二值化影像中利用形態學原理來改變影像內容,假想一下,所所謂的二值化影像,就是影像的像素簡單表現為0和1(嚴格來說應該是255),就是全亮和全暗,以下我則描述為全黑和全白,這些像素將構成完整的圖片。

想像一下,你拿著一隻立可白塗黑板,黑板上就只有白色線條和黑色版面。

一張簡單的二值化影像,影像中只有全黑、全白兩種像素
二值化影像的像素分佈情況

往下描述如何透過ErosionDilation來分別實現Boundary ExtractionRegion Filling

Boundary Extraction

只需用到Erosion,再搭配像素加減運算,謹記著幾個要點即可。

Erosion是將影像中白色區域做減肥,運算完的結果會比原圖的白色區域更小,讓該物體瘦一圈,這一圈的寬度是由捲積Kernel 的大小所決定的, Kernel沿著影像滑動並計算,如果Kernel中m * n 範圍內所有像素值都是1,那麼新的像素值就保持原來的值,否則新的像素值為0,Kernel掃過的所有像素都會被腐蝕或侵蝕掉,影像的白色區域會變少。

在我們執行完Erosion後,可以發現1的部位被縮小了,就視覺上未必會發現亮的部位變小,因為他的變化著實很細微,有些原圖亮的像素是1,他在Erosion結果中是0,如果把他們相減,就可以得到找到亮部的相差,如此就會拿到亮部的輪廓。

先把圖片做Erosion後,高亮的地方變瘦了,接著用原圖減去Erosion結果,對比原圖,(Erosion)亮的地方比較瘦,原圖減去Erosion結果A-B,可以得到在Erosion結果中對比原圖沒有的亮部位,就可以得到邊緣了。

看一下Boundary Extraction的處理步驟:特別提醒一點,這邊說的相減或其他運算,都是指向素值處理,可以想像成把圖片轉成向量後做計算。

1.Boundary Extraction測試原圖
2.Erosion結果,肉眼看不出,但亮部已經變小了。
3.相減之後可以得到邊緣

Region Filling

這裡需要用到Dilation再搭配影像的其他運算。

Dilation的概念就是將影像中白色區域增肥,運算完的結果圖比原圖的白色區域更大,這一圈的寬度是由捲積 Kernel 的大小所決定的,Kernel沿著影像滑動並計算,如果捲積 Kernel m * n 範圍內只要有一個像素值是1,那麼新的像素值就為1,否則新的像素值保持原來的像素值,這表示捲積 Kernel 掃過的所有像素都會被擴張或膨脹,整張影像的白色區域會變多。

Region Filling區域填充,我先把原圖A用NOT取得相反(補數)的圖C,接著我先在原圖A要擴充的黑色部位加上白點,再來我將原圖A做Dilation後,亮度會變高得到圖B,但為了限縮白色不要超出邊緣無限增長,必須把B和C做AND運算,則得到一個結果A。

此時可以看到我撒上的白點以已經被放大,但是其他部位因為和補數C做過AND,所以會被限縮著,重複做50次後,可以發現我的點都被白色填滿了,是圖D。

接著把填滿的圖D和原圖做OR運算,可以看到原圖中的其他部位被保留了,但是我指定的點變成白色了,就可以看到一個完整的填充效果。

看一下Region Filling的處理步驟:特別提醒一點,這邊說的相減或其他運算,都是指向素值處理,可以想像成把圖片轉成向量後做計算。

Region Filling測試原圖
NOT後得到補數圖
每次Dilate後白色膨脹,跟補數做AND,做完數次後得到以下。
最後把原圖和Dialte後的圖做OR得到填充的圖。

預先撒上白點才能正確做到填充效果,其實也只是把白點放大再放大,然後再用原始圖去限縮他的邊界,避免失真。

我曾嘗試用Erode後的圖取補數再去填充,但是會發現沒法控制邊緣一直變大,後來才改回原圖的補數去填充,就可以應付各種形狀的填充,跟小畫家的效果一樣,即便是用不規則的圖也可以被補數解決掉,還原出原本的形狀。

如果你需要更進一步了解Source Code的話,可以參考我寫的Python版本 on Colab,希望對你有幫助。

在開始之前

曾有很長一段時間,我習慣使用網路上的部落格服務來留下紀錄,但隨著出社會後工作忙碌,反而就忽略了做筆記的習慣,只是隨著年紀漸增後,記憶力越來越衰退,才不得不重啟這個工作 😛

也因為我的取向是做筆記,所以這裡的文章會比較偏向技術或教育類,相較於五光十色的外面世界,難免就比較顯得索然無味了。