Vergleicht das Bild, wie viel Grad geneigt ist

9

Ich habe ein Problem, wie unten zu sehen ist das obere Bild ist das Originalbild, das auf der Unterseite ist nach links 90 Grad titelted. Gibt es eine Möglichkeit, die Winkeländerung zu berechnen? Ich habe Houghs Transformation versucht, ich kann den Ort erkennen, aber ich kann den Engel, der sich verändert hat, nicht erkennen. Gibt es eine Alternative, um den Grad zu erkennen?

    
user288231 11.02.2011, 14:09
quelle

2 Antworten

5

Ich habe dies getan, bevor ich einen symmetrischen phasengleichen Filter verwendet habe. Es war eigentlich für die Erkennung von Fingerabdrücken, erlaubt Rotation und Skalierung. Leider ist es ziemlich kompliziert. Sie müssen sich damit auskennen, wie Sie eine FFT berechnen und mit ähnlichen mathematischen Methoden arbeiten können. Ich habe es nicht in C # gemacht, sondern in MATLAB (und im synthetisierbaren Verilog, aber das ist eine ganz andere Geschichte). Ich würde empfehlen, zuerst MATLAB oder ein ähnliches Mathe-Paket zu verwenden, um sicherzugehen, dass Sie den richtigen Algorithmus haben.

Hoffentlich hat jemand diesen Algorithmus bereits in einer .NET-Bildverarbeitungsbibliothek implementiert.

Das Papier, das ich verwendete, war das folgende. Es ist mehr mathematisch als algorithmisch, so dass es einige Arbeit in Anspruch nehmen wird, es in Code umzuwandeln:

  

Qin-Sheng Chen; Defrise, M .; Deconinck, F.    "Nur symmetrische Phase   abgestimmte Filterung von Fourier-Mellin   transformiert für Bildregistrierung und   Anerkennung, "   Musteranalyse und   Maschinelle Intelligenz, IEEE   Transaktionen auf, Bd.16, Nr.12,   pp.1156-1168, Dezember 1994

     

Zusammenfassung : Präsentiert eine neue Methode für   ein 2D-Bild mit einem übersetzten   gedrehtes und skaliertes Referenzbild   Der Ansatz besteht aus zwei Schritten:   die Berechnung eines Fourier-Mellins   Invarianter (FMI) Deskriptor für jeden   Bild zugeordnet werden, und die Übereinstimmung   der FMI-Deskriptoren. Das FMI   Der Deskriptor ist eine translationsinvariante,   und stellt Rotation und Skalierung als dar   Übersetzungen im Parameterraum. Das   Übereinstimmung der FMI-Deskriptoren ist   erreicht mit symmetrischen Phase-only   angepasste Filterung (SPOMF). Das   Leistung des FMI-SPOMF-Algorithmus   ist das gleiche oder ähnlich dem von   nur phasenangepasstes Filtern   Umgang mit Bildübersetzungen. Das   wesentlicher Vorteil des neuen   Technik ist ihre Fähigkeit zu entsprechen   gedreht und skaliert Bilder genau   und effizient. Die Innovation ist das   Anwendung von SPOMF auf das FMI   Deskriptoren, die garantiert hoch   diskriminierende Kraft und ausgezeichnet   Robustheit in Gegenwart von Lärm.   Dieser Artikel beschreibt das Prinzip von   die neue Methode und ihre diskrete   Implementierung für jedes Bild   Erkennungsprobleme oder Bild   Registrierungsprobleme. Praktisch   Ergebnisse werden für verschiedene vorgestellt   Anwendungen in der medizinischen Bildgebung,   Fernerkundung, Fingerabdruck   Erkennung und Multiobjekt   Identifikation

    
Justin 11.02.2011, 14:28
quelle
0

Sie können auch das zweite Bild in einer Schleife um einen konstanten Winkel drehen und RMSE zwischen zwei Bildern in jeder Iteration berechnen. Der passende Winkel wird dort sein, wo RMSE minimal ist.

Hier ist Powershell Skript, das diese Idee mit ImageMagick :

%Vor%

Ich hoffe, das hilft.
p.s. Laut Wiki kann RMSE zwischen zwei Vektoren auf zwei verschiedene Arten berechnet werden. Ich weiß nicht, welches in ImageMagick als

implementiert ist
# convert images to equal sizes for pixel by pixel comparision
convert.exe p1.png -resize 73x73! p1.png
convert.exe p2.png -resize 73x73! p2.png

# initialize variables
$min_rmse = 1.0
$degrees_rotated = -1.0

# rotate second image by 10 degrees in each iteration
# and after that measure RMSE between first image and second rotated image
for ($i=0; $i -le 350; $i+=10) {
    convert.exe p2.png -rotate $i tmp.png
    convert.exe tmp.png -resize 73x73! tmp.png
    $rmse = compare.exe -metric rmse p1.png tmp.png diff.png 2>&1
    $rmse = ([string] $rmse).split(" ")[1]
    $rmse = $rmse.replace("(","")
    $rmse = [double] $rmse.replace(")","")

    # find rotation angle where RMSE is minimal
    if ($rmse -lt $min_rmse) {
        $min_rmse = $rmse
        $degrees_rotated = $i
    }
}

Write-Host "two images are most similar when second image is rotated by $degrees_rotated deg (rmse is $min_rmse)"
Write-Host "Press any key to exit ..." 
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
-Befehl, aber sicher kann dies durch Fragen von IM-Entwicklern oder durch Trial-and-Error-Methode festgestellt werden.     
Agnius Vasiliauskas 11.02.2011 21:07
quelle

Tags und Links