Java Panoramabild aus Einzelbilder - was abgleichen? (Ideen, keine Nachimplementierung)

The1337x

Cadet 2nd Year
Registriert
Nov. 2012
Beiträge
31
Hallo Leute, bin da so ein Newcomer hier im Forum und nutze eigentlich nicht wirklich oft Foren.

Derzeit bin ich an einer Semesterarbeit für unser Infoprojekt,
wir haben 4 einzelbilder (oben rechts, o - links, u - rechts, u - links), die wir zu einem großen Panoramabild zusammenfügen müssen.

Die Bilder sind unter einem Elektronenrastermikroskop aufgenommen, es ist jeweils dieselbe Probe, nur verschoben.

Meine erste Idee war, die Farben zu vergleichen, ob ich da mehrere Punkte im zu vergleichenden Bereich mit identischen Farben finde (was unwahrscheinlich war - da untersch. belichtet).
Diese Idee hat wie erwartet auch nicht funktioniert, jedoch habe ich das Problem das ich dann eig. nicht wirklich weiß was ich da am besten abgleichen soll um die Bilder später aneinander zu legen, habt ihr da Vorschläge?

-es soll keine Nachimplementierung bestehender Verfahren sein, jedoch soll es nicht ausgeschlossen, dass sich Programmteile ähnlich verhalten wie ähnliche, (deshalb möchte ich eigentlich nicht direkt auf google zurückgreifen, da mein Gedankenbild direkt eingeschränkt wäre auf bereits bestehende Implementierungen)

Freue mich über jede Idee und werde versuchen ihr nachzugehen um später ein bestmögliches Ergebnis bezüglich der Rechenzeit zu erreichen.

Ps. am Ende der Projektarbeit kann ich gerne das Projekt hier erstmals veröffentlichen =)
 
Mir würde mal ganz spontan eine Tileset Engine einfallen, mit einer festgelegten Map.
 
Die Bilder sind unter einem Elektronenrastermikroskop aufgenommen
Das ist schonmal ne Super sache und macht das ganze "einfach". Es handelt sich nämlich nicht um 3D-Bilder bzw perspektivische Aufnahmen / Fotos der Welt sondern quasi 2D-Bilder.
Dh du musst "nur" die Translation und Rotation bestimmen und nicht etwa perspektivische Effekte beheben.
Hier geht natürlich darum die Bilder so zu plazzieren, dass die Überlappungsbereiche möglichst gut übereinander passen.
Mathematisch ist das genau die Korrelation.
Anderer Verfahren die Features (wie SIFT, SURF) extrahieren kommen natürlich auch in Frage. Hier braucht man anschließend an die Features-Extraktion aller Bilder noch ein Abstandsmaß das minimiert werden soll. Üblich ist Summe der Quadrate.
 
Ich wuerde die Bilder in 1 Bit S/W konvertieren, mit einem sinnvollen Schwellwert, bei
auch was zu erkennen ist... alle Gleich.
Diese Bilder dann uebereinanderlegen, und die Differenz bilden - je kleiner die Differenz im Ueberlappungsbereich, desto besser der Treffer. Gegeneinander verschieben und die Differenzen anschauen - probieren ist das stichwort, wenn man es einfach haben will.
Damit das schnell geht macht man das mit einer Pyramide, man faengt mit einem stark verkleinerten Bild an, und schiebt die wild gegeneinander.
Wenn man da einen Treffer gefunden hat, verkleinert man weniger stark, und macht dann das Finetuning, das wiederholt man bis zum 1:1 Bild, bis man um einzelne Pixel verschiebt.
Es wird keine exakten Treffer geben solange die Bilder nicht entzerrt sind - das Geraet hat evtl Abbildungsfehler die dazu fuehren das ein Feature in der Mitte anders abgebildet wird als am Rand,
deshalb die Suche nach der geringsten Abweichung. Es koennten auch leichte Drehungen vorliegen, das waere haesslich...
Wenn die Dinger dann angeordnet sind, musst du noch irgendwie ueberblenden.
Es gibt sehr komplexe Tools die das alles machen, align_image_stack aus dem Hugin Packet macht z.b. den ersten Teil, endblend/enfuse den zweiten.
Aber wenn das ein Projekt sein soll sollte das mit weniger Aufwand gehen, und der Ablauf oben sollte zu was brauchbarem fuehren.
 
Vielen Dank schonmal für die vielen Antworten, ich glaube da ist schon alles was ich brauche benötigt!

Jetzt heisst es mal ein gutes Verfahren nehmen bzgl. der Qualität u Rechenzeit

mach mich gleich ans Probieren =)

Vielen Dank!!! :)
 
Was hier noch garnicht angesprochen wurde ist die Frage: Wie ermittelst du die Verdrehung.
Die Verschiebung bekommst du über Korrelation, was übrigens genau das selbe ist was leboh vorschlägt - durch das Binarisieren und Differenz aufsummieren ist es natürlich nur viel einfacher aber wahrscheinlich auch schlechter.

Zum Thema Drehlage und Features würde ich dir das hier empfehlen:
http://de.wikipedia.org/wiki/Moment_(Bildverarbeitung)

Dh du extrahierst zB in angrenzenden Bildern Features, bestimmst welche Teilmenge der Features von Bild 1 mit welcher Teilmenge von Features aus Bild2 übereinstimmst und berechnest dann über Momente den Winkel der Punktmenge.
Hab genau das mal in C++ programmiert, könnte ich dir geben.
 
Wenn die Bilder unterschiedliche Helligkeiten haben, könnte man auch mit einer Ableitung arbeiten, einfach mit Faltungsfilter, einer Matrix der Form
Code:
0  1  0
1 -4  1
0  1  0
über das Bilder drüber gehen. Danach das Bild mit einem der oben beschrieben Verfahren weiterverarbeiten.
 
Wurde gerade beantwortet.

Ps. Zwischenstand: bis jetzt sieht es gut aus, ich habe die Koordinaten aus den Bildern erhalten und werde mich morgen abend ans zusammensetzen machen.

Am Freitag ist abgabe und nach Abgabetermin werden die Sachen (in Absprache mit dem Prof) auch hochgeladen =).

Bis dahin ihr habt gut geholfen, der schwerste Teil ist seit 2 Stunden hinter mir, danke!
 
Zurück
Oben