2013-07-19 119 views
2

我對matlab很新穎,但是卻遇到了這種情況。我有一幅海洋的衛星圖像,裏面有一些土地和一些小船。使用閾值製作二進制掩碼和bwlabel,我設法創建了一組符合水上船隻的標籤。這裏是標籤在船(和土地)的疊加圖像,因此您可以明白我的意思:MATLAB分析圖像的某些部分

enter image description here

正如你可以從圖片看到,該標籤包括船以及一些調光器旁瓣旁邊。我需要找到一種方法來創建一套僅覆蓋小船而不是旁瓣的新標籤。我不能只用一個更明亮的門檻,因爲我有很多不同亮度船隻的圖像,其中一些比其他船隻的旁瓣更暗淡。

所以我想我要問的是,有沒有一種方法從這個圖像中提取彩色部分,進一步分析它們(通過閾值化各個部分或使用直方圖或其他)來創建一組新標籤只包含小船,還要保留這些新標籤相對於原始圖像的位置不變,以便我可以將它們重新疊加到原始圖像上?如果是這樣,怎麼樣?

謝謝!

回答

2

這裏有幾個問題。

1.是否有方法從該圖像中提取彩色部分?

是的。

讓您從bwlabel獲得的標籤圖像爲L,原始圖像爲I。然後,S = regionprops(L,'BoundingBox');將爲您提供與L中的每個區域相關的邊界框。使用I2 = imcrop(I,S(2).BoundingBox);來提取S(2)中的區域。您必須檢查S(2)是否與L中的標籤2相對應(如果沒有,則修復該問題是微不足道的)。

2.進一步分析它們(通過閾值化各個分段或使用直方圖或其他)來創建一組僅包含小船的標籤。

不那麼簡單。這很大程度上取決於你的圖像。您可以使用MATLAB的默認閾值函數來使其工作。假定您獲得每個裁剪圖像的二進制蒙版(例如IB1)。

3.還要保留這些新標籤相對於原始圖像的位置是否完好,以便我可以將它們重新疊加到原始圖像上?

是的。由於您有一組邊框S只需更換L中的新面罩。

L(round(S(1).BoundingBox(2):S(1).BoundingBox(2)+S(1).BoundingBox(4)),... round(S(1).BoundingBox(1):S(1).BoundingBox(1)+S(1).BoundingBox(3))) = IB1;

其中I1是改進的掩模。分配給L時,不要忘記將掩碼中的所有非零值設置爲標籤索引。

更多關於爲什麼使用roundlook here

+0

非常感謝您的幫助。 – user2599252

0

您可以將舊圖像乘以帶標籤的區域(或im_label_ = 0,因爲它們將具有不同的標籤值)以刪除不相關的信息,然後使用「whatever」方法再次處理圖像背景被刪除?