Erste Schritte Bilder zusammenführen (Eclipse, ImageJ)

Atomaffe

Neues Mitglied
Guten Tag, und schonmal vorweg einen guten Rutsch :)

Ich habe in der Uni (Informatik) folgende Aufgabe aufbekommen an der ich und meine Gruppe uns die Zähne ausbeißen da wir alle schwer zu kämpfen haben.

Aufgabenstellung:
Eine bestimmte Anzahl an Bildern (Mikroskopaufnahmen - 6 o. 7 Bilder) zu einem "Panoramabild" zusammenkopieren. Möglichst ohne Übergänge.
1. - Lösungstrategie entwickeln
2. - Java implementierung
-> kein Interaktion mit dem Nutzer
-> Verarbeitung als Farbbilder
-> Bilder liegen im PNG Format vor
-> Keine Verwendung bereits bekannter Algorithmen!! :noe:


Programme/Libaries/Themen:
Eclipse und ImageJ sind installiert
ij144o.jar und acm.jar als Libaries die wir über das Semester verwendet haben bei Übungen

Themen die wir behandelt haben: Mean und Variance berechnen (gw Bilder), Histogramme erzeugen (gw Bilder), Bilder verschieben, Gaußfilter (gw Bilder), Modellbasierte Hintergrundkorrektur (gw Bilder).

Schritt 1 - Idee:
Ich würde euch jetzt erstmal gerne darstellen wir ich mir das von der Theorie, auf Basis dessen was wir in den Übungen gemacht haben vorstelle.:

a.) Zuerst werden alle Bilder eingelesen. (Gaußfilter anwenden? Bildkorrektur durch Histogrammausgleich, hatten wir in der Hinsicht noch nicht?! Hat auch keiner meiner Komolitonen zur Lösung des Problems benötigt...)
b.) Nun wird von Bild 1, in der rechten Spalte der Mittelwert und die Varianz berechnet und die Koordinaten gespeichert (vllt. auch in 3 Spalten).
c.) Nun wird in Bild 2, von links gesehen für jede Spalte nach und nach Mittelwert und Varianz berechnet und mit den Werten aus Bild 1 verglichen, Koordinaten werden notiert.
d.) Kommt es zu einer Übereinstimmung von Mittelwert und Varianz (vllt. mit z% Abweichung da es sich um "Fotos" handelt) wird Bild 2 um x Pixel nach links verschoben wobei x die Differenz von Übereinstimmung 2 und Übereinstimmung 1 sein müsste.
e.) Die Bilder werden übereinanderkopiert und zu einem neuen Bild 1?!?
f.) Es wird wieder bei Schritt b.) begonnen.

Kritik:
- Ich bin mir unsicher ob die Spalten den gleichen Mittelwert und Varianzwert aufweisen. Reicht vllt. sogar schon einer dieser Werte?
- Sollte man vorher einen Filter drüberlaufen lassen? Wir haben nur den Gaußfilter in den Übungen behandelt und programmiert...


Soweit von mir...hoffe ihr könnt mir vllt. schonmal bei der Theorie helfen und habt vllt. ein paar google Keywords für mich :rtfm: sodass ich vllt. zu einer guten Lösung des Problems komme. Hatte da mal was von Merge gelesen...

to be continued:
Schritt 2 - Pseudocode
Schritt 3 - Quelltext
 

Frogi

Neues Mitglied
Guten Abend:)

bei mir handelt es sich um die nahezu identische Aufgabenstellung wobei es bei uns nur 3 Bilder anfangs sind.
Eine Lösungsstrategie wurde mittels Pseudocode schon erstellt, nur hapert es momentan an der Implementierung.

Lösungstheorie:

1.) Bilder werden eingelesen ( Haben uns überlegt das über die Varianz & Mittelwert oder über die RGB-Werte zu lösen )
2.) Bild 1 wird im Gegensatz zum oben genannten Problem komplett durchgelesen und dann mit der ersten Spalte des linken Bildes verglichen. ( Klar geht das natürlich auch wie oben )
3.) Jetzt werden die beiden Bilder miteinander verglichen und der Identische Teil des rechten Bildes auf das links liegende Bild geschoben.
4.) Ein drittes Bild soll nun hinzugefügt werden ( rechts vom Mittleren )
5.) Mögliche Bilder bis zB der Anzahl 10, werden dann als "Panorama"-Bild gespeichert.

Wir arbeiten in der Uni mit Eclipse und den folgenden Bibliotheken.
In dem Quelltext wird bis jetzt unser Bildordner in ein Array gespeichert und anschließend die Arraylänge ausgelesen um damit das neue Bild erstellt, in welches die anderen 3 Bilder hineingezeichnet werden sollen. ( bis jetzt spuckt er uns nämlich nur ein schwarzes Bild aus )

Java:
import princeton.stdlib.*;
import java.awt.*;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;

public class Panorama {

	private static Picture[] readImages(String directory, final String prefix) {

		// definiere Dateifilter durch sogenannte innere Klasse
		FilenameFilter filter = new FilenameFilter() {
		    public boolean accept(File dir, String name) {
		        return name.startsWith(prefix);
		    }
		};
			
		// bestimme Array mit Bildernamen
	    File filesList = new File(directory);
	    String[] files = filesList.list(filter);
	    
	    // sortiere Bildernamen alphabetisch
	    Arrays.sort(files);
	    
		// lese Bilder ein
		Picture[] images = new Picture[files.length]; 
			
		for (int i = 0; i < files.length; i++) {
			images[i] = new Picture(directory + "/" + files[i]);
		}
			
		return images;
	}
	
	



public static void main(String [] args){
	
Picture[] images = readImages("Ordner mit Bilddateien", "image_");	
	
//	for (int i = 0; i < images.length; i++){
		
		int breite = images[0].width();

		int höhe = images[0].height();
		
		Picture P = new Picture (breite * images.length, höhe);
	
		
		
		
		P.show();
		
		
//	images[i].show();
	}
}


Es wäre sehr nett wenn uns jemand unter die Arme greifen könnte, weil wir momentan total auf dem Schlauch stehen und nicht weiter wissen.
 
Zuletzt bearbeitet:

Frogi

Neues Mitglied
oke ich hab das einlesen der Bilder geschafft und sitze jetzt an der Schleife für den Vergleich. ich melde mich nochmal falls ich Hilfe brauche :)
 

Neue Themen


Oben