Bild in Teile aufteilen

8

Gibt es etwas in imagemagick oder gimp oder einem anderen linuxkompatiblen Werkzeug, was automatisch einzelne Objekte auf dem Bild erkennen kann und entweder einen Ort des Objekts zurückgibt oder jedes Objekt als separates Bild speichert?

Ich habe ein Bild wie dieses :

Für andere Bilder, bei denen sich Objekte auf einem Gitter befinden, habe ich erfolgreich crop operator in imagemagick, z. für 3x3 Gitter:

%Vor%

Ich kann crop nicht verwenden, wenn es kein rechteckiges Raster gibt, aber ich dachte, dass weiße Farbe für die Objekttrennung ausreichen sollte.

    
Tomas Greif 27.05.2014, 11:31
quelle

2 Antworten

6

Dies kann mit ImageMagick in mehreren Schritten geschehen. Das ursprüngliche Bild heißt meat.jpg:

%Vor%

%Vor%

Dies gibt Ihnen eine Pixelposition im Bereich des ersten Teils des Fleisches:

%Vor%

Damit färben wir das erste Stück in rot, trennen den roten Kanal und erstellen und wenden dann die Maske für das erste Stück an:

%Vor%

Das resultierende meat_1.jpg ist bereits getrimmt. Sie können dann den gleichen Weg mit meat_1.png anstelle von meat_0.png gehen, wobei meat_2.png als Grundlage für aufeinanderfolgende Iterationen im laufenden Betrieb erstellt wird. Vielleicht kann dies weiter vereinfacht und in ein Shell-Skript eingebunden werden.

    
hlg 04.07.2014, 18:21
quelle
6

Ich würde dies mit einem Ansatz "Connected Components Analysis" oder "Bildsegmentierung" angehen, so ...

Teilen Sie zuerst das Eingangsbild in Komponenten auf, geben Sie eine Mindestgröße an (um kleinere Klumpen zu entfernen) und achten Sie auf 8 Konnektivität (dh die 8 benachbarten Pixel N, NE, E, SE, S, SW, W, NW werden als Nachbarn betrachtet) statt 4-Konnektivität - die nur N-, E-, S- und W-Pixel berücksichtigt, die miteinander verbunden sind.

%Vor%

was diese Ausgabe ergibt:

%Vor%

Jede Zeile entspricht einer separaten Komponente oder einem Segment und zeigt die Breite und Höhe der Begrenzungsrechtecke für jede Komponente und ihre Versätze von der oberen linken Ecke an. Sie können das einfach mit awk analysieren und die angezeigten roten Felder auf das Bild zeichnen, um folgendes zu erhalten:

Das Ausgabebild heißt lumps.png und sieht folgendermaßen aus:

und Sie können sehen, dass jeder Komponente (Fleischstück) eine andere Graustufe zugeordnet ist. Sie können auch lumps.png analysieren und für jedes Fleischstück eine separate Maske wie folgt extrahieren:

%Vor%

Das gibt uns Masken wie folgt:

und das

wir können sie alle zusammen sehen, wenn wir das tun

%Vor%

Wenn wir nun jede der Masken auf das Eingabebild als Deckkraft anwenden und das resultierende Bild trimmen, werden wir mit den einzelnen Fleischklumpen belassen

%Vor%

Und sie werden so aussehen:

und das

Oder wir können sie alle so zusammensetzen:

%Vor%

Coole Frage: -)

    
Mark Setchell 20.04.2015 21:17
quelle

Tags und Links