Compilerbauhome Compilerbau: Beispiele für wavelet-Transformationen, Gamma-Test und Bildergallerie Prof. Dr. Uwe Schmidt FH Wedel

Beispiele für wavelet-Transformationen, Gamma-Test und Bildergallerie


weiter

Einfache Wavelet Transformationen

DAS Original
Herberts Lieblingsbild:
 
weiter
erzeugte Bilder
und das, was man daraus mit einfachen wavelet-Transformationen machen kann:
 
 
ein Schritt horizontale wavelet Transformation
 
 
die Rücktransformation
(das Original zurückgerechnet!)
 
 
rekursive horizontale wavelet Transformation
 
 
die Rücktransformation
(das Original zurückgerechnet)
 
 
ein Schritt vertikal
 
 
rekursiv vertikal
 
 
symmetrisch einen Schritt transformiert
 
 
symmetrisch rekursiv transformiert
auch hieraus lässt sich das Original zurückrechnen
weiter

weiter

Das Programm, mit dem die Bilder erzeugt wurden: ppl/examples/wavelet.ppl

   1------------------------------------------------------------
   2--
   3-- simple wavelet transformations
   4--
   5
   6------------------------------------------------------------
   7--
   8-- wavelet picture combinations
   9
  10function meanAndDiff(pl : list of picture)
  11  : list of picture
  12
  13  [ pl[0] + pl[1]
  14  , pl[0] - pl[1]
  15  ]
  16;
  17
  18function inverseMeanAndDiff(pl : list of picture)
  19  : list of picture
  20
  21  [ pl[0].inverseDiff(pl[1])
  22  , pl[0].inverseMean(pl[1])
  23  ]
  24;
  25
  26function meanAndDiff4(pl : list of picture)
  27  : list of picture
  28
  29  begin
  30    var
  31    p0pp1p2pp3p0mp1p2mp3 : picture
  32          := pl[0] + pl[1]
  33           , pl[2] + pl[3]
  34           , pl[0] - pl[1]
  35           , pl[2] - pl[3]
  36
  37    ; return
  38        [ p0pp1 + p2pp3p0mp1 + p2mp3
  39        , p0pp1 - p2pp3p0mp1 - p2mp3
  40        ]
  41  end
  42;
  43
  44------------------------------------------------------------
  45--
  46-- partition pictures
  47
  48function partitionSquare(p : picture) : list of picture
  49  begin
  50  var pl : list of picture
  51      := p.partitionHorizontal(2)
  52
  53  ; return pl[0].partitionVertical(2)
  54         + pl[1].partitionVertical(2)
  55  end
  56;
  57
  58------------------------------------------------------------
  59--
  60-- paste pictures
  61
  62function pasteVertical(pl : list of picture) : picture
  63  sideBySide(pl[0],pl[1])
  64;
  65
  66function pasteHorizontal(pl : list of picture) : picture
  67  above(pl[0],pl[1])
  68;
  69
  70function pasteSquare(pl : list of picture) : picture
  71  above(sideBySide(pl[0], pl[1])
  72       ,sideBySide(pl[2], pl[3])
  73       )
  74;
  75
  76------------------------------------------------------------
  77--
  78-- wavelet transformations
  79
  80function waveHorizontal1Step(p : picture) : picture
  81  p.partitionHorizontal(2)
  82   .meanAndDiff
  83   .pasteHorizontal
  84;
  85
  86function waveHorizontalHead(pl : list of picture)
  87  : list of picture
  88
  89  pl.tail
  90    .cons(pl.head.waveHorizontalRecursive)
  91;
  92
  93function waveHorizontalRecursive(p : picture) : picture
  94  if p.height <= 1
  95  then
  96    p
  97  else
  98    p.partitionHorizontal(2)
  99     .meanAndDiff
 100     .waveHorizontalHead
 101     .pasteHorizontal
 102;
 103
 104function inverseWaveHorizontal1Step(p : picture) : picture
 105  begin
 106  var pl : list of picture
 107      := p.splitHorizontal(2)
 108          .inverseMeanAndDiff
 109  ; return pl[0].mergeHorizontal(pl[1])
 110  end
 111;
 112
 113function inverseWaveHorizontalHead(pl : list of picture)
 114  : list of picture
 115
 116  pl.tail
 117    .cons(pl.head.inverseWaveHorizontalRecursive)
 118;
 119
 120function inverseWaveHorizontalRecursive(p : picture) : picture
 121  if p.height <= 1
 122  then
 123    p
 124  else
 125    begin
 126    var pl : list of picture
 127        := p.splitHorizontal(2)
 128            .inverseWaveHorizontalHead
 129            .inverseMeanAndDiff
 130    ; return pl[0].mergeHorizontal(pl[1])
 131    end
 132;
 133
 134------------------------------------------------------------
 135
 136function waveVertical1Step(p : picture) : picture
 137  p.partitionVertical(2)
 138   .meanAndDiff
 139   .pasteVertical
 140;
 141
 142function waveVerticalHead(pl : list of picture) : list of picture
 143  pl.tail
 144    .cons(pl.head.waveVerticalRecursive)
 145;
 146
 147function waveVerticalRecursive(p : picture) : picture
 148  if p.width <= 1
 149  then
 150    p
 151  else
 152    p.partitionVertical(2)
 153     .meanAndDiff
 154     .waveVerticalHead
 155     .pasteVertical
 156;
 157
 158------------------------------------------------------------
 159
 160function waveSquare1Step(p : picture) : picture
 161  p.partitionSquare
 162   .meanAndDiff4
 163   .pasteSquare
 164;
 165
 166function waveSquareHead(pl : list of picture) : list of picture
 167  pl.tail
 168    .cons(pl.head.waveSquareRecursive)
 169;
 170
 171function waveSquareRecursive(p : picture) : picture
 172  if p.width <= 1
 173    or
 174     p.height <= 1
 175  then
 176    p
 177  else
 178    p.partitionSquare
 179     .meanAndDiff4
 180     .waveSquareHead
 181     .pasteSquare
 182;
 183
 184------------------------------------------------------------
 185
 186function storePicp : picture
 187                 ; n : string
 188                 ) : picture
 189  begin
 190    store(p,n)
 191    ; return p
 192  end
 193;
 194
 195------------------------------------------------------------
 196--
 197-- the main program
 198
 199begin
 200  var fn : string
 201      := getArgs().head
 202
 203  ; var p : picture
 204      := load(fn)
 205
 206  ; writeln("1 step horizontal wavelet transformation")
 207  ; p.waveHorizontal1Step
 208     .storePic(fn + "-wave.H1")
 209     .inverseWaveHorizontal1Step
 210     .store(fn + "-wave.H1.inverse")
 211
 212  ; writeln("recursive horizontal wavelet transformation")
 213  ; p.waveHorizontalRecursive
 214     .storePic(fn + "-wave.HR")
 215     .inverseWaveHorizontalRecursive
 216     .store(fn + "-wave.HR.inverse")
 217
 218  ; writeln("1 step vertical wavelet transformation")
 219  ; p.waveVertical1Step
 220     .store(fn + "-wave.V1")
 221
 222  ; writeln("recursive vertical wavelet transformation")
 223  ; p.waveVerticalRecursive
 224     .store(fn + "-wave.VR")
 225
 226  ; writeln("1 step symmetric wavelet transformation")
 227  ; p.waveSquare1Step
 228     .store(fn + "-wave.S1")
 229
 230  ; writeln("recursive symmetric wavelet transformation")
 231  ; p.waveSquareRecursive
 232     .store(fn + "-wave.SR")
 233end
 234
 235------------------------------------------------------------
 236   
