我用OpenCV的watershed算法來解決你的問題。如果您閱讀this great tutorial,您可以瞭解如何使用它,所以我不會在很多細節中解釋這一點。
我選擇了四個點(標記)。一個位於你想要提取的區域,一個位於室外,另外兩個位於內部的低位/高位部分,對你不感興趣。然後我創建了一個空的整數數組(即所謂的標記圖像)並用零填充。然後我給標記位置的像素分配唯一的值。
下圖顯示了標記位置和標記值,得出的原始圖像:
我也可以選擇在同一區域內多個標記(例如幾個標記屬於該區域你想提取),但在這種情況下,它們應該都具有相同的值(在本例中爲255)。
然後我用分水嶺。第一個輸入是您提供的圖像,第二個輸入是標記圖像(除了標記位置以外的任何地方都是零)。算法將結果存儲在標記圖像中;您感興趣的區域被打上了標記區域的值(在這種情況下255):
我設置沒有255值爲零的所有像素。我用3x3內核擴大了獲得的圖像三次。然後我用的膨脹圖像作爲原始圖像掩碼(我設置掩碼爲零以外的所有像素),這是結果我得到:
你可能會需要某種方法是會自動找到標記。這項任務的難度在很大程度上取決於輸入圖像的集合。在某些情況下,該方法可能非常簡單直接(如上面鏈接的教程),但有時這可能是一個棘手的難題。但是我不能推薦任何東西,因爲我不知道你的圖片通常如何(你只提供了一張)。 :)
看起來很有希望。所有的圖像都非常相似,所以我可以將整個數據集的平均值和/或標準值設置爲掩碼。我會盡力讓它成爲今天或明天,我會讓你知道它是如何發生的。好的工作,謝謝! – TasosGlrs