2017-02-24 103 views
1

如何使用Python(也可能是一些工具,如OpenCV)從左側圖像轉到右側圖像?在Python中以編程方式剪切圖像/刪除背景

original processed

我做了使用裁剪的在線工具這一手。我在圖像處理(特別是在實踐中)完全不知情。我正在考慮應用一些邊緣或輪廓檢測來創建一個蒙版,我將稍後應用於原始圖像,將其他所有內容(除了感興趣區域之外)都塗成黑色。但我失敗了。

目標是預處理非常相似圖像的數據集,以便訓練一個CNN二元分類器。我試圖通過在接近感興趣區域的地方裁剪圖像來訓練它,但是噪音非常高,CNN學到的東西一無所獲。

有人可以幫我做這個預處理嗎?

回答

1

我用OpenCV的watershed算法來解決你的問題。如果您閱讀this great tutorial,您可以瞭解如何使用它,所以我不會在很多細節中解釋這一點。

我選擇了四個點(標記)。一個位於你想要提取的區域,一個位於室外,另外兩個位於內部的低位/高位部分,對你不感興趣。然後我創建了一個空的整數數組(即所謂的標記圖像)並用零填充。然後我給標記位置的像素分配唯一的值。

下圖顯示了標記位置和標記值,得出的原始圖像:

enter image description here

我也可以選擇在同一區域內多個標記(例如幾個標記屬於該區域你想提取),但在這種情況下,它們應該都具有相同的值(在本例中爲255)。

然後我用分水嶺。第一個輸入是您提供的圖像,第二個輸入是標記圖像(除了標記位置以外的任何地方都是零)。算法將結果存儲在標記圖像中;您感興趣的區域被打上了標記區域的值(在這種情況下255):

enter image description here

我設置沒有255值爲零的所有像素。我用3x3內核擴大了獲得的圖像三次。然後我用的膨脹圖像作爲原始圖像掩碼(我設置掩碼爲零以外的所有像素),這是結果我得到:

enter image description here

你可能會需要某種方法是會自動找到標記。這項任務的難度在很大程度上取決於輸入圖像的集合。在某些情況下,該方法可能非常簡單直接(如上面鏈接的教程),但有時這可能是一個棘手的難題。但是我不能推薦任何東西,因爲我不知道你的圖片通常如何(你只提供了一張)。 :)

+0

看起來很有希望。所有的圖像都非常相似,所以我可以將整個數據集的平均值和/或標準值設置爲掩碼。我會盡力讓它成爲今天或明天,我會讓你知道它是如何發生的。好的工作,謝謝! – TasosGlrs