2017-03-08 52 views
0

我試圖從已經標記了某種顏色的圖像中提取區域。另外,在以下從選定的點開始查找最大的連接Blob

enter image description here

畫面我想僅提取屬於在人行道的像素,即,屬於該被連接到圖像的中間下部的黑色斑點的所有像素。有跡象表明,斑點外黑點,我沒興趣。所以,如果我能得到如下圖所示

enter image description here

大致區域,將是完美的。有誰知道一些常見的算法可以做到這一點?形態學?使用一種泛洪算法來增長區域?

感謝,

+1

你在該地區內有起點/種子嗎?如果是,區域增長可能是一種可能性,以及算法的活動輪廓類,如蛇或水平集。 對於所有這些方法,您將不得不定義一個標準(或活動輪廓的能量函數),這將使輪廓在您需要的極限處停止。既然你正在談論一個「黑色斑點」,可以使用基於顏色的標準,但它不一定非常健壯。 對於形態學看看分水嶺算子。再次,關鍵在於預處理數據。 – Ben

+0

是的我有一個起點,x = 150和x = 200之間的一個小矩形,大約10個像素高。 – user423805

+1

一個解決方案可能是首先提取圖像中的所有黑色像素,使用形態學打開/關閉來移除小黑色寄生蟲像素,然後提取圖像中最大的黑色斑點。使用蛇可能是不錯的,因爲你可以控制能量函數中輪廓的平滑度(即避免將輪廓朝向與主要輪廓相連的小的剩餘打擊增加)。 – Ben

回答

1

你可以用顏色填充做到這一點很容易。如果我使用ImageMagick來在命令行演示,因爲它安裝在大多數Linux發行版上,並且可用於macOS和Windows。因此,請記住,您確定爲種子的像素在您提供的包含軸的圖像中的440,520附近,我們可以填充與該顏色相匹配的所有像素,並使用青色觸摸種子:

convert scene.png -fill cyan -draw 'color 440,520 floodfill' result.png 

enter image description here

或者,我們可以通過非青色像素爲白色和青色像素更改爲黑色製作一個模板:

convert scene.png -fill cyan -draw 'color 440,520 floodfill' -fill white +opaque cyan -fill black -opaque cyan z.png 

enter image description here

有一千個其他的東西,你可以簡單地在命令行中做進一步利用這個...填寫面具小孔,從掩膜製作的透明層 - 如果你需要一個剛剛提出更多的問題手。


如果你想關閉孔圖像,你可能想使用形態功能。我遠離任何帶有ImageMagick的電腦一週,所以我只能用一般的術語告訴你。開始與純黑色和白色(無灰)上面的圖片,並嘗試:

convert image.png -morphology open disk:3 result.jpg 

嘗試更換上面closeerodedilateopen。試用disk,disk:3disk:7等。

+0

你能舉一個例子來填補小洞嗎?謝謝。 – user423805

+0

我已經加了一些未經測試的代碼,因爲我在路上一段時間。它應該給你一個如何填補漏洞的想法。 –