~hidravfx-dev-team/hidravfx/trunk

« back to all changes in this revision

Viewing changes to src/effects.pl

  • Committer: Laszlo.simon
  • Date: 2011-03-15 17:07:43 UTC
  • Revision ID: git-v1:cd571aec3cdecfeb60e232e039ef14c5401bef9a
Image statistics function, various contrast and leveling effects added.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
                     calc => 'tar = src + shift; tar = tar - (int)tar;',
21
21
                     prms => {'shift'  => { def => 0.25 }}}, 
22
22
  
 
23
  'noise'  => {      desc => 'Add noise.', 
 
24
                     calc => 'double r = rand()/(double)RAND_MAX;
 
25
                              r = r > (1-src) ? src+(1-src)*(r-(1-src))/src :
 
26
                                  r < (1-src) ? src*r/(1-src) : 0;
 
27
                              tar = factor*r + (1-factor)*src;',
 
28
                     prms => {'factor'  => { def => 0.25 }}}, 
 
29
                       
23
30
  'bright' => {      desc => 'Additional bright with <bright>.', 
24
31
                     calc => 'tar = src + bright;',
25
32
                     prms => {'bright' => { def => 0.25 }}},
27
34
  'contrast' => {    desc => 'Multiplicative contrast.', 
28
35
                     calc => 'tar = (src - 0.5) * gain + 0.5;',
29
36
                     prms => {'gain'   => { def => 0.25 }}},
30
 
  
 
37
                     
 
38
  'relativecontrast'=>{desc => 'Multiplicative contrast relative to specified map.', 
 
39
                     calc => 'tar = (src - ref) * gain + ref;',
 
40
                     prms => {'gain'   => { def => 0.25 },
 
41
                              'ref'    => { def => 0.5,  test => "addimg.pfm" } }},
 
42
                     
 
43
  'mappedcontrast'=>{desc => 'Contrast between the specified maps or values.', 
 
44
                     calc => 'tar = (src-min)/(max-min);',
 
45
                     prms => {'min'    => { def => 0.25 },
 
46
                              'max'    => { def => 0.75  } }},
 
47
        
 
48
  'autocontrast' =>{ desc => 'Automatic contrast to the available range.', 
 
49
                     init => 'tLayerStats s; stats(srcimg, &s);',
 
50
                     calc => 'tar = (src-s.min[ch])/(s.max[ch]-s.min[ch]);' },
 
51
                             
31
52
  'bright2' => {     desc => 'Multiplicative bright', 
32
53
                     calc => 'tar = (bright < 0) ? src*(1.0+bright) : src+(1.0-src)*bright;',
33
54
                     prms => {'bright' => { def => 0.25 }}},
40
61
                     calc => 'tar = src<=limit ? 0 : log(xmax*(src-limit)/(1.0-limit)+1)/log(xmax+1);',
41
62
                     prms => {'limit'  => { def => 0.25 }, 
42
63
                              'xmax'   => { def => 2 }}},
 
64
                              
43
65
  'blend' =>       { desc => 'Blends two image.',
44
66
                     calc => 'double alp = alpha * add[3];
45
67
                              tar    = src*(1-alp)+add*alp;',
46
68
                     prms => {'alpha' => { def  => 0.5 },
47
69
                              'add'   => { test => "addimg.pfm" } }},
 
70
                              
48
71
  'binary' =>      { desc => 'Cut to binary values based on threshold.',
49
72
                     calc => 'tar = src < threshold ? 0.0 : 1.0;',
50
73
                     prms => {'threshold' => { def  => 0.5 } }},
 
74
                     
 
75
  'mint' =>        { desc => 'Cut to binary values based on threshold and gamma.',
 
76
                     init => 'tLayerStats stat; stats(srcimg, &stat);',
 
77
                     calc => 'double val = stat.max[ch] * pow(src/stat.max[ch],gamma);
 
78
                              tar = (val > threshold) ? stat.max[ch] : 0.0;',
 
79
                     prms => {'threshold' => { def  => 0.5 },
 
80
                              'gamma'     => { def  => 2.0 } }},
 
81
                              
 
82
  'level' =>       { desc => 'Cut to color levels.',
 
83
                     init => 'tLayerStats s; stats(srcimg, &s);',
 
84
                     calc => 'int cnt = (level * (src - s.min[ch]) / (s.max[ch] - s.min[ch]));
 
85
                              tar =  s.min[ch] + cnt * (s.max[ch] - s.min[ch]) / level;',
 
86
                     prms => {'level' => { def  => 10 } }},
51
87
 },
52
88
 blendings => {
53
89
  'allanon' => {     desc => 'Mean of pixel pair.',