Beispiel 3


  • Wie ich schon auf der ersten Seite von diesem Thread rausgefunden habe liefert mir diese Zeile ja den Grünanteil bei einem GRBG-Muster: Gruen(1:2:end, 2:2:end) = input(1:2:end, 2:2:end);


    Wenn du ein GRBG Muster hast, dann liefert dir das nicht die Grünwerte, sondern die Rotwerte. Was Gruen(1:2:end, 2:2:end) bedeutet, hast du aber richtig erklärt. Es wird jede ungerade Zeile und davon jede gerade Spalte angeschaut und diese Werte werden dann in input an den entsprechenden Positionen übernommen.

  • ah, verstehe. Also brauch ich dann nochmal nen Aufruf der eigentlich Copy&Paste von dem ersten ist nur halt mit umgedrehten werten (also alle geraden Zeilen, die ungeraden spalten), oder?

    Mit Leib und Seele Programmierer mit Delphi

  • Bin einfach ich nur so blöd oder ist Matlab wirklich schwer zu verstehen? Gibts keine ausführlichere Doku auf Deutsch? Ich häng nämlich gerade voll beim auslesen der einzelnen Farbkanäle aus dem RAW.


    Wie ich schon auf der ersten Seite von diesem Thread rausgefunden habe liefert mir diese Zeile ja den Grünanteil bei einem GRBG-Muster: Gruen(1:2:end, 2:2:end) = input(1:2:end, 2:2:end);
    So weit, so gut. Nur was bedeuten die einzelnen Werte? Heißt das in der Klammer das in jeder Zeile der 1,3,5,7,... Wert genommen wird und in jeder Spalte der 2,4,6,8,...?
    Wenn ja, warum nimmet er dann nicht auch in der 2,3,4,5 Zeile die falschen werte? Oder nimmt er die eh und ich hab das Beispiel auf der ersten Seite falsch verstanden?


    Wenn ich weiter noch lange an dem Beispiel hänge mach ich das einfach mit 2 verschachtelten For-Schleifen und lass ein bisschen die Prozessoren glühen.


    input(1:2:end, 2:2:end); bedeutet, dass du vom input von der 1-sten bis zur letzten Zeile jede 2-te Zeile auswählst(anfangend bei der 1-sten Zeile je eins skipst, und dann die nächste auswählst, und so bis zum end), und von der 2-ten Spalte anfangend bis zur letzten Spalte jede zweite Spalte auswählst.
    Auf diese Weise kannst du auf einmal alle Werte in der Bildmatrix selektieren, die für dich relevant sind.

    Iliyana Kirkova
    EVC TutorIn SS15 | InfoVis/Vis2 TutorIn SS15


  • Die Farbkanäle hab ich nun, vielen Dank. Jetzt steh ich vor dem nächsten Problem. Ich hab schon das halbe internet abgesucht und das skiptum zur Bildverarbeitung durchgelesen, aber nirgendwo einen hinweis gefunden, wie man jetzt den neutralen Weißabgleich berechnet. Und zu folgender Aussage:


    Ein Tipp: Es muss also nach der Operation gelten: Das ausgewählte Pixel für den Weißabgleich ist nach der Transformation weiß (also im double Format [0,1] muss es 1 sein für alle 3 Farbwerte)...


    fällt mir nichts ein. Außerdem weiß ich ja nicht mal was mir da in dem Parameter 'neutral' in der routine 'evc_demosaic' übergeben wird? Ist das einfach nur das was ich aus dem Bild ausgelesen habe, in der ersten Datei? Oder wurde da ein anderer Wert reingemischt? Was sagt mir der neutrale Weißabgleich? In welchen Werten kann der sich bewegen? Was soll mit dem Bild passieren wenn ich den neutralen Weißabgleich anwende?


    Bin für jeden Hinweis dankbar was ich mit dem Parameter anfangen soll.

    Mit Leib und Seele Programmierer mit Delphi

  • So weit ich es verstanden habe, musst du einfach nur einen Weißabgleich mit der Farbe machen, die in asShotNeutral übergeben wird. Weißabgleich bedeutet, dass du eine Farbe auswählst, die weiß (=1) werden soll und dann die Werte des Bildes so skalierst, dass dein gewünschter Wert 1 bzw. 1,1,1 wird.

  • ich hätt noch eine frage zu imfilter. Wenn ich einen Filter erzeuge der so aussieht [0.5, 0, 0.5], geht der filter dann von links nach rechts durch und legt den filter bei jedem wert an? Oder nimmt er dann nur den 1, 4, 7, 10 Wert und verechnet sich dort dann bei 0 den wert aus den danebenliegenden feldern?


    bzw, gibts ne detailiertere anleitung als die help-pages von matlab? die informationen dort sind ja sehr begrenzt.

    Mit Leib und Seele Programmierer mit Delphi

  • Findet sich vielleicht ein/e Tutor/in die/der am Feiertag Zeit hat meinen Code anzusehen und mir den heißen Tipp geben kann warum MatLab immer 10-15 Minuten hängt wenn das Histogramm unten involviert ist?


    Klick ich immer nur auf OK lauft alles (mMn) gut durch. Sobald ich den Schieber verstelle paßt sich das Bild zwar sofort an aber beim Klick auf OK passiert mal ewig nix. Und wenn dann nach 10 Minuten die Auswahl für den Bereich kommt (clipping) is überhaupt vorbei. Kästchen unten wird nicht gelb, bei OK passiert nix und auch Ctrl+C läßt nicht abbrechen - und MatLab gibt keine einzige Fehlermeldung aus..


    Dabei war es schon mal schneller (nur 3-5 Minuten warten), und die Kästchen sind auch gelb geworden - aber nachdem ich alle Tipps die ich da so gefunden hab kontrolliert und ggf. eingebaut hab (damit es schneller wird) war's ganz vorbei..



    edit: Tipps von Nicht-Tutoren sind natürlich genauso willkommen ;)


  • Hi, du kannst mir deinen Code als PM schicken.


    EDIT: Bei mir hängt sich das Programm noch bei der Gammakorrektur auf, es liegt an deiner Implementierung in evc_histshow.m. Der Vektor auf den das Inputbild gemappt werden soll, soll von 0 bis die maximale Intensität im Bild gehen, also den maximalen Wert über die drei Kanäle. Als Ausgabe der Funktion solltest du auch die Höhe der größten Balken im Histogramm zurückgeben, und nicht der maximale Wert im input. Wenn du das korrigiert, sollte alles wieder gut laufen. :)


    lg

    Iliyana Kirkova
    EVC TutorIn SS15 | InfoVis/Vis2 TutorIn SS15


    Edited once, last by Iliyana ().

  • ich komm irgendwie nicht mit der Angabe in evc_histshow klar: "Das Histogramm soll R, G und B zusammen akkumulieren, d.h. als ob das Bild ein Vektor und keine Matrix wäre." Wie soll das funktionieren? Meine erste Idee war, das ich von jedem Bildpunkt den R, G und B wert addiere. Großartig, jetzt hab ich aber noch immer eine n x m-Matrix, aber ein vektor soll ja die Form 1 x m bzw m x 1 haben (je nach dem ob zeilen oder spaltenvektor). Wie bekomm ich jetzt aus der n x m-Matrix meinen Vektor? Ist mein ansatz mit dem zusammenzählen der Farbkanäle richtig, oder bin ich da schon auf den holzweg abgekommen? Ist es in weiterer Folge egal ob ich einen Zeilenvektor oder einen spaltenvektor erzeuge?

    Mit Leib und Seele Programmierer mit Delphi

  • Ein gamma von null bedeutet nicht bild^0, sondern bild ^(0^-1)!
    Es soll so aussehen, wie es aussieht wenn gamma sich null nähert.


    Ich verstehe irgendwie nicht ganz was wir hier machen sollen, da Matlab scheinbar ein div. by zero sowieso nicht zu stören scheint.


    Anders gesagt, es macht keinen Unterschied ob ich's abfange und "speziell behandle" oder nicht, bei einem Gamma-Wert von 0 ist das Bild so oder so immer stockdunkel (zumindest bei saturate == false, weiter bin ich noch nicht), so wie ich's auch erwarten würde...


    Oder liegt es vll. daran dass ich mir gamma^(-1) in einem eigenen Zwischenschritt "vorbereite" und Matlab dabei ein internes try-catch o.ä. anwendet?


    EDIT: hab's jetzt auch bei saturate == true probiert, da crasht das framework wenn ich die div_by_0 nicht abfange, hat also doch Sinn :)

    Computer games do not affect kids. If Pac-Man had affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.


    Never argue with idiots. They drag you down to their level and beat you up with their experience.

    Edited once, last by netwolf ().

  • ich komm irgendwie nicht mit der Angabe in evc_histshow klar: "Das Histogramm soll R, G und B zusammen akkumulieren, d.h. als ob das Bild ein Vektor und keine Matrix wäre." Wie soll das funktionieren? Meine erste Idee war, das ich von jedem Bildpunkt den R, G und B wert addiere. Großartig, jetzt hab ich aber noch immer eine n x m-Matrix, aber ein vektor soll ja die Form 1 x m bzw m x 1 haben (je nach dem ob zeilen oder spaltenvektor). Wie bekomm ich jetzt aus der n x m-Matrix meinen Vektor? Ist mein ansatz mit dem zusammenzählen der Farbkanäle richtig, oder bin ich da schon auf den holzweg abgekommen? Ist es in weiterer Folge egal ob ich einen Zeilenvektor oder einen spaltenvektor erzeuge?


    Du willst ja im Histogramm die Häufigkeiten der einzelnen Intensitäten darstellen, du kannst dazu einen Vektor 2xn erstellen (n ist die Anzahl der vorkommenden Intensitäten im Bild) und speicherst dann in (:,1) die Intensitätswerte und in (:,2) die Häufigkeit. Da die eine Zeile/Spalte dann ja die Intensitäten sind, musst du diesen nicht mitspeichern. Das einzige, was du im Histogramm darstellen möchtest ja die Häufigkeiten der Intensitäten sind.
    Ich versuch es mal so: Du willst n sortierte Werte speichern, dann reicht dir ein Vektor 1xn, weil du ja weißt, dass du an Stelle 1 den kleinsten/größten Wert stehen hast, da musst du nicht noch in einer zweiten Dimension (Zeile/Spalte) die Werte 1,2,3...,n mitspeichern...

    Ines Janusch
    -------------------------
    EVC Tutorin 2014


  • Meiner Meinung nach liegt es daran, dass es ohne saturate == true funktioniert: Matlab rechnet für Integer/0 = undendlich. Wenn du deine Intensitäten dann im Bereich [0,1] hast, hast du in diesem Fall einfach zb.: 0,1^undendlich = 0 daher wird das ganze Bild schwarz...

    Ines Janusch
    -------------------------
    EVC Tutorin 2014

  • Könnte sich einer der Tutoren mein demosaicing-code mal anschauen? Habe soweit eigtl alles von Aufgabe 3 implementiert nur hab ich das Problem dass ich, egal wie ichs drehe und wende, nach dem demosaicing immer einen Grün-Stich im Bild habe der definitiv nicht korrekt sein kann.


    Habe schon alle möglichen Bayer-Patterns durchprobiert, und mMn auch das richtige gefunden an dem scheint es nicht direkt zu scheitern. Ein halbwegs akzeptables Bild bekomm ich allerdings wenn ich für den (neutralen) Weißabgleich im demosaic.m nicht die Werte nehme die man übergeben bekommt sondern die Werte der einzelnen Farbkanäle mit dem Kehrwert der höchsten Intensität des Farbkanals multipliziere...bin mir jetzt allerdings schon ziemlich unsicher ob wie gesagt die Wahl meines Bayer Patterns und die Wahl meines (neutralen) Weißabgleichs so wie es im Moment bei mir implementiert ist korrekt ist?!


    Edit: bzw wenn jmd schon aus den paar Infos meinen Fehler erkennt wäre mir das auch recht :P

  • Könnte sich einer der Tutoren mein demosaicing-code mal anschauen? Habe soweit eigtl alles von Aufgabe 3 implementiert nur hab ich das Problem dass ich, egal wie ichs drehe und wende, nach dem demosaicing immer einen Grün-Stich im Bild habe der definitiv nicht korrekt sein kann.


    Habe schon alle möglichen Bayer-Patterns durchprobiert, und mMn auch das richtige gefunden an dem scheint es nicht direkt zu scheitern. Ein halbwegs akzeptables Bild bekomm ich allerdings wenn ich für den (neutralen) Weißabgleich im demosaic.m nicht die Werte nehme die man übergeben bekommt sondern die Werte der einzelnen Farbkanäle mit dem Kehrwert der höchsten Intensität des Farbkanals multipliziere...bin mir jetzt allerdings schon ziemlich unsicher ob wie gesagt die Wahl meines Bayer Patterns und die Wahl meines (neutralen) Weißabgleichs so wie es im Moment bei mir implementiert ist korrekt ist?!


    Edit: bzw wenn jmd schon aus den paar Infos meinen Fehler erkennt wäre mir das auch recht :P


    schick mir mal deine Files

    Ines Janusch
    -------------------------
    EVC Tutorin 2014

  • Es tut mir leid, wenn ich mich hier selbst zitiere, aber da anderen geholfen wird, schätze ich mal, dass mein Post einfach untergegangen ist. (Post #218)


  • Könnte sich einer der Tutoren mein demosaicing-code mal anschauen? Habe soweit eigtl alles von Aufgabe 3 implementiert nur hab ich das Problem dass ich, egal wie ichs drehe und wende, nach dem demosaicing immer einen Grün-Stich im Bild habe der definitiv nicht korrekt sein kann.


    Habe schon alle möglichen Bayer-Patterns durchprobiert, und mMn auch das richtige gefunden an dem scheint es nicht direkt zu scheitern. Ein halbwegs akzeptables Bild bekomm ich allerdings wenn ich für den (neutralen) Weißabgleich im demosaic.m nicht die Werte nehme die man übergeben bekommt sondern die Werte der einzelnen Farbkanäle mit dem Kehrwert der höchsten Intensität des Farbkanals multipliziere...bin mir jetzt allerdings schon ziemlich unsicher ob wie gesagt die Wahl meines Bayer Patterns und die Wahl meines (neutralen) Weißabgleichs so wie es im Moment bei mir implementiert ist korrekt ist?!


    Edit: bzw wenn jmd schon aus den paar Infos meinen Fehler erkennt wäre mir das auch recht :P


    Der Grün-Stich nach dem Demosaicing liegt meistens daran, dass keinen neutralen Weißabgleich vor der Interpolation der Werte vorgenommen wird. Soweit ich verstanden habe, hast du das aber schon gemacht, vielleicht hast du da einen Fehler.

    Iliyana Kirkova
    EVC TutorIn SS15 | InfoVis/Vis2 TutorIn SS15