Bilder zusammen rechnen



  • Hallo,
    wir haben heute im Studium unsere erste größere Programmieraufgabe als Gruppe bekommen.
    Wir müssen dabei als 3er Gruppe Bilder zusammen rechnen, so dass zum Beispiel bei 10 Bildern vom Eiffelturm (mit Menschen, Vögeln usw.) möglichst nur der Eiffelturm und andere ruhende Objekte zu sehen sind und alles andere vom Programm entfernt wird.
    Einzige Vorgabe die der Professor zu den Bildverarbeitung Aufgaben gemacht hat ist, dass keine Deep Learning Bibliotheken genutzt werden sollen die die Aufgaben quasi für uns übernehmen. Außerdem ist ein zeitlicher Rahmen von 10 Wochen gesetzt und als Maßstab der Programmlänge hat er etwa 5000 -10000 Zeilen Code gegeben.

    Da Informatik nicht unser Hauptstudienfach ist haben wir noch nicht allzu viele Erfahrungen gesammelt und ich würde mich freuen, wenn hier ein paar hilfreiche Tipps zum Ansatz kommen, wo wir uns mal einlesen sollten.
    Speziell gilt das für die Verarbeitung von Bildern und das erstellen einer möglichst hübschen Benutzeroberfläche, da wir in beidem noch keinerlei Erfahrungen haben.

    Wir programmieren übrigens in der Umgebung Qt.

    Ich bin dankbar für ein paar erste Ansätze und würde dann im Laufe des Projektes immer mal mit vertiefenden Fragen kommen.

    LG.
    Leon



  • Trivial würde ich erstmal einen Mittelwert der Bilder berechnen und dann speichern/anzeigen.

    Eine QT-Demo zum Anzeigen von Bildern wird sich finden lassen.
    Die kann man dann erweitern.



  • Trivial würde ich erstmal einen Mittelwert der Bilder berechnen und dann speichern/anzeigen.

    Das wäre als Schritt 1 mal sicher gut. Ist "einfach" zu machen und dann ist mal der ganze Boilerplate Teil erledigt, also das ganze Bilder aufmachen, auslesen und neues Bild schreiben.

    Danach...
    Also erstmal muss man vermutlich leichte Unterschiede zwischen den Bildern korrigieren. Leichte Verschiebungen/Drehungen und evtl. Grössen/Perspektivenunterschiede.

    Um zu prüfen wie gut zwei Bilder bzw. Bildteile zusammenpassen kann man 2-D cross-correlation verwenden. Wenn man das Bild in mehrere kleine Quadrate aufteilt, und dann für jedes kleine Quadrat die Verschiebung ermittelt die nötig ist damit es optimal korreliert (z.B. einfach verschiedene Möglichkeiten durchprobieren), bekommt man eine Matrix aus Verschiebungen. Aus der kann man dann eine globale Verschiebung raus mitteln. Und dann im nächsten Schritt Drehung/Zerrung.

    Damit kann man die Bilder dann schonmal gut übereinanderlegen.

    Bzw. falls die Bilder sowieso schon perfekt passen kann man sich den Schritt natürlich sparen.

    Und dann halt anfangen zu experimentieren wie man die "ungleichen" Teile rausfiltert. Ein Anfang wäre da z.B. dass man für jeden Pixel die Farbwerte aus allen Bildern nimmt, und dann die Häflte davon rausschmeisst. Und zwar so dass möglichst ähnliche Farben übrigbleiben. Wobei mit "Farben" gerade nicht der Farbton gemeint ist, vermutlich sollte man hier den Fokus auf die Helligkeit legen, oder evtl. sogar nur die Helligkeit betrachten.
    Aus den verbleibenden Farben berechnet man dann den Mittelwert (Median könnte man auch probieren), und erzeugt daraus ein Bild.

    Wenn dann noch Zeit übrig ist kann man sich anhand der Ergebnisse ansehen wo noch Schwächen sind und ob man eine Idee hat wie man das ganze verbessen könnte.



  • @hustbaer sagte in Bilder zusammen rechnen:

    Bzw. falls die Bilder sowieso schon perfekt passen kann man sich den Schritt natürlich sparen.

    Eine Serie von Bildern einer statischen Webcam würde da erstmal gehen.

    berechnet man dann den Mittelwert (Median könnte man auch probieren),

    Kann man ja alles in die Oberfläche (GUI) einbauen.



  • Erstmal vielen Dank für die ausführliche Hilfe!

    Wir hatten gedacht, dass wir erstmal nur Bilderserien vom Stativ nehmen um so die vorausgehenden Korrekturen erstmal zu sparen und nur bei ausreichend Restzeit das evt ergänzen.

    Zur Methodik WIE wir die Bilder verarbeiten wollen haben wir uns auch schon Gedanken gemacht. Mein Problem liegt gerade vor allem in der Umsetzung. Ich weiß nicht was ich mir am besten anschauen soll um herauszufinden wie man das ganze im Programm auch wirklich umsetzt.
    Gleiches gilt für die Benutzeroberfläche.

    Für uns ist das ein recht großer Sprung von recht trivialen Konsolenprogrammen im letzten Semester auf jetzt ein nicht triviales Programm mit grafischer Oberfläche.

    Ich bräuchte im Prinzip erstmal ein paar Themen/ Stichwörter zu denen ich mich schonmal schlau machen könnte.



  • @leon676 sagte in Bilder zusammen rechnen:

    Wir hatten gedacht, dass wir erstmal nur Bilderserien vom Stativ nehmen um so die vorausgehenden Korrekturen erstmal zu sparen und nur bei ausreichend Restzeit das evt ergänzen.

    Wie schon gesagt, bieten sich da auch Webcams/Wettercams an.
    Da kommt ihr an reichlich Motive ran, ohne selber raus zu müssen.
    Marktplätze, Häfen, Strandpromenaden, ....

    Zur Methodik WIE wir die Bilder verarbeiten wollen haben wir uns auch schon Gedanken gemacht. Mein Problem liegt gerade vor allem in der Umsetzung. Ich weiß nicht was ich mir am besten anschauen soll um herauszufinden wie man das ganze im Programm auch wirklich umsetzt.
    Gleiches gilt für die Benutzeroberfläche.

    Trennt das auf. Ihr seid ja zu dritt.

    Für uns ist das ein recht großer Sprung von recht trivialen Konsolenprogrammen im letzten Semester auf jetzt ein nicht triviales Programm mit grafischer Oberfläche.

    Dafür ist ja Qt da.

    Ich bräuchte im Prinzip erstmal ein paar Themen/ Stichwörter zu denen ich mich schonmal schlau machen könnte.

    • QT Image Viewer (Demo). Da habt ihr die Bildbehandlung und eine GUI.
    • das QT Datenobjekt für Bilder zum bearabeiten (auslesen) der Bilddaten.

    Wenn ihr eine (andere) Library zum lesen/schreiben der Bilddaten habt, könnt ihr auch erstmal ein Konsolenprogramm damit schreiben.



  • @leon676 sagte in Bilder zusammen rechnen:

    Zur Methodik WIE wir die Bilder verarbeiten wollen haben wir uns auch schon Gedanken gemacht. Mein Problem liegt gerade vor allem in der Umsetzung. Ich weiß nicht was ich mir am besten anschauen soll um herauszufinden wie man das ganze im Programm auch wirklich umsetzt.

    Dann schau als erstes mal dass du ein Qt Beispiel compiliert bekommst, z.B. den von @DirkB erwähnten Image Viewer. Wie man ne Qt Entwicklungsumbegung aufsetzt lässt sich ja ergoogeln, das ist hundertfach im Netz erklärt.

    Dann googeln wie man in Qt ein Bild lädt und Pixel ausliest. Dann den Image Viewer modifizieren dass ihr einfach mal die Pixeldaten lesen und ändern könnt - testweise einfach mal das Bild invertieren oder so.

    Wenn ihr das habt, das Programm so anpassen dass es mehr als 1 Bild lädt und die irgendwie trivial zusammenblendet - wie @DirkB auch schon anfangs vorgeschlagen hat.

    Einfach Schritt für Schritt rantasten.


Log in to reply