Hallo,
nein ich hatte an soetwas gedacht:
schwelle=min(150,max(25,(max(pixel)+min(pixel))/2));
hoff ich hab jetzt keine klammern vergessen.
mfg jeffrey
ich habe festgestellt, daß das Ergebnis mit Vergrößerung etwas besser ausschaut (bewirkt eine Kantenglättung)- Die Vergrößerung bringt m.E. nichts. Aber vielleicht hast Du ja gute Gründe das zu tun.
tja, wie wird das Dunkelbild erstellt...- Statt des Dunkelbildes (wie wird das erstellt) kannst Du ein originalbild nehmen und mit einem großen Tiefpass filtern. Das gefilterte Bild ziehst Du dann vom original ab. Damit verschwingen globale (!) Kontrastunterschiede
- ich erzeuge ein Bild welches aus den Mittelwerten der Eingangsbilder in Z-Richtung besteht (Matlab-Befehl: mean(images, 3) )
- dann berechne ich den jeweils kleinsten Wert pro Spalte, und aus denen wiederum den Mittelwert
das ist nur durch rumprobieren zustande gekommen und für meine Bilder liefert es einen Wert,
der etwa in der gleichen Größenordnung liegt wie die Schatten auf dem Bild.
Die Variante mit Tiefpass + log teste ich gleich mal.
edit:
@jeffrey
Also wenn ich dich richtig verstanden habe müsste die Berechnung etwa so aussehen:
(max(Pixel) - min(Pixel)) / max(Bilder), was mir dann einen Wert zwischen 0 und 1 liefert.
So viele Treppen und so wenig Zeit!
Hallo,
nein ich hatte an soetwas gedacht:
schwelle=min(150,max(25,(max(pixel)+min(pixel))/2));
hoff ich hab jetzt keine klammern vergessen.
mfg jeffrey
nochwas dazu zur bewertung, da könnte man soetwas machen, um eine aussage über die güte zu erhalten:
bewertung=min(abs(pixel(1:end)-schwelle))/max(pixel);
ka, ob des funzt, mal ausprobieren, ob was sinnvolles raus kommt.
mfg jeffrey
Das mag vergrößert besser aussehen, die Nutzinformation ist dann aber schon verändert.
Hast Du vielleicht ein Bild, dass DU hier mal posten kannst?
Also ich hätte hier mal zwei ganz frisch decodierte Bilder...
hier ohne Vergrößerung:
Bild hier
und hier mit Vergrößerung(2x):
Bild hier
(nein, das bin nicht ich)
Die wurden beide nach der von mir oben beschriebenen Variante ausgewertet,
was beim zweiten verständlicherweise viel länger gedauert hat als beim ersten.
Wie man sieht sind die Ergebnisse garnicht mal so schlecht, aber ich denke mir halt daß es auch besser gehen müsste.
@jeffrey
also bei der Schwelle willst du alles über 150 und alles unter 25 abschneiden, richtig?
Da ist es halt ein bischen schade, daß man diese Werte selbst festlegen muss
(schöner wäre es wenn derartige Grenzen automatisch errechnet werden könnten)
Was die Bewertung betrifft habe ich inzwischen einen relativ vielversprechenden Ansatz gefunden...
log(max(Bilder,[],3) ./ min(Bilder,[],3)));
Laut Wikipedia errechnet sich nämlich der Kontrast zu max/min, und das mache ich eben für jedes Pixel einzeln.
Den Logarithmus verwende ich, weil ein paar kleine Spiegelungen im Bild sind, bei denen der Kontrast natürlich extrem erhöht ist.
Resultat ist ein Bild bei dem die Schatten interessanterweise wesentlich dunkler sind als der Rest.
(also auch dunkler als Stellen die auf den Originalbildern aufgrund der Farbe des Objekts relativ dunkel sind)
So viele Treppen und so wenig Zeit!
Also bei den beiden Bildern ist der Ansatz mit dem großen Tiefpass und der Subtraktion mit Sicherheit erfolgreich. Du wirst dann ein Bild bekommen, dass nur noch die Kontraste des Vordergrundobjektes (und dessen Schatten) enthält, aber nicht mehr den "Graukeil" des Hintergrundes.
Hast Du mal ein Originalbild, so wie es von der Kamera kommt?
Der Graukeil ist Absicht
Die beiden Bilder da oben sind ja schon fertig ausgewertet, d.h. der Wert eines Pixels
entspricht der Nummer des auf dem Originalbild an dieser Stelle sichtbaren Streifens.
Da die Streifen von links nach rechts aufsteigend durchnummeriert sind, entsteht dieser Graukeil.
das ist das 9. Originalbild, also das mit dem feinsten Streifenmuster
Bild hier
wie man sieht gibt es Stellen an denen noch Streifen zu sehen sind,
die aber kaum heller sind als der große Schatten auf der linken Seite
So viele Treppen und so wenig Zeit!
Da sollte Dir der LoG eigentlich gute Kanten liefern. Da Dich in dem Fall speziell vertikale Kanten interessieren, kannst Du den Kern entsprechend wählen.
Hmm...
also ich habe mal den LoG auf alle Bilder angewendet und der macht die Kanten wirklich sehr gut sichtbar,
aber um diesen Filter verwenden zu können müsste der Rest der Auswertung deutlich komplexer werden.
Die Auswertung basiert ja darauf, daß in der zeitlichen Hell-Dunkel-Abfolge eines Streifens seine Nummer codiert ist.
Das kann aber nicht mehr funktionieren wenn man alle Bilder durch einen LoG Filter jagt, da dann alle Streifen grau sind.
(die Kanten sind zwar sehr schön hervorgehoben, aber ich kann den Gray-Code nicht mehr auswerten)
Als nächstes werde ich mal schauen wie die Bilder aussehen wenn man jeweils die Differenz zum vorherigen nimmt.
So viele Treppen und so wenig Zeit!
Bei Fester Kamera, Beleuchtung und Hintergrund hast Du bei der zeitlichen Abfolge im LoG, eine Abfolge von Kanten.
Aber da ich Deinen restlichen Algorithmus nicht ausreichend genug kenne, kann ich Dir da nicht viel mehr raten.
Lesezeichen