2012-04-07 4 views
1

ich dieses Bild haben: enter image description heredie Pixel erhalten, die einer Form gehören,

In diesem Bild habe ich 11 Formen (wie Ellipsen aussehen). Ich möchte das RGB jedes Pixels in jeder Form finden (einschließlich der weißen Kante/Grenze, da es ein Teil der Form ist).

Wenn es hilft, habe ich die Mittelkoordinate jeder Form.

Vielen Dank!

Antwort

2

hier sind die Befehle, die Ihre Arbeit einfach macht ...

  1. Als "Superbest", sagte das Bild mit dem Befehl

    %% Example%% 
    img = imread('coins.png'); 
    BW4 = im2bw(img); 
    BW5 = imfill(BW4,'holes'); 
    imshow(BW4), figure, imshow(BW5); 
    
  2. Jetzt Befehl bwlabeln verwenden

    füllen() , um die Anzahl der Cluster oder Formen herauszufinden.

    %% Example%% 
    L = bwlabel(BW5); 
    figure,imshow(L,[]); 
    

L geben Ihnen Anzahl von Formen mit der gleichen Anzahl an allen Pixeln zu gleichen Form gehört. L enthält Labels für die verbundenen Komponenten in BW. BW kann jede Dimension haben; L hat die gleiche Größe wie BW. Die Elemente von L sind ganzzahlige Werte größer oder gleich 0. Die mit 0 bezeichneten Pixel sind der Hintergrund. Die mit 1 bezeichneten Pixel bilden ein Objekt, die mit 2 bezeichneten Pixel bilden ein zweites Objekt und so weiter.

  1. Angenommen, Sie zwei Formen oder Regionen haben dann od die ursprüngliche Farbe oder Grauwerte zu finden, wie folgt.

    %% Example%% 
    cods = find(L==1); 
    Shape1(1:size(img,1),1:size(img,2))=0; 
    Shape1(cods) = img(cods); 
    %% Now shape1 is same size as img, but will have gray scale values at region1 locations only,you will get RGB valuse in shape1 image.. repeate it for as many shapes as you have in your image. 
    

Haben Sie eine glückliche Codierung ...

+0

+1 für die Verwendung von 'bwlabel()'. –

2

Dies ist eine hacky Lösung, fiel mir ein, als ich die Frage prüfe:

  1. jede Form füllen mit Weiß wie in der anderen Frage beschrieben wurde, Matlab fill shapes by white.
  2. Da Sie immer noch die Zentren der Formen haben, füllen Sie jetzt jede Form wieder mit einer Farbe, die nicht in Ihrem Bild vorhanden ist, wie Rosa.
  3. Jetzt ist jedes Pixel von Interesse (diejenigen, die zu der Form gehören: Rand und innen) ist rosa gefärbt, und kein anderes Pixel hat diese Farbe.
  4. Jetzt können Sie einfach eine Liste von rosa Pixel erhalten:

    foundPixels = find(img == pink); % pink holds the value for the pink color I used.

  5. Jetzt können Sie diese Indizes auf dem Originalbild verwenden (pixels = original(foundPixels);), um die Pixel, die Sie möchten zu erhalten.

Verwandte Themen