Radon-Transformation für Java

Sie können die Theorie dieser Transformation lesen bei diesem Wikipedia-Link.

Warenbezeichnung

Ich hörte den Namen dieser Transformation beim Lesen des Artikels, den ich von IEEE gekauft habe, um ein Schachbrettgitter für die Programmierung einer Funktion in der ChessPdfBrowser Anwendung zu erhalten.

IEEE-Artikel ........................................................................................................


Dies ist eine Bibliothek mit meiner Implementierung dieser Transformation für Java.


Der Bibliothekscode wird auch auf GitHub geteilt. Link zu GitHub ........................................................................................................

Code-Beschreibung

Da die Verarbeitung zeitaufwendig ist, stellt die Bibliothek einen Executor zur Verfügung, der eine Zukunft zurückgibt, um zu vermeiden, dass die Ausführung des Anrufers während der Verarbeitung blockiert wird.

Parallele Berechnungen werden für die Verwendung mehrerer Threads leicht unterstützt.


Die RadonTransformCalculator-Klasse berechnet die Transformationswerte und speichert sie in einem zweidimensionalen Array.


Nach der Verarbeitung können die Transformationswerte mit Hilfe der Array-Indizes analysiert werden, um auf sie zuzugreifen.

Diese Indizes können leicht in ein (Rho, Theta) (ρ, θ) Element übersetzt werden, indem die Funktion auf dem Ergebnisobjekt aufgerufen wird, das vom Typ RadonTransformResult ist.


Es ist auch möglich, die maximalen N-Werte zu erhalten, was die Möglichkeit gibt, Duplikate (unterschiedlich (ρ, θ), die sehr nahe sind) durch eine Toleranz zu verwerfen, und ein Filter kann gleichzeitig auf (ρ, θ) angewendet werden, um zuvor solche zu verwerfen, die unsere Bedingungen nicht erfüllen.

Wenn Sie zum Beispiel fast horizontale oder vertikale Linien suchen und es eine Diagonale mit einem sehr hohen Wert gibt, könnte dieser Wert verworfen werden.

Fenster

Radon-Transformation für Java (2026)

Herunterladen

Beispiele

image
image

Ein Beispiel ist in der Zip-Datei enthalten, die den Bibliothekscode enthält, den wir unten erklären werden.

Dieses Beispiel zielt darauf ab, die Seiten des Quadrats zu erhalten, die das Schachbrett im Zielbild definieren.

Das Eingabebild für die Radon-Transformationsberechnung ist eine Kantenerkennung (Canny-Typ) des Zielbildes.


Die Umwandlung wird für dieses Bild vom Typ Canny berechnet, und dann werden die vier Hauptlinien erhalten.

Dies wird erreicht, indem man die Funktion aufruft, um die höchsten Werte der Transformation zu erhalten und sie vier als Anzahl der zu suchenden Elemente weitergibt.

Zusätzlich wird eine entsprechende Toleranz von (ρ, θ) auch an Duplikate übergeben, und ein Filter, um θ Werte zu verwerfen, die nicht annähernd horizontal oder vertikal sind.


Im Beispiel werden diese vier Linien, die die Seiten des Schachbretts definieren, mit diesen Werkzeugen erfolgreich erreicht.

Mit der Bibliothek können die Schnittpunkte dieser Linien berechnet werden und so die Eckpunkte erhalten.

Ein Vertex-Sorter wird auch aufgerufen, so dass, wenn die Linien sequentiell gezeichnet werden, der "Bowtie-Effekt" nicht auftritt.


Diese Vertex-Ordnung erfolgt durch Iterieren durch die Permutationen der Vertex-Ordnung, bis die erste gefunden wird, die das Eignungskriterium erfüllt.

Das gewählte Kriterium ist, dass die Eckpunkte in dieser Reihenfolge ein konvexes Polygon definieren (wie das Quadrat, das wir erkennen wollen).

Um dies zu tun, ist es notwendig zu überprüfen, dass die Drehung der Eckpunkte immer in der gleichen Richtung ist (im Uhrzeigersinn oder gegen den Uhrzeigersinn).

Um die Drehrichtung von drei aufeinander folgenden Eckpunkten zu erhalten, berechnen Sie einfach das Zeichen des Kreuzprodukts der beiden Vektoren, die durch diese drei Eckpunkte definiert sind.

Daher ist die notwendige und ausreichende Bedingung für Eckpunkte, um ein konvexes Polygon zu definieren, dass alle bestellten Teilmengen von drei aufeinander folgenden Eckpunkten (unter der Annahme der kreisförmigen Liste) das gleiche Zeichen in dem auf diese Weise berechneten Querprodukt haben.


Nach diesen Berechnungen zeichnen wir die Kanten, die die Eckpunkte verbinden, und wir erhalten das endgültige Bild.

Mission erfüllt!


image
image

Downloads