weiter

weiter

Testbild zur Bildschirmkalibrierung

Gamma Test Image

weiter

Das Programm für das Testbild: ppl/examples/gamma.ppl

   1------------------------------------------------------------
   2--
   3-- test picture for gamma correction of displays
   4--
   5------------------------------------------------------------
   6
   7begin
   8 var w,b,r,s : picture
   9             := white(1,1), black(1,1), black(1,1), black(1,1)
  10
  11 ; var widthheightsteps : int
  12                            := 50, 300, 16
  13
  14 ; var bw : picture
  15             := w.sideBySide(b)
  16                 .above(b.sideBySide(w))
  17                 .replicate(width div 2, width div 2)
  18
  19 ; var i : int := 1
  20 ; while i <= steps do
  21     r,i := r.sideBySide(grey(i / (1.0 * steps),1,1)),i+1
  22   endwhile
  23
  24 ; s := w.scale(width * (steps + 1), 50)
  25         .above(r.scale(width,height))
  26         .above(bw.replicate(steps + 1, 1))
  27         .above(r.scale(width,height).flipVertical)
  28         .above(b.scale(width * (steps + 1), width))
  29
  30 ; s.store("gamma-test")
  31end
  32
  33------------------------------------------------------------
  34
  35
  36
weiter

weiter

