Suche Bildverarbeitungs spezialist



  • Wie ist das eigentlich.
    Sagen wir mal das Bild ist rotiert. Muss ich jetzt herausfinden um welchen Winkel es rotiert ist ? Oder muss der Benutzer das eingeben um welchen Winkel es gedreht werden muss ?



  • Die Frage ist, welche Möglichkeiten es für ein Programm gibt, herauszufinden um welchen Winkel das Bild gedreht (oder anderweitig verändert) ist. In Adobe Photoshop CC muss ich meine Fotos noch selbst drehen. Zumindest ist mir dort kein brauchbarer Automatismus bekannt. Mittels Gesichtserkennung könnte ich mir aber eine Drehung vorstellen, wenn man annimmt, dass die Person gerade steht.



  • Die gleiche Frage könnte ich bei Verzerrungen oder gekippten Gegenständen stellen. Dem Algorithmus muss man da bestimmt irgendwelche paramater mitgeben oder. Es heisst zwar immer BV Algorithmen können zaubern, aber so schlau sind sie auch nicht denk ich. Aber wäre schon cool wenn man einfach ein rotiertes Bild einliest und es automatisch dann wieder gerade steht .



  • Erzähle das mal den Leutchen von Adobe. Könnte im fotografischen Workflow (LR, PS) Zeit sparen bei der Bildbearbeitung.



  • Wo finde ich den Algorithmus für den keystone effect . Ich mein jetzt nicht eine fertige Implementierung sondern die mathematische Beschreibung. Finde da komischerweise gar nichts. Und dann auch den für Verkippung .



  • Habe mich in letzter Zeit viel mit OpenCV beschäftigt, und ich meine diese Begriffe im Bereich "Kalibrierung" aufgeschnappt zu haben. Da OpenCV quelloffen ist kannst du deren Bibliotheken nicht nur frei nutzen sondern dir die C-/C++-Algorithmen live ansehen, allerdings ist deren eigene Doku eher knapp.

    https://www.youtube.com/watch?v=ViPN810E0SU

    Bei amazon gibt es englischsprachige Bücher dazu, zwischen 30 und 40 Euro.



  • Bin zwar kein Bildverabeitungs-Spezialist, hab aber hier einige vielversprechende Ergebnisse für dich:
    https://www.google.at/search?q=keystone+correction+algorithm&ie=utf-8&oe=utf-8&gws_rd=cr&ei=XEXaVdraCYWxa8zlqMAC



  • Hilfesuchender17 schrieb:

    Suche Bildverarbeitungs spezialist

    Bei so einer Überschrift denke ich sofort, daß da einer überhaupt nicht studieren sollte.



  • volkard schrieb:

    Hilfesuchender17 schrieb:

    Suche Bildverarbeitungs spezialist

    Bei so einer Überschrift denke ich sofort, daß da einer überhaupt nicht studieren sollte.

    bzw. besser BWL studieren



  • Vorarb: Digitale Bildverarbeitung ist ein komplexes Thema und sicherlich nicht einfach in einem Forumsthread abzuhandeln.

    Wenn Du ein wirklich gutes Buch suchst:
    "Digital Image Processing" Gonzalez, Woods. Da gibt es aeltere Ausgaben anscheined frei als PDF. Aber da die grundlegenden Algorithmen sich nicht geaendert haben sicherlich ein preiswerter Einstieg.

    Zu Deinen konkreten Problemen:
    Trapezkorrektur: Sofern Du ein einfaches Muster (z.B. Quadrat im Original, Trapez im Bild) auf einfarbigem Hintergrund (anderer Farbe 😃 ) hast:
    - Suche die beiden Horizontalen Linien (z.B. mit einem Linienfilter)
    - Bestimme das Verhaeltnis der Laengen
    - Das ist die Verkippung, die Du dann noch auf die Gesamtbildgroesse hochrechnen musst.
    - Dann kannst Du das linear auf dem Bild verteilen und Zeilenweise skalieren.

    ... und nein, ich poste dafuer keinen Code, aber:

    Es gibt jede Menge Bibliotheken wo zumindest die Filter und skalierungsalgorithmen drin sind. Kommerzielle Bibliotheken z.B. Halcon, habe solche Korrekturverfahren schon integriert.



  • Hilfesuchender17 schrieb:

    Wie ist das eigentlich.
    Sagen wir mal das Bild ist rotiert. Muss ich jetzt herausfinden um welchen Winkel es rotiert ist ? Oder muss der Benutzer das eingeben um welchen Winkel es gedreht werden muss ?

    Das wären zwei Funktionen.
    Die eine dreht das Bild um einen bestimmten Winkel. Wo deren Eingabe herkommt ist egal.
    Das kann von einer Nutzereingabe stammen oder von einer anderen Funktion (die z.B. den Winkel bestimmt)



  • Also ich fange jetzt grad mit der Rotation an.
    tet
    Dazu gibt es ja die Rotationsmatrix, die lautet:

    cos(alpha),-sin(alpha) ; sin(alpha),cos(alpha)

    Für Pixel (0,0). Wie würd ich den neuen Wert berechnen. Ich würd Pixel(0,0) und (0,1) und (1,0 ) und (1,1) nehmen und diese matrix mit der Drehmatrix multiplizieren. Hab ich gemacht und es kommt ein Wert größer 255 raus.
    Gruss!


  • Mod

    Hilfesuchender17 schrieb:

    Ich würd Pixel(0,0) und (0,1) und (1,0 ) und (1,1) nehmen und diese matrix mit der Drehmatrix multiplizieren.

    Du hast nicht verstanden, was die Drehmatrix macht. Sie dreht einen Vektor, keine andere Matrix.

    Und im Falle eines Bildes ist das sowieso nicht ganz so einfach, da Pixelkoordinaten ganzzahlig sind, aber die Drehmatrix angewandt auf eine Koordinate im Allgemeinen eine nicht-ganzzahlige Koordinate ergeben wird. Man muss sich also etwas einfallen lassen, wie man mit solche Fällen umgeht.

    Aber natürlich muss man zuerst die Drehmatrix korrekt anwenden. Drehmatrix * Vektor = um den Ursprung rotierter Vektor.



  • Das heisst ich nimm nur Pixel (0/0) und Pixel ( 1/0 ) und multiplizier das mit der Drehmatrix. Ok.



  • Folgende Probleme hab ich jetzt.

    1.Wie bekomme ich die neue Grösse des Arrays raus
    2. Wenn ich das Bild um den Ursprung dreh dann kippen ja Pixel ins negative. Wie bekomm ich den Offset raus.

    Dachte Rotation ist einfach. Falsch gedacht 🙂



  • Also wie man die neue Höhe und Breite rauskriegt, weiss ich jetzt.

    double newHeight = height*Math.Sin(angle) + Math.Sin(((180-90-45)/180)*2*Math.PI)*width;

    Jetzt gehts drum die Pixel richtig zu platzieren. Wahrscheinlich einfach immer die Differenz der Höhe und Breite addieren.



  • Weltkoordinatensystem,
    Kamerakoordinatensystem,
    Bildkoordinatensystem

    Wie bringt man das alles unter einen Hut ? Sagen wir die Koordinate 3/1 im Weltkoordinatensystem , was entspricht das dann in den anderen Koordinatensystemen ?


Anmelden zum Antworten