Inhaltsverzeichnis:

BME 60B Sandbox-Projekt - Gunook
BME 60B Sandbox-Projekt - Gunook

Video: BME 60B Sandbox-Projekt - Gunook

Video: BME 60B Sandbox-Projekt - Gunook
Video: BME Sandbox Project 2024, Juli
Anonim
BME 60B Sandbox-Projekt
BME 60B Sandbox-Projekt

Unser Sandbox-Projekt soll Forschern im biologischen Bereich helfen, Zellproben zu analysieren und den Zustand ihrer Zellen herauszufinden. Nachdem der Benutzer ein Bild seiner Zellprobe eingegeben hat, verarbeitet unser Code das Bild, um es für die Zellzählung vorzubereiten, indem das Bild in Graustufen und binär konvertiert wird. Der Code verwendet Schwellenwerte, um überschüssige Informationen zu entfernen, die nicht zu den tatsächlichen Zellen gehören, um die Zellmassen genau zu finden. Nachdem wir die Anzahl der Zellen im Bild gezählt haben, gibt unser Code die Pixelgröße des Bildes an und findet dann die Verteilung der Zellenfläche, indem er die Anzahl der Zellen gegen die Fläche der Zellen aufträgt, um dem Benutzer die Konfluenz zu geben, die die Prozentsatz der Oberfläche einer Kulturschale, der von den interessierenden Zellen bedeckt ist. Anhand der Konfluenz kann der Forscher bestimmen, ob die Zellen passagiert werden sollten oder nicht; Die Passage von Zellen bezieht sich auf die Verlängerung der Lebensdauer oder der Anzahl von Zellen oder Mikroorganismen, indem ein Teil der Kultur auf ein frisches Wachstumsmedium übertragen wird, und es ist nützlich, wenn die Zellen zu groß werden oder die Nahrung ausgeht. Nachdem der Code ausgeführt und das Bild verarbeitet wurde, kann der Benutzer entscheiden, ob er die Ergebnisse akzeptiert oder ablehnt, und bei Bedarf mit der Anpassung des Schwellenwerts zum besseren Abrufen von Daten fortfahren.

Schritt 1: Bild für die Analyse auswählen und konfigurieren

Bild zur Analyse auswählen und konfigurieren
Bild zur Analyse auswählen und konfigurieren

Der erste Schritt in unserem Code besteht darin, das entsprechende Bild auszuwählen und es für die Analyse in Matlab zu konfigurieren. Wir können das Bild mit der uigetfile-Funktion auswählen, die es uns ermöglicht, jede Datei zu greifen und in das Programm einzufügen. Dann lesen wir mit imread das Bild und konfigurieren es für die Analyse in Matlab. Das ausgewählte Bild wird dann in einem Nebenplot angezeigt.

Schritt 2: Schwellenwert und GUI

Schwellenwert und GUI
Schwellenwert und GUI
Schwellenwert und GUI
Schwellenwert und GUI

Ganz am Anfang des Codes wird ein Bild mit „uigetfile“ausgewählt und dann dieses Bild mit einer Variablen definiert. Die Variable wird dann verwendet, um den Code zu identifizieren, wenn verschiedene Analysen ausgeführt werden. In der Abbildung wird ein 2x2-Subplot erstellt. In Position 1 wird das Originalbild angezeigt. Im nächsten Abschnitt des Codes findet die Anpassung der Schwellenwerte statt. Anfänglich wird ein Schwellenwert von 0,6 als Vorgabe verwendet und in Position 2 des Nebendiagramms angezeigt. Eine if-Anweisung wird dann verwendet, um zu bestimmen, ob der Benutzer den Schwellenwert beibehalten oder anpassen möchte. Der Benutzer kann dann den Schwellenwert unter Verwendung einer GUI einstellen, die das Bild bei unterschiedlichen Schwellenwertbedingungen, des Schiebereglers und einer Speicherschaltfläche enthält. Nachdem der Schwellenwert festgelegt wurde, klickt der Benutzer auf die Schaltfläche Speichern, um das Bild zu speichern, und es wird in den MATLAB-Dateien des Benutzers als-p.webp

Schritt 3: Zeichnen von Konturen und Zellverteilung

Zeichnen von Konturen und Zellverteilung
Zeichnen von Konturen und Zellverteilung
Zeichnen von Konturen und Zellverteilung
Zeichnen von Konturen und Zellverteilung

Der nächste Teil des Codes zeichnet die Konturen. Es gibt eine Schleife, in der die Zellen von einem roten Umfang umgeben sind, und die Zellen, die sich über einer anderen Zelle befinden, sind grün umrandet. Das umrissene Bild wird dann in Position 3 mit einer interaktiven Distanzlinie angezeigt. Diese Linie bestimmt die Anzahl der Pixel in der Linie, die vom Benutzer für einen Pixel-zu-Millimeter-Konverter angepasst wird. Der Distanzfaktor wird dann mit der durch die Regionprops bestimmten Fläche multipliziert und die Fläche wird nun in Millimeter zum Quadrat ausgedrückt. Die Daten werden dann unter Verwendung eines Histogramms aufgetragen, um die Verteilung der Zellen nach ihrer Fläche zu sehen. Dieses Histogramm wird dann an Position 4 angezeigt.

