-
Julia Brüninghaus authoredJulia Brüninghaus authored
Strawberry Volumen Estimation
Projektdetails
- Titel des Projekts: Entwicklung und Evaluation einer innovativen Methode zur nicht invasiven Volumenabschätzung von Erdbeeren
- Autorin / Erzeugerin: Julia Brüninghaus
- Datum der letzten Änderung: 24.03.2025
Inhaltsverzeichnis
Beschreibung
Das Projekt zielt darauf ab, das Volumen von Erdbeeren anhand von 3D-Punktwolken automatisiert zu ermitteln. Es werden Algorithmen zur Segmentierung, geometrischen Modellierung und Validierung der Ergebnisse eingesetzt. Die präzise Volumenbestimmung von Erdbeeren ist zentral für die Qualitätskontrolle und Optimierung von Ernteprozessen im vertical farming. Die Punktewolke muss möglichst nur die Erdbeere umfassen und die Längsachse der Erdbeeren muss der y-Achse entsprechen. Die Erdbeere muss ohne Verdeckungen als Punktewolke erfasst worden sein. Ausgelegt auf Python 3.12
Installation
#Am besten wird das Repository in
#Klonen des Repositories
git clone https://git.rwth-aachen.de/julia.brueninghaus/strawberry_estimation.git
#Installieren der nötigen Bibliotheken
pip install -r /path/to/requirements.txt
Anwendung
Wenn alle benötigten Bibliotheken installiert sind, kann das Modul verwendet werden. Hier ist ein Beispiel für das einlesen und verarbeiten einer Punktewolke. Die Beispiel Punktewolke kann im Ordner Data gefunden werden.
# Create an instance of Volumen_estimation with a specified point cloud file and number of disks
pcl = Volumen_estimation(
data_path=r"Data\S1_0_c_f.ply",
n_disk=8
)
# Segment the point cloud into horizontal slices
pcl.get_disks()
# Fit superellipses to each disk
pcl.fit_superellipses()
# Optionally smooth the boundaries between disks
pcl.smooth_results()
# Compute the total volume
pcl.volumen_strawberry()
# Visualize the fitted results
pcl.plot_ellipses()
Erklärung
SuperellipseFitter
Die SuperellipseFitter-Klasse passt eine Menge von 2D-Punkten an ein Superellipse-Modell (Lamé-Kurve) an, indem sie einen nichtlinearen Kleinste-Quadrate-Optimierungsalgorithmus verwendet.
Wichtige Attribute und Methoden
-
Attribute:
-
points
– Die anzupassenden 2D-Punkte -
initial_guess
,lower_bounds
,upper_bounds
– Parameter für die Optimierung -
parms
– Die ermittelten Parameter [x₀, y₀, a, b, n, theta] -
result
– Das Ergebnis des Optimierungsverfahrens
-
-
Methoden:
-
superellipse_residuals(parms)
– Berechnet den Abstand zwischen den Punkten und der Superellipse -
fit()
– Führt die Optimierung durch und passt die Superellipse an -
get_area(parms)
– Berechnet den Flächeninhalt der Superellipse anhand der Beta-Funktion
-
VolumenEstimation
Die Volumen_estimation-Klasse lädt und verarbeitet eine 3D-Punktwolke (z. B. einer Erdbeere), indem sie sie entlang der y-Achse in horizontale Scheiben („Disks“) unterteilt.
Für jede Scheibe wird ein benutzerdefinierter SuperellipseFitter verwendet, um die unteren und oberen Grenzen anzupassen. Anschließend werden die Scheibenvolumina mithilfe einer approximierten Kegelstumpfformel berechnet und aufsummiert, um das Gesamtvolumen zu ermitteln.
Wichtige Attribute und Methoden
-
Attribute:
-
data_path
– Pfad zur .ply-Datei -
n_disk
– Anzahl der Scheiben -
pcl
undpoints
– Geladene Punktwolke und deren Punkte -
disks
– Unterteilungen der Punktwolke -
results
– Ergebnisse der Superellipse-Anpassung
-
-
Methoden:
-
load_data(data_path)
– Lädt die Punktwolke -
get_disks()
– Teilt die Punktwolke in Scheiben auf -
fit_superellipses()
– Passt pro Scheibe zwei Superellipsen an (untere und obere Grenze) -
smooth_results()
– Glättet die Übergänge zwischen benachbarten Scheiben -
volumen_strawberry()
– Summiert die Scheibenvolumina zum Gesamtvolumen -
plot_ellipses()
– Visualisiert die Rohdaten und die angepassten Superellipsen
-
TestManager
Das TestManager-Modul bietet ein umfassendes Werkzeug zur Qualitätsanalyse von Erdbeer-Punktwolken.
Es umfasst die folgenden Schritte:
Alle .ply-Dateien aus einem angegebenen Ordner werden geladen und vorverarbeitet. Dabei werden u. a. die Ausrichtung korrigiert (z. B. Vertauschung von y- und z-Koordinaten), die Punktwolken in Hälften, Viertel oder Sektoren aufgeteilt und rotiert, um die Daten zu standardisieren.
Mit Hilfe eines benutzerdefinierten PointCloud-Moduls wird die Punktwolke in horizontale Scheiben unterteilt, an die jeweils Superellipsen angepasst werden. Die einzelnen Scheibenvolumina werden mit einer Frustum-ähnlichen Formel abgeschätzt, und es erfolgt eine Fehleranalyse (z. B. MSE, MAPE) im Vergleich zu bekannten Referenzwerten.
Das Modul enthält Funktionen zur Visualisierung der transformierten und analysierten Punktwolken sowie zur Speicherung von Ergebnissen (z. B. als CSV-Dateien).
Wichtige Attribute und Methoden
-
Attribute:
-
folder
– Pfad zum Ordner mit Daten -
files
undpath
– Dateinamen und vollständige Pfade der .ply-Dateien -
real_volumen
– Referenzwerte zur Validierung
-
-
Methoden:
-
n_disk_test(n_disks, save_folder)
– Berechnet das Volumen für verschiedene Scheibenanzahlen und speichert die Ergebnisse -
volumen_test(save_folder, n)
– Berechnet das Volumen für eine feste Scheibenanzahl -
mse_error(calculated_volumen, real_data)
undmape(calculated_volumen, real_data)
– Berechnen Fehlerkennzahlen -
plot_disk_test(disks, mse, mape)
undplot_volumen_test(calculated_volumen)
– Visualisieren die Ergebnisse
-
Weitere Hinweise
-
Datenqualität:
Die Punktwolke muss ausschließlich die Erdbeere umfassen und in der korrekten Ausrichtung (Längsachse entlang der y-Achse) vorliegen. -
Softwareanforderungen:
Erforderlich sind Python 3.12, Open3D, NumPy, scikit-learn und pandas. -
Anwendungsbereich:
Das System eignet sich zur automatisierten Qualitätskontrolle und Volumenbestimmung im Vertical Farming.