Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Ma­ni­pu­la­ti­on der Pi­xel­po­si­tio­nen

 

Bei allen bis­he­ri­gen Ope­ra­tio­nen sind die Pixel an ihren Po­si­tio­nen ver­blie­ben. Viele Ope­ra­tio­nen (Spie­geln, Dre­hen, Größe än­dern, Ver­zer­ren usw) ver­än­dern aber die Po­si­ti­on der Pixel. Dabei sind zwei Vor­ge­hens­wei­sen denk­bar:

  1. Man durch­läuft jedes Pixel des neuen Bil­des und be­rech­net des­sen Farbe aus den alten Pi­xeln. Im ein­fachs­ten Fall kann man die Farbe eines be­stimm­ten alten Pi­xels über­neh­men.
  2. Man durch­läuft jedes Pixel des alten Bil­des und über­legt, wo das Pixel im neuen Bild zu fin­den ist.

z.B. ho­ri­zon­ta­les Spie­geln:
Va­ri­an­te 1: pixelNeu[x][y] = pixel[(breite-1)-x][y];
Va­ri­an­te 2: pixelNeu[(breite-1)-x][y] = pixel[x][y];

Va­ri­an­te 2 passt bes­ser zu der Vor­stel­lung, dass die alten Pixel auf neue Po­si­tio­nen ver­scho­ben wer­den. Dies setzt aber vor­aus, dass jedes Pixel auf genau eine neue Po­si­ti­on ab­ge­bil­det wird. Das ist bei der Spie­ge­lung der Fall, aber im All­ge­mei­nen nicht. Bei einer Ver­grö­ße­rung oder Ver­klei­ne­rung des Bil­des oder auch beim Dre­hen eines Bil­des gilt dies nicht. Dort muss für jedes Pixel ent­schie­den wer­den, wie die Farbe er­mit­telt wird. Das kann z.B. mit nea­rest-Neigh­bor-Ver­fah­ren oder mit bi­li­nea­rer In­ter­po­la­ti­on ge­sche­hen.

Re­la­tiv leicht kann man sich das vor­stel­len, wenn die Brei­te und Höhe hal­biert wer­den. Bei der Hal­bie­rung wer­den je 2x2 Pixel zu einem neuen Pixel. Die­ses Pixel kann nun ent­we­der die Farbe des lin­ken obe­ren Pi­xels be­kom­men oder den Durch­schnitt der vier Pixel. Wird nur ein Pixel ver­wen­det, nimmt man in der Regel des, das dem neuen Pixel bei der Ska­lie­rung am nächs­ten liegt. Die­ses Ver­fah­ren nennt sich „nächs­ter Nach­bar“-Ver­fah­ren (nea­rest neigh­bor). Der Durch­schnitt der vier Pixel er­gibt sich, wenn man eine bi­li­nea­re In­ter­po­la­ti­on wählt, da das neue Pixel genau in der Mitte der vier alten Pixel liegt.

Nea­rest Neigh­bor

Bei die­sem Ver­fah­ren muss für jedes Pixel des neuen Bil­des be­rech­net wer­den, an wel­cher Stel­le die­ses Pixel im alten Bild ge­le­gen hätte:

x alt = x neu breite neu - 1 ( breite alt - 1 ) y alt = y neu hoehe neu - 1 ( hoehe alt - 1 )

Bi­li­nea­re In­ter­po­la­ti­on

Bilineare Interpolation

Bild­quel­le: Bi­li­near­In­ter­po­la­ti­on.svg [ PD ], via Wi­ki­me­dia Com­mons

Zu­nächst wird wie beim nea­rest neigh­bor-Ver­fah­ren die Po­si­ti­on des neuen Pi­xels (P) im alten Bild be­rech­net. Diese Ko­or­di­na­ten fal­len in der Regel nicht genau auf ein Pixel des alten Bil­des (Q11 bis Q 22). Um die Farbe des neuen Pi­xels zu er­mit­teln, wer­den nun die vier um­lie­gen­den Pixel des alten Bil­des in rich­ti­gen Ge­wich­tun­gen her­an­ge­zo­gen. Dabei wer­den zu­nächst die Far­ben von den Punk­ten R 1 und R2 durch li­nea­re In­ter­po­la­ti­on zwi­schen den Pi­xels Q11 und Q21 bzw. Q12 und Q 22 und dann die Farbe von P durch li­nea­re In­ter­po­la­ti­on zwi­schen R1 und R2 be­stimmt.

Wenn x und y Werte zwi­schen 0 (genau bei x1 bzw. y1) und 1 (genau bei x2 bzw. y2) sind, dann er­gibt sich fol­gen­de For­mel:

I P = I Q 11 ( 1 - x ) ( 1 - y ) + I Q 12 ( 1 - x ) ( y ) + I Q 21 ( x ) ( 1 - y ) + I Q 22 ( x ) ( y )

Diese Werte wer­den auf ganze Zah­len ge­run­det, um den nächs­ten Nach­barn zu fin­den. Die­ses Ver­fah­ren hat zwei Nach­tei­le: Zum einen be­kom­men schräg ver­lau­fen­de Li­ni­en durch die Run­dun­gen „Kni­cke“. Zum an­de­ren wird das Bild bei Ver­grö­ße­rung pi­xe­lig, da z.B. bei einem Ver­grö­ße­rungs­fak­tor von 2 ein 2x2 Feld die Farbe eines ein­zi­gen Pi­xels des alten Bil­des be­kommt.

Liegt P genau in der Mitte der vier Punk­te, dann wer­den alle vier um­lie­gen­de Punk­te mit dem Fak­tor ¼ ge­wich­tet.

Die Er­geb­nis­se der bi­li­nea­ren In­ter­po­la­ti­on sind er­heb­lich bes­ser als die des nea­rest neigh­bor-Ver­fah­rens. Noch bes­ser ist die bi­ku­bi­sche In­ter­po­la­ti­on, die ver­sucht, die Farbe von P mit noch mehr um­lie­gen­den Punk­ten an­zu­nä­hern. Hier kom­men ku­bi­sche Spli­nes zum Ein­satz (vgl. IMP Ma­the­ma­tik Klas­se 9).

 

Hin­ter­grund zur di­gi­ta­len Bild­be­ar­bei­tung: Her­un­ter­la­den [odt][19 MB]

Hin­ter­grund zur di­gi­ta­len Bild­be­ar­bei­tung: Her­un­ter­la­den [pdf][1,5 MB]

 

Wei­ter zu Sons­ti­ges