20
20
calc => 'tar = src + shift; tar = tar - (int)tar;',
21
21
prms => {'shift' => { def => 0.25 }}},
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 }}},
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 }}},
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" } }},
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 } }},
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]);' },
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 }}},
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" } }},
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 } }},
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 } }},
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 } }},
53
89
'allanon' => { desc => 'Mean of pixel pair.',