Bildergallerie

ppl/examples/gen/gamma-test.png ppl/examples/gen/angela-above.png ppl/examples/gen/angela-add.png ppl/examples/gen/angela-bitmap.png ppl/examples/gen/angela-blackAndWhite.png ppl/examples/gen/angela-blur8x8.png ppl/examples/gen/angela-blurAll.png ppl/examples/gen/angela-blurResize8x8.png ppl/examples/gen/angela-cut.png ppl/examples/gen/angela-diffInvDiff.png ppl/examples/gen/angela-diff.png ppl/examples/gen/angela-doublesize.png ppl/examples/gen/angela-evencols.png ppl/examples/gen/angela-evenrows.png ppl/examples/gen/angela-flipDiagonal.png ppl/examples/gen/angela-flipHorizontal.png ppl/examples/gen/angela-flipVertical.png ppl/examples/gen/angela-gamma0.5.png ppl/examples/gen/angela-gamma2.0.png ppl/examples/gen/angela-halfsize.png ppl/examples/gen/angela-invert.png ppl/examples/gen/angela-max.png ppl/examples/gen/angela-meanInvMean.png ppl/examples/gen/angela-mean.png ppl/examples/gen/angela-min.png ppl/examples/gen/angela-mirror.png ppl/examples/gen/angela-mul.png ppl/examples/gen/angela-oddrcols.png ppl/examples/gen/angela-oddrrows.png ppl/examples/gen/angela-original.png ppl/examples/gen/angela-paste.png ppl/examples/gen/angela-reduce2.png ppl/examples/gen/angela-reduce3.png ppl/examples/gen/angela-reduce4.png ppl/examples/gen/angela-reduce5.png ppl/examples/gen/angela-reduce6.png ppl/examples/gen/angela-reduce7.png ppl/examples/gen/angela-replicate1x2.png ppl/examples/gen/angela-replicate2x1.png ppl/examples/gen/angela-replicate2x2.png ppl/examples/gen/angela-rotate.png ppl/examples/gen/angela-scale1x2.png ppl/examples/gen/angela-scale2x1.png ppl/examples/gen/angela-scale2x2.png ppl/examples/gen/angela-shift.png ppl/examples/gen/angela-sideBySide.png ppl/examples/gen/angela-splitH.png ppl/examples/gen/angela-splitV.png ppl/examples/gen/angela-sub.png ppl/examples/gen/angela-waveH.png ppl/examples/gen/angela-waveV.png ppl/examples/gen/lena-above.png ppl/examples/gen/lena-add.png ppl/examples/gen/lena-bitmap.png ppl/examples/gen/lena-blackAndWhite.png ppl/examples/gen/lena-blur8x8.png ppl/examples/gen/lena-blurAll.png ppl/examples/gen/lena-blurResize8x8.png ppl/examples/gen/lena-cut.png ppl/examples/gen/lena-diffInvDiff.png ppl/examples/gen/lena-diff.png ppl/examples/gen/lena-doublesize.png ppl/examples/gen/lena-evencols.png ppl/examples/gen/lena-evenrows.png ppl/examples/gen/lena-flipDiagonal.png ppl/examples/gen/lena-flipHorizontal.png ppl/examples/gen/lena-flipVertical.png ppl/examples/gen/lena-gamma0.5.png ppl/examples/gen/lena-gamma2.0.png ppl/examples/gen/lena-halfsize.png ppl/examples/gen/lena-invert.png ppl/examples/gen/lena-max.png ppl/examples/gen/lena-meanInvMean.png ppl/examples/gen/lena-mean.png ppl/examples/gen/lena-min.png ppl/examples/gen/lena-mirror.png ppl/examples/gen/lena-mul.png ppl/examples/gen/lena-oddrcols.png ppl/examples/gen/lena-oddrrows.png ppl/examples/gen/lena-original.png ppl/examples/gen/lena-paste.png ppl/examples/gen/lena-reduce2.png ppl/examples/gen/lena-reduce3.png ppl/examples/gen/lena-reduce4.png ppl/examples/gen/lena-reduce5.png ppl/examples/gen/lena-reduce6.png ppl/examples/gen/lena-reduce7.png ppl/examples/gen/lena-replicate1x2.png ppl/examples/gen/lena-replicate2x1.png ppl/examples/gen/lena-replicate2x2.png ppl/examples/gen/lena-rotate.png ppl/examples/gen/lena-scale1x2.png ppl/examples/gen/lena-scale2x1.png ppl/examples/gen/lena-scale2x2.png ppl/examples/gen/lena-shift.png ppl/examples/gen/lena-sideBySide.png ppl/examples/gen/lena-splitH.png ppl/examples/gen/lena-splitV.png ppl/examples/gen/lena-sub.png ppl/examples/gen/lena-wave.H1.inverse.png ppl/examples/gen/lena-wave.H1.png ppl/examples/gen/lena-waveH.png ppl/examples/gen/lena-wave.HR.inverse.png ppl/examples/gen/lena-wave.HR.png ppl/examples/gen/lena-wave.S1.png ppl/examples/gen/lena-wave.SR.png ppl/examples/gen/lena-wave.V1.png ppl/examples/gen/lena-waveV.png ppl/examples/gen/lena-wave.VR.png ppl/examples/gen/papa-above.png ppl/examples/gen/papa-add.png ppl/examples/gen/papa-bitmap.png ppl/examples/gen/papa-blackAndWhite.png ppl/examples/gen/papa-blur8x8.png ppl/examples/gen/papa-blurAll.png ppl/examples/gen/papa-blurResize8x8.png ppl/examples/gen/papa-cut.png ppl/examples/gen/papa-diffInvDiff.png ppl/examples/gen/papa-diff.png ppl/examples/gen/papa-doublesize.png ppl/examples/gen/papa-evencols.png ppl/examples/gen/papa-evenrows.png ppl/examples/gen/papa-flipDiagonal.png ppl/examples/gen/papa-flipHorizontal.png ppl/examples/gen/papa-flipVertical.png ppl/examples/gen/papa-gamma0.5.png ppl/examples/gen/papa-gamma2.0.png ppl/examples/gen/papa-halfsize.png ppl/examples/gen/papa-invert.png ppl/examples/gen/papa-max.png ppl/examples/gen/papa-meanInvMean.png ppl/examples/gen/papa-mean.png ppl/examples/gen/papa-min.png ppl/examples/gen/papa-mirror.png ppl/examples/gen/papa-mul.png ppl/examples/gen/papa-oddrcols.png ppl/examples/gen/papa-oddrrows.png ppl/examples/gen/papa-original.png ppl/examples/gen/papa-paste.png ppl/examples/gen/papa-reduce2.png ppl/examples/gen/papa-reduce3.png ppl/examples/gen/papa-reduce4.png ppl/examples/gen/papa-reduce5.png ppl/examples/gen/papa-reduce6.png ppl/examples/gen/papa-reduce7.png ppl/examples/gen/papa-replicate1x2.png ppl/examples/gen/papa-replicate2x1.png ppl/examples/gen/papa-replicate2x2.png ppl/examples/gen/papa-rotate.png ppl/examples/gen/papa-scale1x2.png ppl/examples/gen/papa-scale2x1.png ppl/examples/gen/papa-scale2x2.png ppl/examples/gen/papa-shift.png ppl/examples/gen/papa-sideBySide.png ppl/examples/gen/papa-splitH.png ppl/examples/gen/papa-splitV.png ppl/examples/gen/papa-sub.png ppl/examples/gen/papa-waveH.png ppl/examples/gen/papa-waveV.png

Letzte Änderung: 05.01.2015
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel