Linienpaare in einem Bild differenzieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
physc
User
Beiträge: 3
Registriert: Mittwoch 30. März 2022, 14:39

Hallo zusammen.
Ich möchte in einer Röntgenaufnahme Linienpaare identifizieren und differenzieren.
Bei Inbetriebnahme des Gerätes wird eine Aufnahme eines Prüfkörpers gemacht, es wird "per Auge" bestimmt bis zu welcher Auflösung Linienpaare sicher zu unterscheiden sind (siehe Anhang, https://ibb.co/GWBTCff).
In festgelegten Abständen wird die Aufnahme wiederholt. Es muss geprüft werden, ob sich die Auflösung des Bildes verschlechtert hat.
Das soll jetzt automatisiert/objektiviert werden.

Hat jemand eine Idee, wie ich diese Aufgabe in Python umsetzen kann?
Ich kann das Bild als medizinischen DICOM-Datensatz oder einfach als png einlesen. Ich arbeite also letztlich auf einer Matrix mit Intensitätswerten.

Die Fragestellung ist also in einfachen Worten:
Sind bei Linienabstand xy zwischen den hellen Linien noch die dunklen Linien zu erkennen?

Wer hat eine Idee zur Umsetzung? (Ich suche nur einen Denkanstoß bzw. ein paar Zeilen Pseudocode zum Erklären einer Idee. Ich finde einfach keinen wirklich überzeugenden Ansatz).
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit den klassischen Techniken der CV wuerde ich es probieren mit adaptive thresholding, morphologischen operationen, contour-extraction, ggf hough-lines, affine transformation/homographie um die Bildrotation anhand der relativ gut erkennbaren Seitenstreifen zu bestimmen. Wobei es von Vorteil waere, wenn du auf diesen Marker Einfluss nehmen kannst, da ein eher klassisches Fiducal drauf zu platzieren. Dann bekommst du das quasi geschenkt.

Alle diese Algorithmen sind Teil der OpenCV.
physc
User
Beiträge: 3
Registriert: Mittwoch 30. März 2022, 14:39

Hallo deets, Danke soweit.
Ja, die Idee der generellen Bildverbesserung (Kontrast, Helligkeit etc) bevor etwas anderes passiert hatte ich auch.
Die Linien über Hough finden klingt ganz gut.
Wie würdest du dann "zählen"?
Die gefundenen Hough-Linien in einer neuen, leeren Matrix isoliert betrachten, einen Zeilenausschnitt über die Linienpaare nehmen und Maxima zählen?

Verzeih' meine Naivität, ich hatte bisher mit Bildverarbeitung nicht so viel zu tun.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hough-Lines zB sind Koordinaten, da gibt es keine Matrix. Du kannst natuerlich wieder Linien malen basierend darauf, aber der Sinn erschliesst sich mir nicht. Denn was fuer ein Kriterium auch immer du dann wieder anwenden willst, um zu sagen, dass diese beiden Linien gut sind, kannst du ja schon basierend auf der Ursprungsdaten machen, bzw. auf den extrahierten Koordinaten. Wenn du zwei Linnien hast, die in der Laenge etwa gleich sind, und parallel, dann sind die zB ein positives Signal. Ist aber das Ausgangsmaterial zu verschwommen, dann gibt es vielleicht(!) nur eine Linie. Sowas halt.

Es sind auch einfach zu wenig Beispiele, um da mehr Ideen zu generieren. Du brauchst einen moeglichst grossen Katalog von klassifizierten(!) Beispielen, die du deiner Pipeline zum Frass vorwirfst. Und auf denen muss die dann vernuenftige Ergebnisse abliefern. Nur durch so einen Rahmen kannst du dann an den einzelnen Schritten schrauben, und neue Ideen ausprobieren.

Bildverarbeitung ist nicht trivial. Ich habe mir damals fuer ein Projekt bei dem ich das benoetigt habe Zugang zu pyimagesearch fuer saftige $750 gekauft, damit ich dort Adrians Kurse machen kann. Und dadurch ein paar Grundlagen und Ideenskizzen erworben, wie ich so ein Problem angehen kann. Du kannst natuerlich auch mit freien Materialien wie der OpenCV Tutorials probieren, aber die sind meistens zu sehr abgezielt auf die konkrete Funktion, und haben zu wenig Einordnung, wozu das denn eigentlich gut ist.
Antworten