2

將物體分割成不同的強度請查看下面的圖像以獲得更清晰的想法。使用MatLab以不同的強度對物體進行分割請使用MatLab

enter image description here

我相信在座的各位可以看到這張圖片,這是3。我試圖根據自己的強度,流域分割他們的圖書數量。由於噪音,即使使用Canny也不是很成功。但總而言之,除了canny之外,圖像總是看起來像這樣(參見左圖): enter image description here

這裏所有的書都聚集在一起。我的目標是最終將它們分開並使用邊界來計算書的數量。我也在嘗試使用label2rgb來進一步區分這些書籍,但是,發生的只是一種顏色,這意味着MatLab採用它,因爲所有三本書都是一樣的。

我已經在精裝書上做到了這一點,並取得了巨大的成功,但是由於這本書不是很好的封面,因此沒有明確的界限來區分它們。

我一直在試圖分割這個圖像沒有成功幾天。有任何想法嗎?歡迎任何建議或想法。

+1

情節'mean'(或'median')沿着所述灰度圖像的所述第二尺寸。我相信這會幫助你計算書籍。 – Shai

+0

謝謝。我正在嘗試它。你的意思是看情節的高峯和低谷嗎? – rockinfresh

+0

這種尋找沿着每個水平行的平均值的技術類似於我爲分割文本行所做的建議。至少你可以看到每個水平行的峯值和數值對於真實圖像來說會是什麼樣子。 http://stackoverflow.com/questions/8015001/is-there-an-efficient-algorithm-for-segmentation-of-handwritten-text/8875390#8875390 – Rethunk

回答

1

在x值處沿y軸取一個切片,以便您有良好的邊界。然後使用「conv」找到該1-d向量(包含0和1)的卷積與奇數高斯函數的中心部分。這就像一個邊緣濾波器,但對噪聲會很強大。這種卷積會給你一堆不規則間距的峯值。找到峯值並對其進行計數。每個高峯是兩本書之間的界限。 (對不起,這個簡單的過程很難在沒有白板的情況下解釋。)

「奇數高斯函數的中心部分」=想象一個正弦函數,在正負pi處截斷。但從積極到消極的變化更接近一步功能。我想你可以通過卷積高斯和階梯函數來得到你想要的。 (再次,抱歉沒有白板。)

EDIT2:下面是一些Matlab代碼,以交互方式運行,所以你可以明白我的意思:

x=[-9.5:1:9.5]; 
y=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1]; plot(x,y,'.'); 
g=exp(-x.*x/8); plot(x,g,'.'); 
odd_g=conv(y,g);plot([-19:19],odd_g,'.') 

所以,odd_g(或類似的東西)是你想要在給定的x處與圖像切片進行卷積。

peaks=conv(image_slice,odd_g); 

EDIT3:假設你有

image_slice=[1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1]; 

,請注意我已經把在嘈雜的邊緣。對於所選擇的值,當您繪製的卷積,

plot(conv(image_slice,odd_g) 

你看到在一個邊緣的噪音給人一種輕微的高峯,但它不是一個真正的邊緣一樣大。所以你可以找到峯值並丟棄任何小於某個臨界值的值。當然,選擇最適合您數據的odd_g參數。

+0

聽起來可能。我會試試看,希望很快回復你,看它是否有效。非常感謝! – rockinfresh

1

對我來說,這是一個形態學過濾的經典問題。我們可以看到,隨着我們提高門檻,我們可以看到不同部分的書籍。

Threshold at 100 Threshold at 150Threshold at 172

現在基於灰度分量的面積/尺寸一些灰度濾波可以與一些較好的分割提供。這稱爲區域開放形態過濾:http://www.mathworks.fr/fr/help/images/ref/bwareaopen.html

這基本上刪除大小/面積小於特定參數的連接組件。 因此,要看到這在行動這裏是幾個過濾圖像的閾值以上。

Area opening and closing

Another gray level

x150 = I>150; 
    x100 = I>100; 
    x172 = I>172; 
    x150_op = bwareaopen(x150,80); 
    x172_op = bwareaopen(x172,300); 
    figure, imshow(~bwareaopen(x150_op,150); %area closing 
    figure, imshow(~bwareaopen(x172_op,300); %area closing 

因此,因爲我們看到我們需要一個連接區域開口濾波器,其計算與某個區域連接的灰度其它的組件。我認爲你可以調整這本書的書!

提供相同運營商和一些例子另一個庫:http://www.mmorph.com/mxmorph/html/morph/mmareaopen.html

祝您好運!

+0

感謝您的建議,我已經嘗試了這個,但是我的學校主管阻止了我。他說他想避免任何調整或需要調整。原因是一個普通人只能拍攝一張圖像,電腦會告訴他書的數量。然而,這種方法需要在每次圖像(不同書本數量,不同書本大小)改變時進行微調。 – rockinfresh

+0

嘿,當然這是一個有效的評論,我同意這需要一些閾值的調整,但這是一次,應該是健壯的。在這裏你總是可以選擇最大的N個灰度組件。更具體地說,在這裏你需要計算最大灰度分量的數量。如果有噪音元件面積的閾值可以解決這個問題。此外,區域過濾並不取決於書本是水平的還是略微傾斜的,因爲它們在平移和旋轉方面不變。 – beedot

1

Shai建議計算圖像每個水平行的平均值可以幫助識別圖書。如果書不平整,不水平或具有相似的顏色,那麼該方法會有一定的限制。然而,您可以考慮使用水平平均值/中值等作爲檢測圖書之間可能出現的空氣間隙的方法,而不是將注意力集中在相似亮度的團塊上。

我不會在二元圖像中工作太多。太繁瑣,而且不夠健壯。您可以找到某些圖像的解決方案,但可能會花費大量時間試圖找到所有圖像的解決方案。這個圖像灰度強度的聚類非常重要,你不想丟棄這些數據。二值化之前的閾值可能是一個混亂和不滿意的業務。

您是否熟悉均值偏移算法?這是一種類似於k均值聚類的聚類算法,但不需要事先知道項目數量(k)。這可以幫助您將原始灰度圖像中的數據聚類在一起,並發現有三個大小不一的灰度值合理一致的塊。

Image Segmentation using Mean Shift explained

http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_meanshift/py_meanshift.html

http://saravananthirumuruganathan.wordpress.com/2010/04/01/introduction-to-mean-shift-algorithm/

+0

我在OpenCV中使用了Mean Shift之前的其他圖像處理工作。根據我的經驗,在這裏使用它的唯一問題是,書籍之間的空隙可能完全聚集在一起,因爲差距太小。還沒有嘗試過在MatLab中使用均值偏移。既然你認爲它會奏效,我會更多地閱讀它,並儘快試一試。感謝您的建議。如果它證明是成功的,將會回到你身邊(由於學校作業和考試的提出,可能需要一段時間)。再次感謝 (: – rockinfresh