-
Notifications
You must be signed in to change notification settings - Fork 0
/
fft3dfilter.html
495 lines (444 loc) · 24 KB
/
fft3dfilter.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>3D Frequency Domain filter - denoiser</title>
<link rel="stylesheet" type="text/css" href="../avisynth.css">
</head>
<body>
<h1>FFT3DFilter</h1>
<p>Plugin for <a href="http://www.avisynth.org">Avisynth 2.5</a><br>
Version 2.1.1<br>
Copyright (C)2004-2007 Alexander G. Balakhnin aka Fizick<br>
<a href="http://avisynth.org.ru">http://avisynth.org.ru</a>
</p>
<h4>FFT3DFilter is 3D Frequency Domain filter - strong denoiser and moderate sharpener.</h4>
<h3>Technical info</h3>
<p>
FFT3DFilter uses Fast Fourier Transform method for image processing in frequency domain.
It is based on some advanced mathematical algorithmes of optimal filtration.
It works not locally, but makes some delocalized (block) processing.
In 3D mode, it results in effect similar to partial motion compensation.
This filter can reduce noise without visible quality loss and artefactes,
even with quite strong settings.
It can greatly improve compression and reduce encoded file size.<br>
Also it has option of limited sharpening without both noise amplifying and oversharpening (haloing).<br>
Fiction? Try it yourself! :)</p>
<h4>So, it is a spatial-temporal (3D) filter, and works as follows:</h4>
<ol>
<li>get current and some previous frames;</li>
<li>divide every frame to small overlapped blocks;</li>
<li>get frequency spectrum by windowed forward 2D FFT transform of every block
of these frames;</li>
<li>apply some filter to frequency spectrum;</li>
<li>optionally sharpen image (in 2D frequency domain) by amplifying of some frequencies; </li>
<li>make inverse 2D FFT transform of cleaned spectrum for every block;</li>
<li>do windowed summation of cleaned overlapped blocks to output frame.</li>
</ol>
<p>Overlapped blocks and weighting windows are used to prevent blockiness (and ringing).<br>
The blocks are overlapped by some value along their vertical and
horizontal sizes.<br>
The lesser overlap, the faster processing, but with more visible grid artifactes.</p>
<p>The overlapping definition is shown on picture.</p>
<p><img alt="overlap" src="overlap.gif"></p>
<p>Some analysis and synthesis weighting windows are used to get effective
signal gain=1 after blocks summation.</p>
<h4>Plugin has several processing modes at filter stage:</h4>
<ul>
<li> (Parameter <var>bt</var>=1)
2D (spatial) Wiener filter for spectrum data. Use current frame data only. Reduce
weak frequencies (with small power spectral density) by optimal Wiener
filter with some given noise value. Sharpening and denoising are
simultaneous in this mode.</li>
<li> (Parameter <var>bt</var>=2)
3D Wiener filter for spectrum data. Add third dimension to FFT by using
previous and current frame data. Reduce weak frequencies (with small
power spectral density) by optimal Wiener filter with some given noise
value. </li>
<li> (Parameter <var>bt</var>=3)
Also 3D Wiener filter for spectrum data with
previous, current and next frame data.</li>
<li> (Parameter <var>bt</var>=4)
Also 3D Wiener filter for spectrum data with
two previous, current and next frame data. </li>
<li> (Parameter <var>bt</var>=5)
Also 3D Wiener filter for spectrum data with
two previous, current and two next frames data.</li>
<li>(Parameter <var>bt</var>=0)
Temporal Kalman filter for spectrum data. Use all previous frames data
to get estimation of cleaned current data with optimal recursive data
process algorithm. The filter starts work with small (=1) gain (degree of
noise reducing), and than gradually (in frames sequence) increases the
gain if inter-frame local spectrum (noise) variation is small.
So, Kalman filter can provide stronger noise reduction than Wiener filter.
The Kalman filter gain is limited by some given noise value.
The local gain (and filter work) is reset to 1
when local variation exceeds the given threshold
(due to motion, scene change, etc). So, the Kalman filter output is history-dependent
(on frame taken as a start filtered frame).</li>
</ul>
<h4>Using noise pattern</h4>
<p>Since v1.5 it is possible to get noise pattern (shape)
by spectrum analysis of some empty block (without any objects),
and then to reduce the noise with the same pattern in whole frame and in whole clip.
It may be useful for removal of film (especially amateur 8 mm) grain and analog TV capture interference.<p>
<h4>Sharpening</h4>
<p> At sharpening stage (after denoising) the plugin amplifies high spectrum (spatial, 2D) frequencies .<br>
There is also sharpen-only mode without denoising (<var>bt</var>=-1).<br>
Since version 1.1, some special limited sharpening method is used :</p>
<ul>
<li>the weakest frequencies (with small amplitudes) are not amplified
to prevent noise increasing;</li>
<li>the strongest frequencies (with large amplitudes) are not amplified
to prevent oversharping and haloing.</li>
</ul>
<p>The sharpening strength is maximal for frequencies with middle-range amplitudes.
Of course, you can control both these margins and general sharpening strength.</p>
<p>Since v.1.7, Gaussian High Pass Filter with variable cutoff frequency is used for sharpening.</p>
<p>Since v.1.9, plugin has special option <var>dehalo</var> for decreasing of strong frequencies,
it may be used for spatial adaptive softening of oversharped pictures (halo removal).
This mode may be combined with denoising and sharpening.</p>
<h3>Syntax</h3>
<p><code>FFT3DFilter</code>(<var>clip,
float "sigma", float "beta", int "plane", int "bw", int "bh", int "bt", int "ow", int "oh",
float "kratio", float "sharpen", float "scutoff", float "svr", float "smin", float "smax",
bool "measure", bool "interlaced", int "wintype",
int "pframe", int "px", int "py", bool "pshow", float "pcutoff", float "pfactor",
float "sigma2", float "sigma3", float "sigma4", float "degrid",
float "dehalo", float "hr", float "ht", int "ncpu"</var>)</p>
<p>All parameters are named.</p>
<h3> Function parameters:</h3>
<p>first parameter - input clip</p>
<p>
<var>sigma</var>
- given noise value for all (or highest) frequencies (float>0, default=2.0)<br>
<var>beta</var>
- noise margin (float>=1.0, default=1.0 for no noise left):<br>
control noise amount left in the restoration for Wiener
filter, so max filter noise attenuation = <var>
(beta-1)/beta.</var><br>
<var>plane</var> - processed color plane: 0 - luma(Y), 1 - chroma U, 2 - chroma V, <br>
3 - chroma planes U and V, 4 - both luma and chroma (default = 0)<br>
<var>bw</var>
- block width (integer, default = 48 since v.1.2)<br>
<var>bh</var>
- block height (integer, default = 48 since v.1.2)<br>
<var>bt</var>
- block temporal size, number of frames (-1, 0, 1, 2 or
3, default = 3):<br>
0 - all previous frames (switch Kalman filter mode);<br>
1 - only current frame (spatial 2D Wiener filter);<br>
2 - previous and current frame (3D Wiener filter);<br>
3 - previous, current and next frame (3D Wiener filter)<br>
4 - two previous, current and next frame (3D Wiener filter)<br>
5 - two previous, current and two next frames (3D Wiener filter)<br>
-1 - sharpen only (2D);<br>
<var>ow -</var> overlap width (default=<var>bw</var>/3 since v.1.2)<br>
<var>oh -</var> overlap height (default=<var>bh</var>/3 since v.1.2)<br>
<var>kratio</var>
- ratio of threshold to sigma to reset Kalman filter (default = 2.0):<br>
variation threshold = <var>sigma*kratio</var>,
good value is about from 1.5 to 3.0;<br>
<var>sharpen</var>
- sharpening strength (default=0 - not sharpen)<br>
good values about 0.3 to 1.0 (negative values results in
reverse effect)<br>
<var>scutoff</var>
- sharpening cutoff frequency, relative to max (default=0.3)<br>
<var>svr</var>
- sharpening (and dehalo) vertical ratio (to horizontal) (default=1.0 - same as horizontal, 0 - no vertical sharpening)<br>
<var>smin</var>
- minimum limit (approximate noise margin) for sharpening stage (default=4.0)<br>
<var>smax</var>
- maximum limit (approximate oversharping margin) for sharpening stage (default=20.0)<br>
<var>measure</var>
- select the most optimal (fastest) FFT method by speed measure (with
longer init stage)<br>
instead of simple estimation (default=true since v.0.9.2)<br>
<var>interlaced</var>
- separate fields processing (default=false)<br>
<var>wintype</var>
- weighting windows type (default=0):<br>
0 - same analysis and synthesis half-cosine window, used in all versions before 1.4;<br>
1 - intermediate between 0 and 2;<br>
2 - flat analysis window, rised cosine (Hanning) synthesis window.<br>
<var>pframe</var>
- noise pattern frame number (default=false)<br>
<var>px</var>
- noise pattern block horizontal X position (default=0)<br>
<var>py</var>
- noise pattern block vertical Y position (default=0)<br>
if px=px=0, then the pattern block is defined automatically with minimal power spectral density.<br>
<var>pshow</var>
- show noise pattern block and its properties (default=false)<br>
<var>pcutoff</var>
- noise pattern cutoff frequency (relative to max) (default=0.1)<br>
<var>pfactor</var>
- noise pattern denoise strength (0 to 1.0, default=0, this method disabled)<br>
<var>sigma2</var>
- given noise value at second scale level frequencies (float>0, default=<var>sigma</var>)<br>
<var>sigma3</var>
- given noise value at third scale leveä frequencies (float>0, default=<var>sigma</var>)<br>
<var>sigma4</var>
- given noise value at lowest frequencies (float>0, default=<var>sigma</var>)<br>
<var>degrid</var>
- weighting window compensation degree for grid decreasing (float>0, default=1.0)<br>
<var>dehalo</var>
- halo removal strength (float>0, default=0.0)<br>
<var>hr</var>
- halo approximate radius (float>0, default=2.0)<br>
<var>ht</var>
- halo approximate threshold (float>0, default=50.0)<br>
<var>ncpu</var>
- max number of CPU threads to use for FFT calculation (int>0, default=1)<br>
</p>
<p>The most important parameter is a given noise value <var>sigma</var>.
You must use reasonable value based on a priori info for current clip.<br>
Typical value for digital sources is about 1.5 to 2.5, and about 3 and above for analog captured video.<br>
The good value of overlapping size is about quarter to half of block size.
The half (ow=bw/2, oh=bh/2) is the best, but slower.<br>
Good values of block size are about 32 to 64.</p>
<p>Filter can produce some grid artifacts for large <var>sigma</var>
and small <var>bw, bh, ow, oh</var> or small relative overlap sizes, especially with sharpening enabled.<br>
Filter can produce ghosting for large <var>sigma</var> (and <var>kratio</var>) for 3D modes.</p>
<p>Weighting window <var>wintype</var>=0 can produce the worst grid artifactes,
window type <var>wintype</var>=2 do not produce grid artifactes, but can produce some ringing,
<var>wintype</var>=1 is intermediate case.</p>
<p>I recommend to use the weighting window compensation with <var>degrid</var>=1 (since version 1.8),
it improves the denoise quality and decreases the grid artifactes, especially for 2D.</p>
<p>Sharpening will result in worse clip compression.</>
</p>
<p>In order to use noise pattern method in place of ordinary (blind) method you must: <br>
Firstly switch show mode <var>pshow</var>=true, and set some non-zero value <var>pfactor</var>=1.0. <br>
Then select frame number and some block position,
thus the block shown must not contain any objects beside typical noise pattern.<br>
The switch off show mode <var>pshow</var>=false, <br>
and set noise reduction strength, recomended value <var>pfactor</var>= 0.5 to 1.0.<br>
The best windows type for this method is <var>wintype</var>=2.<br>
The <var>sigma</var> and <var>beta</var> parameters are not used in this denoising method,
but you can use this method in show mode <var>pshow</var>=true
to estimate <var>sigma</var> value for ordinary denoising method
(it is not strictly the same, but similar value).</p>
<p>There is also composite method, when you can directly set different noise values
<var>sigma</var> for highest and <var>sigma2, sigma3, sigma4</var> for lower frequencies.
The pattern coefficients will be created internally from these sigmas values by interpolation.
Set pfactor=0 for this method (internally it will be =1).</p>
<h3>Features and limitations</h3>
<ol>
<li>Filter works only in YV12 or YUY2 color format.</li>
<li>Only specified single color plane may be processed (Y, U or V).
Since v1.8.4 it is possible to process several (all) color planes.</li>
<li>Since v1.3 it works with both progressive and interlaced clips. </li>
<li>Tested with Avisynth v2.55, v2.56.</li>
<li>Filter uses fast external FFTW library version 3 (<a href="http://www.fftw.org">http://www.fftw.org</a>)<br>
as Windows binary DLL (compiled with gcc under MinGW by Alessio Massaro),
which support for threads and have AMD K7 (3dNow!) support in addition to SSE/SSE2.<br>
It may be downloaded from
<a href="ftp://ftp.fftw.org/pub/fftw/fftw3win32mingw.zip">ftp://ftp.fftw.org/pub/fftw/fftw3win32mingw.zip</a><br>
<font color="#ff0000">You MUST
put FFTW3.DLL file from this package (not fft3dfilter.dll) to some directory in path (for example, C:\WINNT\SYSTEM32).<br>
Filter will NOT work without it!</font></li>
<li>FFTW works most efficiently for arrays whose size (<var>bw, bh</var>)
can be factored into small primes 2, 3, 5, and 7 (and one 11, 13), and
otherwise it uses a slower general-purpose routine.</li>
<li>First versions were really slooow! But recent
versions are simple slow :-).<br>
Algorithm is improved and assembler 3DNow! and SSE instruction are used for some modes</li>
<li>Algorithm is optimized by speed for forward sequential frames access only.</li>
<li>The sharpening method is experimental, however is quite good since v1.1 (and v1.7).</li>
<li>The noise pattern method is experimental too.</li>
<li><var>degrid</var> option is not implemented for Kalman filter.</li>
<li>For noisy video it is useful to use median prefilter (for example DeGrainMedian)
before FFT3Dfilter.</li>
<li>Multithread mode ncpu>1 is almost not tested (I do not have core duo), try to use ncpu=2 if you have.</li>
</ol>
<h3>Simple sample scripts</h3>
<h4>To denoise progressive or fieldbased (separated) clip luma:</h4>
<pre>Avisource("input.avi")
loadplugin("c:\plugins\fft3dfilter.dll")
FFT3DFilter(sigma=3)</pre>
<p>Of course, you must replace "c:\plugins" by your plugins folder path (and set your video pathname too :).
You can skip LoadPlugin command if you put fft3dfilter.dll file to autoloading plugins folder
(C:\Program Files\Avisynth 2.5\plugins). </p>
<h4>To sharpen only:</h4>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
FFT3DFilter(bt=-1, sharpen=0.7)</pre>
<h4>To denoise and slightly sharpen the interlaced clip:</h4>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
FFT3DFilter(sigma=2, sharpen=0.3, interlaced=true)</pre>
<h4>Some "best settings", slower processing</h4>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
fft3dfilter(sigma=1.5, bt=5, bw=32, bh=32, ow=16, oh=16, sharpen=0.4)
</pre>
<h4>To denoise all color planes (both luma and chroma)</h4>
<p>Note: The processing speed will be decreased more,
so you can consider other (simpler and faster) filters using for chroma denosing
(<code>CNR2</code>, <code>DeGrainMedian</code>, etc).</p>
<h4>To denoise all color planes with same settings</h4>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
fft3dfilter(sigma=2, plane=4)
</pre>
<h4>To denoise luma and chroma with different settings</h4>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
fft3dfilter(sigma=1.5, plane=0)
fft3dfilter(sigma=3, plane=3)
</pre>
<h4>Other way to denoise all color planes (script by AI)</h4>
<p>It was important in old versioms if you use motion compensation</p>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
YToUV(fft3dfilter(sigma=3, plane=1).UToY,\
fft3dfilter(sigma=3, plane=2).VToY,\
fft3dfilter(sigma=2, plane=0))
</pre>
<h4>To decrease the existing horizontal halo only</h4>
<pre>Avisource("input.avi")
loadplugin("fft3dfilter.dll")
fft3dfilter(bt=-1, plane=0, dehalo=1.0, hr=2.0, ht=50, svr=0)
</pre>
<h3>More info</h3>
<p>The algorithm of Wiener filter is based on the 3D IIR/3D Frequency Domain Filter from:<br>
MOTION PICTURE RESTORATION. by Anil Christopher Kokaram. Ph.D. Thesis. May 1993.<br>
<a href="http://www.mee.tcd.ie/%7Eack/papers/a4ackphd.ps.gz">http://www.mee.tcd.ie/~ack/papers/a4ackphd.ps.gz</a>
in postscript format (use GSview with Ghostscript to read).<br>
Search more info about Wiener and Kalman filters in special literature
or Googles.</p>
<p>Filter discussion is at DOOM9 Avisynth forum, thread
"New very slow FFT denoiser:"<br>
<a href="http://forum.doom9.org/showthread.php?t=85790">http://forum.doom9.org/showthread.php?t=85790</a></p>
<p>There is also <code>FFT3DGPU</code> plugin (by tsp) with similar
algo, but using modern videocard processor for FFT.<br>
<b>Tsp</b> ported many fft3dfilter features.
See <a href="http://forum.doom9.org/showthread.php?t=89941">http://forum.doom9.org/showthread.php?t=89941</a>.</p>
<h3>License</h3>
<p>This program is free software; you can redistribute it and/or modify<br>
it under the terms of the GNU General Public License version 2 as published by<br>
the Free Software Foundation.<br>
<br>
This program is distributed in the hope that it will be useful,<br>
but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
GNU General Public License for more details.<br>
<br>
You should have received a copy of the GNU General Public License<br>
along with this program; if not, write to the Free Software<br>
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. </p>
Documentation is distributed under <a href="http://creativecommons.org/licenses/by-sa/3.0/">CreativeCommons BY-SA 3.0 license.</a>
<p>Please consider to make some donation.</p>
<h3>Version changes:</h3>
<ul>
<li>Version 0.1, November 23, 2004 - initial experimental.</li>
<li>Version 0.2, December 3, 2004 - added <var>beta</var>
parameter (noise margin).</li>
<li>Version 0.3, December 21, 2004 - added block temporal size
parameter <var>bt</var> (was fixed =3 internally).</li>
<li>Version 0.4, January 16, 2005 - optimized algorithm for speed for <var>bt</var>=2
(now default), <br>
mode <var>bt</var>=3 is temporary disabled,<br>
changed default bw=bh=32, <br>
filtered region now is centered.</li>
<li>Version 0.5, January 28, 2005 - added YUY2 support.</li>
<li>Version 0.6, January 29, 2005 - added Kalman filter mode for <var>bt</var>=0,
and <var>ratio</var> parameter</li>
<li>Version 0.7, January 30, 2005 - re-enabled Wiener
filter mode with 3 frames (<var>bt</var>=3);<br>
first and last frame in Wiener 3D mode now filtered (as 2D)</li>
<li>Version 0.8, February 5, 2005 - added experimental <var>sharpen</var>
option and <var>bt</var>=-1</li>
<li>Version 0.8.1, February 6, 2005 - skip sharpening of the
lowest frequencies to prevent parasitic lines near borders</li>
<li>Version 0.8.2, February 15, 2005 - added internal buffer to
process whole frame (borders included) for any<var> bw, bh</var> (a little slower)</li>
<li>Version 0.8.3, March 16, 2005 - fixed sharpen mode (<var>bt</var>=-1) for YUY2</li>
<li>Version 0.8.4, April 3, 2005 - (not public) - delayed FFTW3.DLL loading</li>
<li>Version 0.9, April 4, 2005 - variable overlapping size <var>ow, oh</var> for
more fast processing,<br>
half overlapping <var>ow=bw/4, oh=bh/4</var> is now default,
while full overlapping <var>ow=bw/2, oh=bh/2</var> was used in all older versions.</li>
<li>Version 0.9.1, April 7, 2005 - some assembler 3DNow! speed optimization
for mode <var>bt</var>=3.</li>
<li>Version 0.9.2, April 10, 2005 - some assembler 3DNow! speed
optimization for mode <var>bt</var>=0,<br>
option <var>measure</var>=true is now default as more fast.</li>
<li>Version 0.9.3 - April 24,2005 - fixed bug for <var>bt</var>=2 with
3DNow! (thanks to <b>kxproject</b> for report);<br>
mode <var>bt</var>=3 now default;<br>
sharpen mode now is horizontal only and modified (still experimental)</li>
<li>Version 1.0 - June 27, 2005 - improved frame edges processing (by padding);<br>
added <var>svr</var> parameter to control vertical sharpening<br>
</li>
<li>Version 1.0.1 - July 05, 2005 - fixed bug for chroma planes for YUY2 (introduced in v.1.0)
</li>
<li>Version 1.1 - July 8, 2005 - improved sharpening method to prevent grid artifactes and to limit sharpening
(added parameters <var>smin, smax</var>); <br>
renamed parameter <var>ratio</var> to <var>kratio</var>.
</li>
<li>Version 1.2 - July 12, 2005 - changed default block sizes <var>bw=bh=48</var>
and overlap sizes <var>ow=bw/3, oh=bh/3</var>
to finally prevent grid artifactes in sharpen mode (but speed is decreased).
</li>
<li>Version 1.3 - July 20, 2005 - added <var>interlaced</var> parameter for interlaced video processing.
</li>
<li>Version 1.3.1 - July 21, 2005 - fixed bug for YUY2 interlaced.
</li>
<li>Version 1.4 - July 23, 2005 - corrected neutral level for chroma processing, <br>
changed weighting window type with new <var>wintype</var> parameter
</li>
<li>Version 1.5 - July 26, 2005 - added noise pattern method
and its parameters <var>pframe, px, py, pshow, pcutoff, pfactor</var>
</li>
<li>Version 1.5.1 - July 29, 2005 - fixed bug with <var>pshow</var>
</li>
<li>Version 1.5.2 - July 31, 2005 - fixed bug with Kalman mode (<var>bt</var>=0) for Athlon (introduced in v1.5)
</li>
<li>Version 1.6 - August 03, 2005 - added mode <var>bt</var>=4; added optimized SSE version for <var>bt</var>=2,3;
added <var>sigma2,sigma3,sigma4</var> parameters for composite method.
</li>
<li>Version 1.7 - August 29, 2005 - changed sharpening to Gaussian filter with new parameter <var>scutoff</var>;<br>
added SSE version for sharpen mode and pattern modes <var>bt</var>=2,3 ;<br>
restuctured and released code under GNU GPL v.2.
</li>
<li>Version 1.8 - October 3, 2005 - improved internal FFT cache; added <var>degrid=1.0</var> parameter as default;
changed default <var>wintype=0</var>.
</li>
<li>Version 1.8.1 - October 26, 2005 - fixed bug with <var>sharpen>0</var> AND <var>degrid>0</var> for <var>bt</var> not equal 1.
(Thanks to <b>Wull</b> for report).
</li>
<li>Version 1.8.2 - 04 November 2005 - really set default <var>degrid</var>=1.0 (was = 0 accidentally).
</li>
<li>Version 1.8.3 - 28 November 2005 - fixed bug with first frame for Kalman YV12 (thanks to <b>tsp</b>).
</li>
<li>Version 1.8.4 - 29 November 2005 - added multiplane modes plane=3,4.
</li>
<li>Version 1.8.5 - 4 December 2005 - fixed bug with memory leakage (thanks to <b>tsp</b>).
</li>
<li>Version 1.9 - 25 April 2006 - added <var>dehalo</var> options; corrected sharpen mode;
re-enabled SSE optimization for degrid=0; added SSE optimization for bt=3,-1 with degrid>0
(faster by 15%)
</li>
<li>Version 1.9.1 - 10 May 2006 - added SSE optimization for bt=4 with degrid>0
(faster by 30%).
</li>
<li>Version 1.9.2 - 11 september 2006 - changed default bw=bh=32; added mode bt=5
</li>
<li>Version 2.0.0 - November 29, 2006 - added experimental internal motion compensation mode;
window reorganized; internal multithread support (Core duo, trio, quadro et cetera)
</li>
<li>Version 2.1.0 - January 17, 2007 - removed (temporary ?) experimental internal motion compensation mode.
</li>
<li>Version 2.1.1 - February 20, 2007 - fixed bug with bw not mod 4 (restored v1.9.2 method,
thanks to JKinG for report).
</li>
</ul>
<h3>
<a href="fft3dfilter211.zip">Download FFT3DFilter version 2.1.1</a><br>
</h3>
<a href="../">Return to main page</a>
</body>
</html>