基于顯著性的圖像分割
本篇文章介紹了顯著性圖像的分割,這個方法最初來源于對于發掘一個自動生成圖像三分圖方法的興趣,這個摳圖算法用于關注前景和背景細節的圖像分割。
通常我們看到一幅圖像的時候,我們都會關注于圖像中的某一點上,這有可能是一個人,一個建筑物或者甚至是一個水桶。圖像的清晰部分幾乎沒有什么意義,這些部分在圖像中通常的特點是缺少關注點、顏色單調和紋理平滑。當這樣一類圖像出現的時候,它們是從圖像剩余部分分割出感興趣目標的理想圖像。這篇文章就探索了這類顯著性圖像的分割。
顯著性圖像的例子。左邊的水桶和右邊的人就是感興趣的目標。
這個項目最初來源于對于發掘一個自動生成圖像三分圖方法的興趣。當和摳圖算法相結合的時候三分圖就是圖像的掩膜。這個摳圖算法用于關注前景和背景細節的圖像分割。正常情況下一個三分圖包含了前景的白色部分、背景的黑色部分和不確定的灰色區域。
三分圖的例子(來源于參考文獻[2])
大多數摳圖算法的問題就是它們希望由用戶提供三分圖,這是一個耗時的工作。這里有兩篇我參考的主要的論文,他們嘗試去自動生成三分圖[1][2]。在第一篇論文里,Hsieh等人使用了一個 相當直接和易完成的方法。但不幸的是他們的方法并不是完全自動的,因為它需要用戶給Grabcut算法提供一個矩形區域。Gupta等人而是使用顯著性方法去預測感興趣的區域。然而他們的顯著性方法非常復雜,結合了三種顯著性算法的結果。其中一種算法使用了卷積神經網絡,這是一種我希望為了簡單實現而避免使用的技術。
除了需要用戶提供信息之外,Hsieh’s等人的算法產生的結果是非常合理的。我想如果我能夠使Grabcut部分自動化,那么他們算法的其余部分就會解決最初始的那個問題。我是從Gupta等人提供的方法那里得到的去創造這樣一個自動方法的靈感。
方法
很多的圖像分割方法的目標就是將圖像二值化為感興趣的區域。這個項目的目標是不一樣的。
首先,我想大致的找出感興趣區域。將高斯模糊濾波器應用于圖像。從模糊圖像中生成平均15個像素大小的超像素。超像素算法旨在基于像素區域中的值的顏色和距離來打破圖像。具體來說,用了簡單線性迭代聚類算法(SLIC)。
水桶和人的超像素圖
超像素將圖像分為幾乎一樣大小的區域。這樣做的好處之一就是超像素允許區域的泛化。我們可以假設超像素里的大部分像素有著相似的屬性。
與確定圖像中的超像素并行地,計算圖像的顯著圖使用了兩種不同的顯著性方法。第一種方法使用了內置的OpenCV方法,叫細粒度顯著性。第二種方法涉及獲取細粒度顯著圖像的平均值并從圖像的高斯模糊圖中減去它,就得到了新圖像的絕對值。
這兩種方法的不同之處在于結果的侵略性。下面的兩張圖象高亮了感興趣區域。細粒度顯著性方法產生的圖像相對柔和一些。另外,細粒度顯著性圖像主要勾勒出顯著圖像的邊界,盡管另一種方法也捕獲了顯著圖的內部。與細粒度方法相比積極的方法確實產生了更多的噪聲。消除噪聲是這個過程的下一步。
使用細粒度方法產生的水桶和人的顯著性圖
使用積極顯著性產生的水桶和人的顯著性圖
以下的技術是從Gupta等人的論文中挖掘出來的。為了對圖像進行二值化,通過迭代從彩色圖像生成每個超像素。如果顯著性圖像超像素區域的中間像素值大于閾值T1,那么這整個超像素就二值化為白色。否則整個超像素就是黑色。T1由用戶選擇。在參考文獻[2]中,T1被設置為顯著性圖像中最大像素值的30%,但是在該項目中使用的是25%。
在二值化圖像之后,擴張圖像基于使用哪種顯著性技術。在細粒度顯著方法中,圖像被擴大為超像素平均值的兩倍大小。Aggressive顯著性方法沒有擴張圖像。圖像中出現的噪聲越大,任何擴張都有風險。
細粒度顯著性方法(左)和二值化Aggressive顯著性方法擴張后的水桶圖像
最后一步又取決于使用哪種顯著性方法。在這兩種方法中,都提取了白色像素最大的區域。在OpenCV中,這個操作可以通過尋找圖像中的輪廓并選擇具有最大面積的輪廓來實現。對選擇出來的區域會匹配一個包圍框。
據觀察,細粒度顯著性方法常常會生成碎片區域。在包圍框生成后,其他任何落在包圍框里的不屬于最大區域的白色部分都會被添加到包圍框里。包圍框的邊界會增大來包圍這些區域。Aggressive顯著性方法并不需要這樣做。通常最大區域的包含量超過了預期。
最后一步是將最終找到的包圍框輸入到Grabcut算法中。Grubcut是分割圖像的常用方法。包圍框給了Grabcut函數什么會被算法最終分割為背景和前景。在包含Grubcut應用程序的大多數軟件包中,用戶編輯矩形區域可以為算法產生更好的結果提供更多的信息。在這個項目中,使用了OpenCV內置的Grubcut功能。
在桶的實驗中,兩種方法都產生了相同的結果。
此過程在[1]開始的地方結束。在將來我計劃繼續開發這種自動tripmap生成器。
結果
在這兩種方法中,Aggressive顯著性圖似乎為大多數圖像產生了精確的掩模。細粒度顯著性方法產生的圖像中的顯著性目標更為“笨重”。如果圖像很長或有卷須,則這些部分通常會與圖像的其余部分斷開連接。然而,由于其保守的性質,當圖像特別嘈雜時,細粒度方法更好。掩模不一定能夠捕獲整個圖像,但它并沒有像Aggressive方法那樣頻繁地溢出。
兩種方法的樣本結果
還要必要指出,對于[1]中開發的算法,欠發達的掩模并不壞。由于最終目標是開發tripmap圖像,因此掩模將由灰色區域填充。該灰色區域將有助于區分前景和背景。
對于任何的每周的讀者來說,使用C++學習OpenCV并實現這個算法是非常耗時的。對于時延感到很抱歉,但希望將來這個項目會繼續并有更多的內容!
Github 代碼地址:https://github.com/TimChinenov/GraspPicture
參考文獻
[1] C. Hsieh and M. Lee, “Automatic trimap generation for digital image matting,”?2013 Asia-Pacific Signal and Information Processing Association Annual Summit and Conference, Kaohsiung, 2013, pp. 1–5.
[2] Gupta, Vikas & Raman, Shanmuganathan. (2017). Automatic Trimap Generation for Image Matting.
本文為 AI 研習社編譯的技術博客,原標題 :Saliency Based Image Segmentation
作者:Tim Chin,翻譯:GAOLILI
原文鏈接:https://towardsdatascience.com/saliency-based-image-segmentation-473b4cb31774
本文來源于人人都是產品經理合作媒體 @雷鋒網,翻譯@GAOLILI
題圖來自Unsplash,基于CC0協議。
- 目前還沒評論,等你發揮!