So erstellen Sie eine bounding box um die Objekte ausgewählt, die von ismember?

Durch die folgende post Mit ismember mit der Ausgabe von regionprops ich bin in der Lage, selektiv zu isolieren, die angeschlossene Komponente die ich will. Zum Beispiel mit meinem code unten:

img = rgb2gray(imread('W1\Writer1_01_02.jpg'));
bw_normal2 = im2bw(img, graythresh(img));
bw22 = imcomplement(bw_normal2);
bw3 = bwmorph(bw22, 'dilate');
[label2,n2] = bwlabel(bw3);
stats2 = regionprops(label2, {'Area', 'BoundingBox'});
area2 = [stats2.Area];

idx = find((28 <= area2) & (area2 <= 40));
   BW2 = ismember(label2,idx);
figure, imshow(BW2)

Kann ich einfach die Anzeige der Ausgabe enthält NUR die angeschlossene Komponente, deren Fläche zwischen 28 und 40. Wie so

So erstellen Sie eine bounding box um die Objekte ausgewählt, die von ismember?

Aber stattdessen kann ich eine bounding box um das angeschlossene Komponente in das ursprüngliche Bild. Ich meine, wenn hier das original Bild:
So erstellen Sie eine bounding box um die Objekte ausgewählt, die von ismember?

Kann ich eine bounding box um meine gewünschte Komponente auf dem original Bild? Ich weiß, dass dies ist der code für eine bounding box um alle meine angeschlossenen Komponenten

imshow(img);
for j=1:n2

    hold on
    rectangle('Position',[stats(j).BoundingBox(1),stats(j).BoundingBox(2),stats(j).BoundingBox(3),stats(j).BoundingBox(4)],...
'EdgeColor','r','LineWidth',2 );
end

Aber wie kann ich nur eine bounding box um das element mit Bereich zwischen 28 und 40? Eher als die Produktion ein völlig anderes Bild wie oben gezeigt.

  • Ich könnte es nicht verstanden haben die Frage richtig. Aber es scheint, dass Sie das folgende Stück code for j=1:n2 was bedeuten würde, dass Sie Durchlaufen werden jeder einzelnen Komponente, wie auf dem Bild. Finden Sie die Zahl, die steht für das Objekt von Interesse und ziehen Sie den Begrenzungsrahmen.
  • Das wäre ziemlich schwierig und zeitaufwendig. Sagen ich will nur das Objekt mit einer Fläche von 40. Ich würde dann öffnen Sie die stats2.Area in meinem Arbeitsbereich, finden es und dann gilt es zu meinem code. Ich habe nur Hinzugefügt, dass der zweite code, um zu zeigen, dass ich weiß, wie man eine bounding box um alle Komponenten, aber wie man auf dem original Bild für das element ausgewählt ismember?
  • Äh, was ist schwierig, über stats2(idx).BoundingBox? Wenn Sie nicht klar, wie der code funktioniert, versuchen Sie Durchlaufen in den debugger, um zu sehen, was die Werte sind, und wie Sie sich verändern, line-by-line ("step over" benutzen, anstatt "step-in" zu vermeiden, den Mut, alle Funktionen)
InformationsquelleAutor StuckInPhD | 2014-02-24
Schreibe einen Kommentar