Horia-Methode als Echtzeitvideo

  • Hallo,


    > BTW: 2x46,631mm ja ja ja, bitte glaube mir, ja ja ja...


    Welche Auflösung hat denn deine Berechnung? Ganze Pixel, oder Sub-Pixel Genauigkeit?
    Wenn's nur ganze Pixel sind, dann ist's logisch dass nach der Umrechnung in mm zweimal das gleiche rauskommt. Das bedeutet dann aber nicht, dass du zweimal auf 1/1000 mm das gleiche Ergebnis ermittelt hast.


    Gruss
    Michael

  • Hallo Michael,
    bitte sei doch kein Spielverderber [;)]. Ist doch klar, das ohne Sub-Pixel- Berechnung nicht eine solch hohe Auflösung erreicht werden kann, das man die Auswirkungen der Helligkeitsänderung messen kann. Es ging doch vielmehr darum, die drastischen Zonenradien-Änderungen in den Griff zu bekommen. Das die Quantisierung hier den Messwert 'fest hält' ist doch klar. Es zeigt aber auch, wie gut die Methode von Horia funktioniert und das es sich lohnt daran weiter zu arbeiten.
    'Nix für ungut' Sub-Pixel Interpolation kommt dann noch später.[:D]


    aloa

  • Hi Robert,
    Du hast völlig Recht. Die Methode mit den gespiegelten Histogrammen funktioniert. Jetzt habe ich es auch begriffen [:D].
    Ich denke auch, das sich das gut automatisieren lässt. Der eigentliche Knackpunkt ist wohl nur die mittlere Helligkeit um den Umkehrpunkt zu finden. Ich programmiere das sodann jetzt mal und schaue was heraus kommt.

  • Hallo,


    > Das die Quantisierung hier den Messwert 'fest hält' ist doch klar.


    Na dann glaube ich dir dass zweimal das gleiche rausgekommen ist. Es war wohl etwas missverständlich dargestellt. Normalerweise gibt man Nachkommastellen nur an, wenn sie auch signifikant sind.


    Viel Erfolg beim weiteren Programmieren!


    Gruss
    Michael

  • hi peter,


    du scheinst zwar eh schon verstanden zu haben wie die methode funktionieren soll aber nochnal genauer:


    festzustellen wo die vertikale grenze zwischen den bildzonen sich befindet und diese für die äusseren und inneren zur flucht zu bringen scheint mir eher schwerer möglich zu sein.


    leichter scheint mir möglich zu sein dafür zu sorgen das die hellen zonen des linken bildes genau so gross werden wie die dunklen des rechten (und umgekehrt). genau dann hat man auch die von mir ideal gezeichnete situation.


    für die auswertung der histogramme gehts einfacher wie folgt:
    spiegel die dinger nicht, häng sie einfach aneinander zu einer gesamt histogramm kurve mit 4 maxima (buckeln) dann fittest du eine gerade durch das gesamthistogramm das vorzeichen der steigung der geraden sollte die information über zu viel/ zu wenig eingeschwenkt enthalten. (du kannst auch versuchen höhere ungerade polynome zu fitten (x, x^3, x^5, ... ) deren koeffizienten sollen natürlich auch möglichst null werden)


    l.g. robert

  • Hallo Robert,
    hier der erste Ansatz zum Histogram. Das rechte ist die rechte Spiegelhälfte, das linke ....na Du weisst schon.
    Die Teilung ist log10, da man sonst nichts erkennen kann. Wie man schon deutlich sieht, ist der Dynamikbereich in der rechten Hälfte immer grösser als links. Auch die Fase der echten Hälft zwirbelt am Ende noch ein Maximum ans Ende des Spektrums.
    Ich habe jeweils zwei Kanäle zusammen gefasst also 128 pro Seite.


    Hier mal weit eingeschwenkt (Licht aus [:o)])


    ...und hier mal weit rausgefahren (Licht an [:o)])


    Es sind zwar Änderungen sichtbar, aber meines Erachtens schwer zu interpretieren.
    Ehrlich gesagt, naja, ich glaube man sollte einfach mal auf das Bild schauen und danach einstellen [:I]. Schade, ich hatte mir mehr davon versprochen.


    Ich mache jetzt mal an der Sub-Pixel-Auswertung weiter, sonst ist Michael noch traurig und ich darf keine drei Stellen nach dem Komma mehr anzeigen [;)]


    (==>)Michael: Du hast doch bestimmt einen guten Kniff im Ärmel aus Deiner FS2 um Sub-Pixel-Berechnung zu machen oder ? [:p]
    Machst Du das linear oder klopfst Du auch noch die theoretischen Beugungsringe platt ?[:D]

  • hi peter,


    dein "weit eingeschwenkt" bild würde ich auch als weit rein beurteilen.


    dein "weit rausgefahren" würde ich aber eher als nur ein klein wenig zu weit raus beurteilen, betrachte mal die nierenförmigen hell dunkel bohen im inneren bereich des bildes, die erscheinen fast gleich gross.


    wie man sieht ist die richtige scheidenposition objektiv leider nicht so leicht festzunageln. eher eindeutig wird die scheideposition leider nur weit extrafokal oder weit intrafokal dann entstehen als focaultschatten recht kontraststarke halbkreise. wenn man einen stabilen messaufbau hat dann kann man den schlitten mit viel geduld so ausdrehen das bei voll intarfokal und voll extrafokal jeweils der perfekte halbkreis entstehen und das bei exakt der geleichen schneidenposition. wenn man nun die schnittweiten abfährt sollte immer die objektiv korrekte schneidenposition ohne nachstellen gegeben sein.



    zu deinen histogrammen:


    die histogramme von "weit ein" sind ja eindeutig höher im dunklen bereich als im hellen, ein geradenfit durch die aneinandergehängten histos würde eine deutlich negative steigung ergeben.


    bei den "weit raus" histos habe ich auch ein wenig interprätationsprobleme, warum bricht das linke histo nach etwa der mitte völlig ein ? vieleicht wirkt sich das logarithmieren nicht so gut aus ?


    da fällt mir noch was zur mittleren helligkeit ein. für unsere zwecke wäre wohl die gemittelte helligkeit der pixel entlang der vertikalen spiegelmitte (oder der pixel um einen vertikalen streifen um die spiegelmitte)) geeignet. man könnte z.b. zählen wievile pixel der linken hälfte heller/dunkler als diese mittlere helligkeit sind und ebenso für die rechte hälfte. optimale schneidenstellung wäre wohl wenn a. links gleichviel hellere wie rechts dunklere sowie gleichzeitit b. links gleichviele dunklere wie rechts hellere vorhanden sind. a. und b. werden aber wohl nur näherungsweise beide gleichzeitig erfüllbar sein. es könnte also möglicherweise hilfreich sein die Zahl A (anzahl der helleren linken minus anzahl der dünkleren rechten pixel) sowie die Zahl B (anzahl der dünkleren linken minus anzahl der helleren rechten pixel) anzuzeigen und die schneide in einen bereich zu schwenken bei dem beide Zahlen betragsmässig möglicht klein werden. viel zu weit raus werden beide Zahlen betragsmässig gross sein ebenso bei viel zu weit rein. aber es wird auch einen hoffentlich nicht allzu grossen bereich geben wo beide Zahlen halbwegs klein sein werden.


    in deinen auswertungen sieht man immer einen ziemlich mittleren radius.
    diese radien sind glaube ich relativ dankbar bei der auswertung. du solltest mal mit kleinen und grossen zonenradien experimentieren, bei diesen spielt die schneidenstellung vermutlich doch eine gössere rolle.


    p.s. lass dich durch meine vorschläge nicht zu verrückt machen ....[:p]


    l.g. robert

  • Hi Robert,
    deine vorschläge sind allemal wertvoll! nur so kommt man zu neuen erkenntnissen. brainstorming ist doch was feines[:D]
    die histogramme sind im linearen bereich unbrauchbar und ich habe die werte einzeln getestet. das linke histogramm bricht wirklich nach einer bestimmten kanal-nummer ab, weil die werte einfach nicht vorkommen. ist auch eigentlich logisch. es gibt im linken bereich keine hellen bereiche. im rechten hingegen schon. ich belasse es dabei und widme mich der pixel-spaltung [:D].
    wie michael schon geschrieben hat, wäre jetzt die sub-pixel auswertung angesagt um die präzision zu erhöhen. ich habe ja schon erwähnt, das die laterale klingenposition so gut wie keinen einfluss mehr hat.
    ich habe überigens auch mal die extremen schnittweiten getestet und die ergebnisse sind mehr als zufriedenstellend. ich kann die mitte noch ausmessen wenn man visuell schon längst aufgegeben hätte. das gleiche gilt für die äussersten zonen. gefährlich ist hier nur, das man fast nicht merkt, das man schon die fase misst.[:I]
    wenn ich die sub-pixelauswertung starte, kann ich mir vorstellen, das der limiter, der das horia bild erzeugt wieder ausgebaut werden muss. ich verstärke ja den kontrast, indem ich die differenz von bild und spiegelbild ausrechne und gegen einen grenzwert teste. kleiner == weiss, grösser == schwarz. wenn ich die echte differenz ( abs(a,b) ) abbilde, wird das bild erheblich 'weicher'. wahrscheinlich sind es aber genau diese graukurven, die man für eine sub-pixel implementation benötigt. was meinst du ?

  • Hi,


    > wenn ich die echte differenz ( abs(a,b) ) abbilde, wird das bild erheblich 'weicher'. wahrscheinlich sind es aber genau diese graukurven, die man für eine sub-pixel implementation benötigt. was meinst du ?


    Du meinst wahrscheinlich (abs(a-b)), aber ich würde einfach die (a-b) Kurve berechnen und dann die Nullstelle(n) suchen. Dazu würde ich erst mit Pixel-Auflösung die ungefähre Nullstelle suchen, und dann in einem bestimmten Bereich (+-3 Pixel) die Kurve durch eine Spline-Interpolation ersetzen und die Nullstelle mit Sub-Pixel-Genauigkeit bestimmen.


    Gruss
    Michael


    P.S. Spline-Interpolation ist vielleicht gar nicht nötig. Eventuell genügt eine Annäherung durch eine Gerade.

  • Hallo Michael,
    na klar, abs(a-b) [:)]
    die pixelgenaue position habe ich ja schon. von dort aus nach links und rechts ausschau halten ist auch kein Problem. Ich mache mir nur sorgen, das die verwendung von polynomen bzw. splines die sache zum schwingen bringt. besonders polynome haben diese unangenehme eigenschaft. die geardenfittung macht mir deshalb sorgen, weil wir hier kein stilles bild sondern ein video haben und man benötigt schon eine gewisse anzahl pixel um einigermassen reproduzierbare nulldurchgänge der ableitung zu bekommen. ich fummle deshalb an einer bezier fittung. die schwingt nie und liefert sehr gute stabile maxima. den eigentlichen maximalwert benötige ich ja nicht, nur die nullstelle der ersten ableitung.
    mal schauen wie es wird....dauert aber noch, bin für ein paar tage weg.

  • Hallo Peter,


    > den eigentlichen maximalwert benötige ich ja nicht, nur die nullstelle der ersten ableitung.


    Wozu du jetzt die erste Ableitung brauchst ist mir noch nicht klar.
    Meiner Meinung nach musst du die Nullstelle(n) von (a-b) bestimmen, wobei a das Intensitätsprofil ist, und b das gespiegelte Intensitätsprofil.


    Gruss
    Michael

  • Hallo Michael,
    die erste ableitung benötige ich um die nullstellen zu ermitteln weil diese die maxima und minima der original funktion darstellen. wie sollte ich sonst die exakte stützstelle ermitteln. auf diese kommt es ja an. in einem bild hat man niemals eine schöne gausglocke. Vielleicht habe ich auch nicht verstanden wie du das meinst. beispiel: 7 pixel nummeriert von 0-6, grau werte 5,10,14,12,15,4,4. gesucht: stützstelle des maximums als reelle zahl eines teilpixels. also pixel 3,752 (ich erlaube mir mal drei stellen nach dem komma [:D])
    was schätzt du wo hier das maximum liegt? das ist ein reales beispiel aus einem video frame. da kommt so ziehmlich alles rein, wabernde luft, katzenschwanz, rauschen, hotpixel, coldpixel, lauwarme pixel[8D]. Wenn du möchtest, kannst du die pixelreihe auch immer links und rechts solange fortsetzen, bis es pixel mit dem wert 0 gibt. macht es nicht besser.
    Vielleicht bin ich aber auch betriebsblind und du hast eine viel bessere lösung. wichtig ist mir, das es alles heraus holt was an informationen zu bekommen ist und sinnvoll ist.

  • Hallo Peter,


    > die erste ableitung benötige ich um die nullstellen zu ermitteln weil diese die maxima und minima der original funktion darstellen. wie sollte ich sonst die exakte stützstelle ermitteln. auf diese kommt es ja an. in einem bild hat man niemals eine schöne gausglocke. Vielleicht habe ich auch nicht verstanden wie du das meinst. beispiel: 7 pixel nummeriert von 0-6, grau werte 5,10,14,12,15,4,4.



    Das erscheint mir unnötig kompliziert. Ich würde (a-b) betrachten und zuerst die grobe Nullstelle suchen. Das ist die Stelle, wo das Vorzeichen von einem Pixel zum nächsten Pixel wechselt.
    Dann betrachtest du +-3 Pixel um diese Nullstelle herum und hast beispielsweise diese 7 Werte:
    13,9,5,1,-2,-6,-11
    Und da mittelst du jetzt einfach eine Gerade rein, und dann bestimmst du den Schnittpunkt dieser Geraden mit der X-Achse.



    > was schätzt du wo hier das maximum liegt?


    Ein Maximum genau zu bestimmen ist viel schwieriger und ungenauer als eine Nullstelle zu bestimmen.


    > das ist ein reales beispiel aus einem video frame. da kommt so ziehmlich alles rein, wabernde luft, katzenschwanz, rauschen, hotpixel, coldpixel, lauwarme pixel[8D].


    Dann hilft wahrscheinlich eine Mittelung der Nullstellen-Position über mehrere Messungen, beispielsweise über 1-2 Sekunden.
    Programmier doch einfach einen Tiefpass in die Ergebnis-Ausgabe rein:


    Ergebnis := 0.95 * (letztes_Ergebnis) + 0.05 * (aktueller_Messwert);
    letztes_Ergebnis := Ergebnis;
    Writeln(Ergebnis);


    Gruss
    Michael


    P.S. Ich hab sowas vor ca. 5 Jahren auch schon mal ausprobiert, es war aber nicht so komfortabel wie dein Programm inzwischen ist:
    http://www.astro-electronic.de/foucault.htm

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!