Schritt 4: Zellenbild konvertieren

Zellenbild konvertieren
Zellenbild konvertieren

In diesem Schritt haben wir das Graustufenbild genommen und es binarisiert, gefiltert und invertiert. Durch das Ausführen dieser Funktionen für das Bild wurden verrauschte Pixel entfernt, die mit Zellen verwechselt werden konnten, und das Bild wurde an den Zellenrändern glatter und weicher. Dies geschah, um die Zellen im Bild als unterscheidbare "Kleckse" zu extrahieren, die sich in der Intensität vom Hintergrund unterschieden. Die "Blobs" waren weiße Bilder hoher Intensität und der Hintergrund war schwarz. Wenn wir etwas mehr Zeit eingeräumt hätten, hätten wir eine andere Blob-Bildkonvertierung anstelle der Imbinarisierungsfunktion verwendet, um genauer und besser zu unseren Bildern zu passen, aber wir brauchten mehr Zeit, um die Funktion zu recherchieren und zu implementieren.

Schritt 5: Zellen zählen und Zellkonfluenz berechnen

Zellen zählen und Zellkonfluenz berechnen
Zellen zählen und Zellkonfluenz berechnen

In diesem Schritt des Codes wollten wir die Anzahl der Zellen zählen, die sich im Bild befanden. Wir haben in erster Linie die Funktion regionprops verwendet, um die Flächen der Blobs zu berechnen, und wenn die Fläche so berechnet wurde, dass sie in unserer gewünschten Grenze liegt, würde sie in einem Subplot dargestellt. Die Grenzen wurden gesetzt, um kleine verrauschte Pixel oder große Intensitäten, die keine Zellen waren, zu entfernen. Der Zellenzähler würde dann die dann gezeichneten Schwerpunkte zählen und sie in der for-Schleife zum Zähler addieren. Nachdem die Flächen der Zellen bestimmt waren, konnten wir die Konfluenz berechnen. Die wichtigste Bedeutung dieses Schritts im Code bestand darin, den Zusammenfluss der Zellen zu finden, und dies war entscheidend für unser Endziel des Codes. Dazu haben wir berechnet, indem wir die Pixel (sum(allAreas)) in jedem Blob aufsummiert und dann durch den Gesamtpixelwert des Bildes (numel(img)) geteilt haben. Dieses Verhältnis würde uns die Konfluenz liefern, und wenn festgestellt wurde, dass es größer als 80% ist, ist es an der Zeit, dass die Zellen vom Forscher passagiert werden. Unser Ziel war es, so genau und genau wie möglich zu sein, aber mit der begrenzten Zeit traten solche Ungenauigkeiten auf. Wenn es die Zeit erlaubt hätte, hätten wir nach Möglichkeiten gesucht, das Zählen von Blobs genauer zu machen, wie z. B. mehr Filtertechniken und/oder eine Hough-Transformation, da noch nicht genügend Forschung betrieben wurde, um diese Filtertechnik auszuprobieren

Schritt 6: Rundheit der Zellen

Rundheit der Zellen
Rundheit der Zellen
Rundheit der Zellen
Rundheit der Zellen

Bevor wir die Rundheit eines Blobs in einem Bild messen können, müssen wir das Bild von RGB in Graustufen konvertieren, binarisieren, invertieren und filtern. Eine Filtertechnik verwendet die Funktion bwareaopen, die das interessierende Bild filtert und alle Spezifikationen oder Pixel entfernt, die zu klein sind und nicht die Größe einer Zelle darstellen. Es wird ein strukturierendes Element mit der Form einer Scheibe und der Nachbarschaft von 2 erstellt und zum Füllen von Lücken im Hintergrund oder innerhalb der Zellen verwendet. Dann verwenden wir die Funktion bwboundaries, die Blobs verfolgt und in einer Matrix speichert. Wir beschriften das Bild dann mit verschiedenen Farben, damit es klarer wird. Als Nächstes wird mit einer for-Schleife, die entsprechend der Anzahl der im Bild gefundenen Objekte und Löcher ausgeführt wird, eine Grenze um die diesem Array entsprechenden Blobs festgelegt. Sobald diese Schleife beendet ist, beginnt eine weitere Schleife, wiederum entsprechend der Anzahl der im Bild gefundenen Objekte und Löcher. Diesmal verwenden wir die Funktion regionprops, die bestimmte Eigenschaften wie Fläche aus dem Array sammelt und die Informationen mit der Anzahl der Objekte und Löcher speichert. Anhand dieser Informationen berechnen wir die Fläche und den Umfang dieser Objekte unter Verwendung der Schwerpunktform. Ein Schwellenwert wird festgelegt, um die Ergebnisse zu vergleichen, sobald wir die metrische Einheit eines kreisförmigen Objekts berechnen und diese Messung als Text neben den berechneten Schwerpunkten darstellen. Der endgültige Code zeigt die Rundheit der verschiedenen im Bild gefundenen Zellen an, und alle Werte, die dem Wert 1 nahe kommen, sind runder als andere. Ein Wert von 1 bedeutet, dass die Zelle perfekt rund ist und sich in einem guten Passierzustand befindet.