Auswahl von Daten in einer Region von Interesse in einer Matrix (mit Mathematica)

8

Ich habe ein (mathematisches 8.0.1.0-) Problem, das ich selbst nicht lösen kann. Ich habe Messdaten in einer Matrix, ich möchte einige von ihnen auswählen und sie dann addieren.

Um mein Problem besser zu erklären, hier ein einfaches Beispiel. Die Daten können durch eine Matrix S erzeugt werden:

%Vor%

Sie können schön geplottet werden mit:

%Vor%

und

%Vor%

Dann sollte man ein ähnliches Bild bekommen:

Nun möchte ich die Daten auswählen, die innerhalb des braun gezeichneten Polygons liegen. Diese Daten sollten am Ende addiert werden.

Wie kann ich das tun? Ok, ich könnte Rechtecke verwenden und eine Untermatrix erstellen, indem ich gute Anfangs- und Endindizes wähle / rate. Dann muss ich nur die Summe dieser Untermatrix aufbauen. Aber ich würde Polygone bevorzugen (genauer, wenn wir nicht über kleine Probleme mit den Matrixwerten streiten, die von der Linie des Polygons gekreuzt werden). Und ich würde es lieben, wenn ich mein Interessengebiet (ROI) direkt durch "Malen" des Polygons in die Matrix auswählen könnte (kein zeitaufwendiges Auswählen / Raten von Matrixindizes mehr).
Könnte mir hier jemand bei meinem Problem helfen? Wenn es nicht mit Mathematica lösbar ist, gibt es ein anderes Programm, das ich verwenden könnte?

Ich würde mich sehr über Hilfe und Hinweise freuen!

    
partial81 13.07.2011, 12:25
quelle

3 Antworten

10

Wenn Sie den Bereich von Interesse grafisch von Hand auswählen, können Sie:

Erstellen Sie zuerst ein Bild aus Ihren Daten, indem Sie eine Visualisierung verwenden, die es Ihnen später leicht macht, manuell auszuwählen:

%Vor%

Verwenden Sie dann die Front-End-Grafikwerkzeuge, um das Polygon über die Region zu zeichnen, die Sie interessiert (rechte Maustaste):

Folgen Sie, um die Maske zu erhalten, die Ihrem Polygon entspricht (wiederum Rechtsklick-Taste):

Schließe schließlich ein binäres Bild aus der Maske und verwende es, um die Summe der Pixel innerhalb des Polygons wiederherzustellen:

%Vor%

Der ganze Prozess sieht so aus:

BEARBEITEN : Wenn Sie Ihr Interessengebiet mit einer Freihandkontur definieren möchten, verwenden Sie das Freihandlinienwerkzeug anstelle des Polygons. Achten Sie darauf, die Breite des Strichs zu vergrößern, damit die Kontur beim Zeichnen leicht geschlossen werden kann. Sie können dies tun, indem Sie den Schieberegler Stroke & gt; Thickness nach rechts verschieben.

Das würde so aussehen:

Erstellen Sie dann die Maske, indem Sie die Innenseite der Freihandkontur mit der Funktion FillingTransform füllen und wie zuvor vorgehen:

    
Matthias Odisio 13.07.2011, 22:41
quelle
5

Vielleicht das:

%Vor%

was Dinge wie produziert mit dem Teil der Matrix aktualisiert live, wie Sie die Locators verschieben.

Um stattdessen Polygone zu erstellen, fügen Sie einfach weitere Locators hinzu. Die Auswahl des Teils der Matrix ist dann komplizierter und hängt davon ab, wie die Dinge ausgegeben werden sollen.

    
acl 13.07.2011 12:41
quelle
5

Wenn ich es richtig verstanden habe, müssen Sie eine verbundene Komponente ähnlicher Pixelwerte finden.

Sie können Bildverarbeitungsfunktionen verwenden:

Zuerst Binarize das Bild mit einem geeigneten Schwellenwert. Dann verwenden Sie MorphologicalComponents , die alle verbundenen Regionen identifizieren. Schließlich können Sie die Bilddaten extrahieren und Pick verwenden, um die Pixelwerte zu erhalten, die der Komponente entsprechen, an der Sie interessiert sind.

BEARBEITEN Hier ist eine Illustration des Konzepts:

    
Szabolcs 13.07.2011 13:10
quelle