Das Abtasttheorem streng angewendet, bedeutet, dass man keine Frequenzen
unterhalb der halben Abtsatfrequenz auflösen kenn. Auf Bildformate
bezogen, bedeutet das aus meiner Sicht, dass man nur jeweils die halbe
DPI-Zahl hat, die von der Auflösung vorgegeben wurde. Wie berücksichtigt
man das nun bei der Bildfilterung?
Beim Verschieben unterhalb der Pixelgrenze und Drehungen, kommen
Ergebnisse interpolierter Pixel hervor, die nicht mehr den Kontrast des
Ursprungsbildes bestzen. Wie geht man damit um?
Wie bei Frequenzen ergeben sich Aliasingeffekte, die man mit einem
(vorgeschalteten) Antialiasingfilter zu begrenzen versucht, ein
Weichzeichner unter halber Pixelfrequenz.
So habe ich mir das auch gedacht. Faktisch bedeutet das aber doch, dass
man auf Bildschirmen oft höhere Kontraste darstellt, asl im Bild
drinstecken. Was ist z.B. mit einem Extrembild von 0101010 in den
Pixelspalten? Wenn man das um 1/2 rücken will, kommt doch 0,5 0,5 0,5
0,5 raus?
Eben. Das ist ja genau der Irrsinn, den die Videoverrückten nicht
glauben wollen und was leider zu abstrusen Default-Überschärfungen bei
Consumerprodukten führt. Die sitzen mit der Lupe vor dem Schirm erwarten
zB. bei HDTV-Material scharf abgegrenzte Pixel, und verstehen nicht,
dass das bei natürlichem Material so gar nicht existieren kann.
Vor den Sensoren sitzen die schon erwähnten Antialiasingfilter: OLPF =
Optical Low Pass Filter.
Und wenn man DSLRs fürs Filmen missbraucht, merkt man am entstehenden
deutlichen Moire auch, dass sie die nötige Filterung von ihren >10MPx
auf die 2MPx aus Performancegründen eben auch nicht sauber schaffen.
"Echte" HDTV-Kameras, die auf derselben Sensorfläche nur 4MPx (wg.
Bayer&Co) haben, zeigen den Effekt nicht...
Ok, das bedeutet aber auch, dass (wenn hoch oder runtergesampelt wird)
ein anti-aliasing Filter benutzt werden muss / müsste.
Dazu aber die Frage: Über welche Punkte legt man so eine Filterkurve?
Reichen da jeweils 3 wie bei dem thema Medianfilter:
Beitrag "Median-Filter in VHDL"
Das ist wie bei normalen Filtern eine Frage der vorhandenen
Rechenperformance und der Anforderungen an die Qualität.
3*3 Pixel sind auf jeden Fall zuwenig, Median ist an sich untauglich.
Bei 1:2 bis 2:1-Skalierungen macht man (zB. in Videodekodern)
normalerweise FIR mit mindestens 5*5 bis 7*7er Stencil. Wenn die
Performance nicht ausreicht, um tatsächlich für alle 25/49 Pixel den
2D-FIR eines Pixels zu berechnen, kann man auch nur horizontal und dann
vertikal filtern (also zB. nur 5+5 Pixel). Das macht aber Artefakte bei
schrägen Kanten.
Georg A. schrieb:> Wenn die> Performance nicht ausreicht, um tatsächlich für alle 25/49 Pixel
Da die Filter meist an 2 Achsen symmetrisch sind und Nullstellen haben,
reduziert sich die Rechnerei oft erheblich - zudem kann man
Zwischenergebnisse mehrfach nutzen, wenn man sie geschickt speichert,
vor allem in FPGAs.
Ich habe mir mal einen effektven 15x15 Filter geschrieben, der auf
Nyqust/2 limitiert und als Rausch und Interpolationsfilter arbeitet. Per
DDC kann man von dort aus leicht runterskalieren und/oder drehen. Die
Auflösung wird logischerweise auf 0,5 DPI limitiert.
Mit etwas Vereinfachung wird daraus ein 13x13 Filter, der in den Ecken
mit Null rechnet und daher das Betrachtungsfeld kreisförmig abtastet. In
einem Virtex 5 lief der mit einigen Anpassungen seinerzeit mit 30MHz
Sensorpixelfrequenz in einem einzigen Takt und brauchte wegen der
partiellen Termoptimierungen / Mehrfachnutzen auch nur knapp 40% der
reinen formellen Grösse, die sich aus dem 4-fachen (6x6)-Fenster ergeben
würde. In jedem Qudranten sind ja zudem noch einige Koeffizienten an der
45°-Achse symmetrisch.
Unten dargestellt ist die Filterkurve auf der X-Achse, die man sich
rotiert denken muss. Ihre Nullstellen tauchen im Bild schwarz auf.
Die beiden kleinen Bilder sind die applizierten Koeffizienten als
Impulsantwort.
Kleine Korrektur zu oben: Die Auflösung wird auf 0,5 dots per Pixel
(0,25 bei Nyqusit/2) limitiert, und nicht per "Inch".
Markus Wagner schrieb:> Reichen da jeweils 3 wie bei dem thema Medianfilter:
Ich habe mir den Medianfilter mal angesehen: Über nur 3 Pixel hinweg ist
der nicht sehr effektiv. Der liefert da mehr Artefakte und Zusatzkanten,
als er glättet. Wenn schon müsste man einen 5x5 Alias vorschalten. Aber
wie bereits beschrieben ist, der für die Vorfilterung ungeeignet.
Großflächig angewendet kann man damit in Verbindung mit einer
Kantenanalyse-/Betonung aber so eine Art
Zeichentrickanimationsdarstellung aus Videos erzeugen. Sieht lustig aus.
Markus Wagner schrieb:> Was ist z.B. mit einem Extrembild von 0101010 in den> Pixelspalten? Wenn man das um 1/2 rücken will, kommt doch 0,5 0,5 0,5> 0,5 raus?
Ich würde sagen, dass das ein schönes Beispiel für Aliasing ist. Dieses
Problem ist aber bei Monitoren nicht wirklich zu umgehen, das sie keinen
antialiasing Filter inkludiert haben. Oder, man müsste eine
Milchglasscheibe vorschrauben.
bko schrieb:> Problem ist aber bei Monitoren nicht wirklich zu umgehen,
Die Abstrahlung des Lichts bei Pixel ist ja nicht präzise in der 180
Grad Richtung, schon deshalb überlappen die Pixel in einiger Distanz.
Das wirkt wie ein verschmierendes Filter. Bei älteren Monitoren war das
immer gut zu erreichen, wenn man sie leicht unscharf stellte.
Thorsten Radke schrieb:> Die Abstrahlung des Lichts bei Pixel ist ja nicht präzise in der 180> Grad Richtung, schon deshalb überlappen die Pixel in einiger Distanz.
Wie ist das gemeint? Weil es sich optisch überlagert oder was?
Auf meinen TFTs kann ich jeden Punkt einzeln wahrnehmen.
Markus Wagner schrieb:> Wie ist das gemeint? Weil es sich optisch überlagert oder was?
Ja natürlich, die Pixel sind ja nicht vollstädnig optisch isoliert.
> Auf meinen TFTs kann ich jeden Punkt einzeln wahrnehmen.
Daher schrieb ich ja auch "alter Fernseher"
Thorsten Radke schrieb:>> Auf meinen TFTs kann ich jeden Punkt einzeln wahrnehmen.> Daher schrieb ich ja auch "alter Fernseher"
ok gebonnt!
Ich würde aber nochmal auf das Kernthema zurückkommen:
Gibt es aus MATLAB oder einem anderen Tool eine Art "Bildfilterdesigner"
für solche und ähnlich gelagerte Fälle?