2015-02-24 31 views
1

我有這樣的圖像。我想找到筆記的位置。找到它們的最好方法是什麼? (他們不是圈子,他們是如此之小,所以circlefinder無法找到它們!)在圖像中查找筆記

enter image description here

Image of Notes !

+0

哇,這是一個有趣的問題!這肯定會很難,因爲與筆記相比,筆記有類似的結構(譜號,尖/平標誌)。這裏的形狀分析可能很困難。你只是想要筆記嗎?那周圍的員工隊伍呢?將這些作爲提取結果的一部分是否可以接受? – rayryeng 2015-02-24 17:10:03

+0

我只想要每個音符的圓圈!其他線對我來說並不重要 – onlyappleapp 2015-02-24 17:13:54

+1

問題的一部分可能是筆記通常不會打印成圓形 - 它們是橢圓形的。某種形式的模板匹配可能會奏效 - 捕獲一個音符頭和每邊幾個像素的小圖像。然後掃描圖像尋找類似的東西。 – 2015-02-24 17:17:25

回答

6

下面是一些代碼讓你去......這不是完美的,但這是一個有趣的哈哈哈哈。

我所做的就是用磁盤結構元素腐蝕圖像,直到圖像中留下的是形狀,看起來最像圓圈。然後我再次侵蝕,但這次是以一個與音符接近的角度定向的線結構元素;我估計它大約是15度。然後,打電話regionprops獲取質心,然後繪製它們。

代碼:

clear 
clc 

BW = im2bw(imread('Notes.png')); 
BW = imclearborder(BW); 

%//Erode the image with a disk structuring element to obtain circleish 
%// shapes. 
se = strel('disk',2);   
erodedBW = imerode(BW,se); 

這裏erodedBW看起來是這樣的:

enter image description here

%// Erode again with a line oriented at 15 degrees (to ~ match orientation of major axis of notes...very approximate haha) 

se2 = strel('line',5,15); 
erodedBW2 = imerode(erodedBW,se2); 

erodedBW2看起來是這樣的:

enter image description here

然後找到重心,繪製他們

S = regionprops(erodedBW2,'Centroid'); 

figure; 
imshow(BW) 
hold on 
for k = 1:numel(S) 

    scatter(S(k).Centroid(:,1), S(k).Centroid(:,2),60,'filled') 

end 

輸出:未檢測

enter image description here

空筆記,但在使用其他形態學操作我想是可控的。

希望有幫助!

+1

要檢測空白音符,可能對圖像的**反轉**應用相同的操作。無論如何,這不僅僅是OP應得的。好樣的! +1。 – rayryeng 2015-02-24 22:35:28

+0

哦,好主意@rayryeng我沒想過!我嘗試在磁盤前使用'strel'這一行,但結果並不好,我覺得太懶了,以至於無法進一步深入:)感謝+1! – 2015-02-24 22:47:17

+0

你也可能需要做一個'bwareaopen',因爲如果我們在倒數上應用相同的邏輯,仍然可能會有一些噪音......例如在工作人員頂部的高音譜號頂部的孔。 ..還是很好的! – rayryeng 2015-02-24 22:52:29