2017-05-28 5 views
1

Ich habe ein Bild mit weißen Flecken überall. Jetzt möchte ich einen Marker auf jeden Punkt basierend auf bestimmten Koordinaten und Kontrollen setzen. Jetzt ist mein Problem, ich möchte nicht zu viele Marker auf einem bestimmten "Blob" von weißen Flecken clustern, die mehr als ein Pixel aufnehmen. Meine Arbeit besteht darin, zu überprüfen, ob mein vorheriger Marker und mein aktueller Standort in der Nähe sind. Dies führt jedoch dazu, dass viele unabhängige weiße Flecken aufgrund der Nähe fehlen, selbst wenn es nicht notwendigerweise nur ein Fleck ist.Markierung in MATLAB nicht möglich

Hier ist mein aktueller Code:

a = find(overlap == 1); %overlap is a 1040 by 1392 binary matrix 
prev_coord = [1 1]; 

for i=1:size(a) 
    c = mod(a(i), 1040); 
    r = floor(a(i)/1040); 
    X = [prev_coord; r c]; 
    if(pdist(X, 'euclidean') > prox)  
     if(img(r, c) > 1) 
      gray = insertMarker(gray, [r c], 'x', 'color', 'red', 'size', 15); 
     else 
      gray = insertMarker(gray, [r c], 'x', 'color', 'white', 'size', 15);  
     end 
    end 
    prev_coord = [r c]; 
end 

Wenn prox eine sehr kleine Zahl wie 50 gleich, mein Bild sieht wie folgt aus: enter image description here

Wenn jedoch prox eine große Zahl wie 120, es sieht so aus: enter image description here

Irgendwelche Ideen, wie man das umgeht?

+0

Ich würde überprüfen, ob 2 Koordinaten gehören zu einem Blob mit verbundenen Komponenten Methoden, wie zum Beispiel 'bwlabel', es ist robuster als der Abstand zwischen ihnen. – user2999345

Antwort

2

können Sie tun das, morphological operations mit:

A = round(overlap./max(overlap(:))) % turn original image into binary image. 
A = imfill(A,'holes'); % fill holes in blobs 
A = bwmorph(A,'shrink',Inf) % reduce each blob to a single point 

Dann können Sie eine Markierung auf jedem Pixel platzieren, wo A==1.

+0

Das war eine tolle Lösung! – nini

+0

Haben Sie einen besseren Vorschlag für den Titel dieses Beitrags? Ich kenne viele Leute, die das gleiche Problem hatten, und es könnte nützlicher sein, wenn der Titel dieser Frage besser formuliert wäre. – nini

+0

Wie wäre es damit: "Die Zentren der weißen Flecken in einem Bild zu finden"? Das ist zumindest genau das, was mein Code tut. Aber es erwähnt die Markierungen nicht. Vielleicht "Markierungen in den Zentren weißer Flecken in einem Bild platzieren"? Ein wenig unhandlich, aber beschreibt das Problem und funktioniert auch irgendwie wie eine Tag-Cloud. –

Verwandte Themen