View Full Version : New very slow FFT denoiser
Pages :
1
2
3
4
[
5]
6
7
8
9
10
11
12
13
14
15
16
17
DarkFoon
15th March 2005, 03:27
if you remember, I got geforce2 MX400, I can't do squat. T_T
Fizick
15th March 2005, 06:12
DarkFoon,
The first thing in my "to do" list is full rewrote to implement fixed overlapped size (for speed increasing). But it will take some time.
What is variable sigma? per block or per frame?
The are Authothreshold in Vaguedenoiser, for example.
DarkFoon
15th March 2005, 07:00
Though it may slow things down considerably, I was thinking variable sigma per block. Per frame would be too inaccurate and result in worse quality.
Maybe trying out the autothresholder from VagueDenoiser would be good first test of the idea.
[Edit]
Maybe the autothresholder's values could be normalized(?) or averaged or scaled to be relative to the user set value. For example, if the user-set value is 3, and the autothresholder wants to use a sigma of 10 for a block, it would be averaged (or normalized, or whatever) to a more reasonable value like 5, so it stays relative to the user value (it is still below it, just not so far off). Or lets say the autothresholder wants to use a value of .25, but average that against the user value, and the result is 2.25, a better value. Basically, the values are "gaussian distributed" (I stole that from the BlockBuster README) around a user value. Meaning, sure a 10 could be used, but it would be once in a thousand. much more likely, however, would be a 2 or a 4 (still assuming that the user value is 3).
This all assumes that the autothresholder would be turned on with a boolean argument. Like auto=true/false.
Of course, you could ignore all this too, because it doesn't make much sense to me, and I bet it doesn't make much sense to you either. (I'm tired :) )
I hope it made sense, though. In some way.
Backwoods
15th March 2005, 07:03
Or have an option for "per frame" or "per block".
Fizick
16th March 2005, 00:23
leonid_makarovsky,
Version 0.8.3, March 16, 2005 - fixed sharpen mode (bt=-1) for YUY2.
DarkFoon,
Not now. May be later. May be not. There are no good algo to estimate noise.
LordIntruder
19th March 2005, 06:04
Hi,
I would like to know if adding "measure=true" help to improve the general encoding speed?
Thanks. :)
DarkFoon
19th March 2005, 18:22
yes it does.
measure=true basically gives the FFT the time it needs to find the optimum equation (or operation, something like that) for your bh/bw and CPU. turning it off means that when you load your script, it loads faster, but overall it is less efficient than if you had measure=true. It just slows down (about 1-2 seconds on a PIII 800Mhz) how fast your script initially loads. (when you drag it into VirtualDub, for example, the video wont display for a second or two)
This has no effect on the filter's ability to filter, and it has no effect on the quality of video, it just makes it faster legally
Hope that helps (kinda a lot there... sorry)
LordIntruder
21st March 2005, 04:37
Hi,
Thanks for the answer :)
Well I encoded a 10000 video frames to see what gain I could expect and with this parameter for FFT:
'FFT3DFilter(sigma=3, bt=3, measure=true)'
Without FFT:
1st Pass = 13 min
2nd Pass = 37 min
FFT Measure True:
1st Pass = 53 min
2nd Pass = 80 min
FFT Measure OFF:
1st Pass = 59 min
2nd Pass = 82 min
So the impact of 'measure=true' option is light but on a a full DVD encode, the gain should be (for my machine a 2400+ with 1Gb Ram) roughly 1 hour minimum for the first pass (and the 1st pass should take around 11 hours :scared: ).
In my example I selected the heaviest solution with latest XviD beta: Qpel, GMC, VHQ4, VHQ for bframes, Chroma motion, etc...
On the few short tests I did, what surprises me is the compression gain you get with this filter. I need to encode a full movie with and without this filter to confirm it but my first feelings are amazing. Thanks to this filter I could rise the resolution on difficult movies to encode. I currently have a movie (a bit grainy) that I encoded in 640 x 464 and the result is very good, after a compression test using FFT it appears I could encode this movie in 720 x 564 with similar quality. I will see that this week. Of course the drawback is the awful slowness of this filter but I tested the GPU version and this one is amazingly fast. ;)
Thanks and cheers for the excellent work on this filter. :)
DarkFoon
21st March 2005, 08:49
@Fizick
since avisynth filters are open source, isnt is possible that you could take the algorithm from PeachSmoother used to estimate noise? That one is very good. (actually, before FFT3d, that was my temporal filter of choice)
Just a thought that occured to me.
@LoadIntruder
I can't wait for your full results. But thanks for the ones you have posted. They are a welcome justification.
Wilbert
21st March 2005, 10:38
Peach is not GPL :(
DarkFoon
21st March 2005, 10:43
well don't that beat all (i.e. damn!)
I wonder why, though...
Boulder
21st March 2005, 14:21
Has anybody been able to contact Lindsey Dubb? I remember that someone was looking for the sources and Richard Berg (who ported the filter to AVS2.5 and does have them) said he would ask Lindsey if they could be released. IIRC Lindsey had earlier said that if he disappeared for a long time, they should be made available.
DarkFoon
27th March 2005, 09:09
@fizick
I noticed a strange problem with FFT3D when filtering anime with seperatefields() before it.
The lines in the anime are made really jaggedy and look terrible. Is there anyway to put a special "fields mode" into FFT3d, so that it compensates for field jitter (which is what I suspect is the problem)
What I had in mind was that it would shift the even field up one line, so that it matches the odd field on the time axis.
an example:
normal operation with seperate fields
o
e
o o e
e --fields to frames--> o e [[FFT3D]]
o o e
e o e
o --time axis-->
e
Thus, the lines (as in the drawings in the frame, not the interlacing) appear to 'jitter' to FFT3d when it compares the fields, so it destroys them, trying to remove noise.
Operation with seperate fields and compensation
o e
o e o e
--fields to frames--> o e [[FFT3D]]
o e o e
o ^
o e e
^ --time axis-->
... hmmm.
well that example sucks, but do you know what I am saying? I could take screenshots if that would help. (I'm really bad at describing this kind of thing. It makes sense in my mind)
Let me know if I need to clarify.
Backwoods
27th March 2005, 20:20
I've noticed some jaggies on live action video with SeparateFields() also.
Fizick
27th March 2005, 22:10
http://www.avisynth.org/InterlacedSmoothing
But is your anime really interlaced?
I never see any anime :)
DarkFoon
27th March 2005, 22:36
Thanks for the link Fizick, it was exactly what I had in mind! :)
But it makes the filter run slower. And it looks like less noise is removed with the function... :(
Here are some examples!
With plain Seperatefields()
http://kizawa.virusclan.org/ex/ex2.png
Look closely at the diagonal lines on the suit of armor. (The more diagonal the line, the worse the jaggies are)
With Interlaced Function
http://kizawa.virusclan.org/ex/ex1.png
see? No jaggies at all!
I don't feel like posting the script right now. I will if somebody asks me to, however.
Yes, it is interlaced, because its a TV capture.
Leak
28th March 2005, 01:32
Originally posted by DarkFoon
Yes, it is interlaced, because its a TV capture.
No, it's interlaced because it was telecined from 23.976 to 29.97 FPS.
If you record something straight from TV here in PAL land and it was a movie to begin with it's progressive...
Even if it were interlaced, the non-moving parts would still look progressive, after all - and I don't think Ed and Al were moving much in that scene...
np: Rhythm & Sound with Willi Williams - See Mi Yah (See Mi Yah)
DarkFoon
29th March 2005, 04:54
@Leak
Alas, I live in the land of NTSC, yes there weren't moving much in that scene, nonetheless, the video was captured interlaced and when Al bent his arm down about 15 frames after the example, there is interlacing. If I don't use some sorta of field splitting and just FFT3D on the image, it really messes up the image. It blends the lines and such.
I don't like running IVTC on my anime, it takes too long to get it perfect (like weeding out frames detcted wrong). If it would work the way I want it to, I would run Telecine(), then FFT3D(), and finally Weave() to keep my interlacing, but that wouldn't always work. I don't think.. maybe I should try it... hmmm.
Gotta go, Gonna try that now.. ;)
Fizick
4th April 2005, 21:03
So, I at last release version 0.9, April 4, 2005 - variable overlaping size ow, oh for more fast processing
Doubled overlap sizes must be not great than block sizes
In the all previous version I used fixed overlap size = (block size)/2
Now default is (block size)/4 as more fast.
http://www.avisynth.org/fizick/fft3dfilter/overlap.gif
Try!
leonid_makarovsky
4th April 2005, 21:07
A question. I have a clip of size 704x576. The output clip, however, should be 352x576. I would like to run it through FFT denoiser to donoise and sharpen. What's the best way?
PixdieDust()
fft3dfilter(sigma = 2, bt = 3, sharpen = 1.0)
LanczosResize(352, 576)
Or would it be better:
PixdieDust()
LanczosResize(352, 576)
fft3dfilter(sigma = 2, bt = 3, sharpen = 1.0)
Thanks.
--Leonid
DarkFoon
4th April 2005, 21:20
@Leonid
Generally speaking with video, you want to have as many pixel to manipulate.
The first way you described would result in higher quality, but slower processing.
The second way would result in faster processing, but lower quality.
It's a question of logic: the first way, the filter has more pixels to work with, so it can remove noise without destroying some of the finer details. But in the second example, the finer details are made even smaller also the noise is too, so when the filter passes over the smaller frame, it will be more likely to remove the fine details along with the noise.
Can't I ever make a simple explanation? Prolly not ;)
Fizick
4th April 2005, 21:28
Leonid,
you mus find it yourself and say to us :)
Probably in last case you must use bw<bh
But why you use Dust, and why you do not use motion compensated denoising?
( or I forget to recommend previuosly ...?)
motion=Depanestimate()
depaninterleave(motion)
fft3dfilter(sigma = 2, bt = 3, sharpen = 1.0)
selectevery(3,1)
EDIT: Must be:
motion=Depanestimate()
depaninterleave(data=motion)
fft3dfilter(sigma = 2, bt = 3, sharpen = 1.0)
selectevery(3,1)
leonid_makarovsky
4th April 2005, 21:28
Originally posted by DarkFoon
@Leonid
Generally speaking with video, you want to have as many pixel to manipulate.
The first way you described would result in higher quality, but slower processing.
Well, the biggest concern here is not a processing time but sharpness. It is better to apply sharpness at 352x576 rather than 704x576 if the final clip is going to be 352x576. As far as I understand denoising and sharpness work together in fft3dfilter so I can't separate them. I could have done
fft3dfilter(bt = 3, sharpness = 0)
Resize(352, 576)
fft3dfilter(bt = -1, sharpness = 1.0)
but then sharpening and denoising are not connected here.
--Leonid
leonid_makarovsky
4th April 2005, 21:32
Originally posted by Fizick
But why you use Dust, and why you do not use motion compensated denoising?
( or I forget to recommend previuosly ...?)
motion=Depanestimate()
depaninterleave(motion)
fft3dfilter(sigma = 2, bt = 3, sharpen = 1.0)
selectevery(3,1)
I've never used/heard of Depanestimate and depaninterleave. My clips are recorded from VHS which are pretty noisy. I found that PixieDust followed by fft3dfilter remove noise very well. I guess I will try depaninterleave.
--Leonid
DarkFoon
4th April 2005, 22:38
@Leonid
Lanzcosresize() sharpens the image a bit on its own.
I can't really say if sharpening before resize or after is better. I'd say do it before so that denoising looks better, and so it sharpens the smaller details so that when the resizer resizes the image, the smaller details aren't ignored, or left out of the resize.
DarkFoon
6th April 2005, 01:29
@Fizick
I am trying to do something with my video, and I'm probably going about it the hard way. I am trying to combine this:
Posted by Fizick
motion=Depanestimate()
depaninterleave(motion)
fft3dfilter(sigma = 2, bt = 3, sharpen = 1.0)
selectevery(3,1)
and this
function ApplyInterlacedFilter(clip v1, string filter) {
v2 = separatefields(v1)
selecteven(v2)
even = Eval(filter)
selectodd(v2)
odd = Eval(filter)
interleave(even,odd)
return weave()
}
Is it possible to do motion compensated denoising of an interlaced clip?
My script so far looks like this:
loadplugin("C:\plugins\dgdecode.dll")
loadplugin("C:\plugins\fft3dfilter.dll")
loadplugin("C:\plugins\depan.dll")
function ApplyInterlacedFilter(clip v1, string filter) {
v2 = separatefields(v1)
selecteven(v2)
even = Eval(filter)
selectodd(v2)
odd = Eval(filter)
interleave(even,odd)
return weave()
}
mpeg2source("fma3.d2v",cpu=0,idct=4,ipp=true,moderate_h=20 ,moderate_v=40 ,showq=false,fastmc=false,cpu2=" ")
motion = ApplyInterlacedFilter(last, "depanestimate()")
applyinterlacedfilter(last, "depaninterleave(motion)")
fft3dfilter(sigma=3, plane=0, bt=2, bh=48, bw=48, ratio=1, sharpen=3, measure=true)
fft3dfilter(sigma=7, plane=1, bt=3, bh=32, bw=32, ratio=1, sharpen=0, measure=true)
fft3dfilter(sigma=7, plane=2, bt=3, bh=32, bw=32, ratio=1, sharpen=0, measure=true)
selectevery(3,1)
Only, the problem is, when I have this line: applyinterlacedfilter(last, "depaninterleave(motion)")
VirtualDub tells me upon opening "I don't know what 'motion' is" and gives me the line number.
And if I change that line to: depaninterleave(motion), Vdub says upon opening the script "Unrecognized exception" and gives me the line number.
If there is an easier way, or just any way to get this to work, I'd appreciate it!
kthxbye! :)
Fizick
6th April 2005, 05:13
DarkFoon,
1. I am not script writer, but plugin writer only :)
2. My Depaninterleave recomendation was not to you but to Leonid :D
3. For ordinary (not anime) sources, depaninterleave can be used without selectodd-even, since Depan will make optimal field compensation.
I did not use selectodd yet this way.
4. you may try other methods of fields separation:
- bob-deinterlace (ask scharfis_brain);
- unfoldfields.
5. Do you see my new version 0.9 ? Some time ago you ask me for null overlap.
Anybody can post speed tests with new option?
And what about optimal overlap size and visual quality?
May be i will fix overlap size in future version for speed optimize.
And probably i try add Athlon 3dNow optimization too.
DarkFoon
6th April 2005, 19:55
Indeed, I did see your version 0.9. I am using it right now.
I haven't paid any attention to speed, but I have noticed that it removes more noise than it used to. that pleases me greatly!!!
I think I may have set my overlap=0.5*bw/bh but, I haven't been paying attention to speed....
Anyways! Keep up the good work!
Have you considered using the multithreaded version of fftw(maybe as an option). It should be very easy to modify the code to use it and with all the upcomming multicore processors it could be a good investment.
Fizick
6th April 2005, 21:55
Now released Version 0.9.1, April 7, 2005 - some assembler 3DNow! speed optimization for mode bt=3
Athlon rules!
tsp,
i will try answer later.
vinetu
6th April 2005, 21:59
Originally posted by Fizick
Anybody can post speed tests with new option?
Sure! :)
P4 2.4GHz (133MHz FSB,512kB cache),1GbRAM,Radeon 9600
source is PAL 720x576 progresive - "real live" video ,uncompressed YV12.avi
the target is the same format -VirtualDub in "direct stream mode".
FFT3DFilter v. 0.90 :
1. FFT3DFilter(sigma=3.0, bt=3, bh=64, bw=64, ow=0, oh=0) speed is 18.20 fps,compressed later to xvid(quant2) to 6,979,864 bytes
2. FFT3DFilter(sigma=3.0, bt=3, bh=64, bw=64,ow=16,oh=16) speed is 11.38 fps,compressed later to xvid(quant2) to 6,342,656 bytes
3. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=0, oh=0) speed is 19.50 fps,compressed later to xvid(quant2) to 7,098,800 bytes
4. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=8, oh=8) speed is 12.40 fps,compressed later to xvid(quant2) to 6,399,584 bytes
FFT3DFilter v. 0.83 :
1. FFT3DFilter(sigma=3.0, bt=3, bh=64, bw=64) speed is 4.33 fps,compressed later to xvid(quant2) to 5,865,498 bytes
2. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32) speed is 4.40 fps,compressed later to xvid(quant2) to 5,887,002 bytes
...but then I decide to repeat the tests with v.0.90 and... surprisingly I get lower speeds (even after a reboot):
1. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=8, oh=8) speed is 8.53 fps,compressed later to xvid(quant2) to 6,399,584 bytes
2. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=0, oh=0) speed is 16.05 fps,compressed later to xvid(quant2) to 7,098,800 bytes
I'll investigate that later ...Still I'm very happy with your optimizations on the latest version!
However I'll keep the v. 0.83 as it seems to help compressibility better...
About Quality-all I can say is that - It's very hard to find visual differences between original and filtered files and I've never
did see any artifacts with FFT3DFilter nor FFT3DGPU...probably I need new monitor and a glasses ;)!
Thank You Fizick!
P.S. It's time to change the title from "New very slow FFT denoiser" to "New not even slow FFT denoiser" or so :)
Fizick
6th April 2005, 22:09
vinetu,
thanks fo tests,
but why However I'll keep the v. 0.83 as it seems to help compressibility better...
if you can set overlap sizes to half of bw,bh in new version,
and you must get the same result as v. 0.8.3? Can you check it?
vinetu
6th April 2005, 22:22
Originally posted by Fizick
but why
if you can set overlap sizes to half of bw,bh in new version,
and you must get the same result as v. 0.8.3? Can you check it? [/B]
Yes You are right!
FFT3DFilter v. 0.91 :
FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=16, oh=16) speed is 5.35 fps,compressed later to xvid(quant2) to 5,889,762 bytes
the same with version 0.83 was 5,887,002 bytes
a quick test with old settings (for compatibility)
FFT3DFilter v. 0.91 :
1. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=0, oh=0) speed is 16.05 fps,compressed later to xvid(quant2) to 7,098,800 bytes
2. FFT3DFilter(sigma=3.0, bt=3, bh=32, bw=32, ow=8, oh=8) speed is 9.75 fps,compressed later to xvid(quant2) to 6,399,584 bytes
P4 2.4GHz without multithreading
Thank You!!!
vinetu
7th April 2005, 00:45
After a 12-13 reboots I found very interesting dependence between speed of the filter and his settings.
If after a fresh reboot ,the first thing is "FFT3DFilter(sigma=3.0,bt=3,ow=0,oh=0)"
then I get 16.05 fps for the first "Save as" and 21.00 fps for every next "Save as" (same avs source->same target avi).
Next running "FFT3DFilter(sigma=3.0,bt=3,ow=8,oh=8)" I get 9.75fps for the first "Save as" and 11.38fps for every next "Save as".
Obviously something is cached ,but I doubth it's a just the avi file ...
because if I reboot again,then first run "FFT3DFilter(sigma=3.0,bt=3,ow=8,oh=8)" I'll get 8.5fps and for the every next "Save as"-9.75fps.
And if I run then "FFT3DFilter(sigma=3.0,bt=3,ow=0,oh=0)" I'll get 16.05fps(and not 21) for the first and every next "Save as"
So the "ow=0,oh=0" setings are somehow "The Right Initialization Patern" for my intel inside scrap :) !
Next tests will include 3DMark2005 results :) ...
About "testbed": the source avi is located on 120 Gb Maxtor,the target avi -on a 80 Gb Maxtor,file transfer between HDDs is ~ 40MB/sec.
VirtualDub is in "direct stream mode".The avs script is:
---------------------------------
LoadFilter("fft3dfilter.dll")
AviSource("YV12uncompressed.avi")
fft3dfilter(....)
---------------------------------
Bye
Fizick
7th April 2005, 05:08
vinetu,
thanks for interest report!
Now i see, that full overlap mode is faster now too.
It is due to other compiler settings (/QIFist flag).
How long was your test clip (number of frames, or file size).
And what is "YV12uncompressed" ?:confused:
Anybody with Athlon here (to compare v.0.8.3, 0.9, and 0.9.1 speed and quality?
Backwoods
7th April 2005, 07:23
Originally posted by Fizick
And what is "YV12uncompressed" ?:confused:?
I think just the name of his AVI file.
1000 frames 720x576 clip:
0.83:
fft3dfilter(a,bt=3,sigma=3) 4.6 fps
0.9.1
fft3dfilter(a,bt=3,sigma=3,oh=16,ow=16) 5.7 fps
fft3dfilter(a,bt=3,sigma=3)12.2 fps
fft3dfilter(a,bt=3,sigma=3,oh=0,ow=0) 19.2 fps
this is on an athlon xp 2400 MHz 1 GB ram(200 MHz).
so ~25% speed increase. Not bad
vinetu
7th April 2005, 09:12
Originally posted by Fizick
How long was your test clip (number of frames, or file size).
And what is "YV12uncompressed" ?:confused:
Clip is 273 frames long, 161Mb in size and 720x576@25fps.
"YV12uncompressed" meen that the clip is uncompressed and with the
collor space YV12.
It's produced that way - open an avs script wich end with "ConvertToYV12()" in VDub(direct stream mode) and Save the avi.
The stream of that avi is constant at ~15Mb/s
Bye
Fizick
10th April 2005, 16:25
New Version 0.9.2, April 10, 2005 - some assembler 3DNow! speed optimization for mode bt=0 (Kalman),
option measure=true is now default as more fast.
vinetu
10th April 2005, 20:06
Hi Fizick!
It seems my P4 is 3DNow capable too :)
here are the fastests results from running the avs 3 times
1.no fft filtering -> 91.05 fps
2.fft3dfilter 0.91 -> 16.95 fps
3.fft3dfilter 0.92 -> 19.23 fps
the avs:
--------------------
LoadPlugin("c:\dlls\FFT3DFilter.dll")
AVISource("1000frames_uncompressed-YV12_720x576@25fps_size-593MB.avi")
FFT3DFilter(sigma=3.0, bt=0, bh=32, bw=32, ow=0, oh=0,measure=true) #"Kalman mode"
--------------------
...intel P4 CPU at 2.4GHz.
At 2.9 GHz (the limit for my old Nordwood) I get 23.25 fps !!!
Thank You!
Fizick
10th April 2005, 21:38
it is not 3Dnow, but some code reorganization, and Bitblt function for arrays copying.
But true SSE2 optimization is out of my possibilities.
DarkFoon
11th April 2005, 00:43
if you dont mind my asking, why is SSE2 out of your possibilities? Did Intel make it that difficult to implement?
Fizick
11th April 2005, 05:02
DarkFoon,
try yourself! :)
I have AthlonXP at home.
iceburger
20th April 2005, 11:05
First of all thanks for this amazing filter- unbelievable results on one of my pal-ntsc restoration- this is the noise monster- moved all my quantizers down by one for tha same bitrate...as for the speed, oh well quality cost time (cce took 6 h. per pass, with this and resize, for a 1 CD DVDrip back to a whole DVD5 with DD2.0 , crazy, I know, but it's for a friend...results though...silky smooth both motion and backgrounds, all xvid artifacts gone, in one scene it recovered a reflection of a glass vase- very nice transitions- no blotchy areas, and very slight loss of detail...TV looks even better).
Just today I noticed the new version, and I was little suspicious since filesize is the same... I don't know how you do it Fizick, but you are something:devil:
First difference I noticed when I scrolled in VD- faaast! I decided to go heavy to see how good it is. I got ATA100, so no "uncompressed" direct stream for me- my little CPU stress test on my athlonXP@2300: Lost ep.20(960 x 528 1.818, 23.976 FPS, 1931 kb/s) first 500 frames, on Quant=2 with HVS Best, VHQ=4(b frames too), chroma motion on.
Test 1 0.8.3 FFT3DFilter(plane=0,sigma=2,bt=3,bw=48,bh=48,sharpen=0.5,measure=true)
Test 2 0.9.2 ow=24, oh=24 - if I understood correctly, this should be same algo as 0.8.3
Test 3 0.9.2 ow=16, oh=16
Results:
Test 1: size:13,126 KB 3:05 min ...staggering 2.7 fps
Test 2: size:13,148 KB 2:41 min... speed improvement of 15% - 3.1 fps
Test 3: size:13,658 KB 1:58 min- 4.23-got 1:47 with not fixed quant 4.62 fps...56-71% improvement over 0.8.3:sly: with 3% size trade-off:sly:
What's next :confused: I hope you make some sort of visualiser, or color coding of sort, so even more people see the difference. Literally. Thanks again.
Fizick
24th April 2005, 17:44
Version 0.9.3 - April 24,2005 - bug fixed for bt=2 with 3DNow! (thanks to kxproject for report);
mode bt=3 now default;
sharpen mode now is horizontal only and modyfied (still experimental)
What next?
1. I consider sharpen as experimental mode. Probably we never can create good sharpener with this algorithm becourse of blockiness (aliasing).
2. SSE2 or SSE3 optimizing?
You can try use or compile another version FFW3.dll
And it is posiible to optimize my own code (as 3DNow)
If somebody want make it, say.
tsp
24th April 2005, 19:41
Fizick what would the purpose with a sse2 version be when you only uses 32 bit floats (no double or integer code). A SSE version would be more suitable (All Athlons from Athlon xp and forward includes SSE).
Another thing do you plan to GPL the sourcecode (so I can rip the Kalman filter :p )
What about an ordinary 3x3 sharpening convolution(complex multiplication) as the sharpening function? The edge artifacts would disappear when using overlapping blocks.
Fizick
24th April 2005, 20:21
There are other fftw binary compiled with Intel comliler
ftp://ftp.fftw.org/pub/fftw/fftw-3.0.1-w32-pl1.zip
May be it is compatible. Can somebody with Pentium4 test its compatibility and speed?
Tsp,
I think next version will be GPL.
Yes, SSE is quite possible.
But there are many possible variants of Kalman fitering.
I tried some of them for ordinary (not-frequency domain) plugin, but never released it. The results is not very good.
About 3x3 convolution. I do not know really anything about sharpening :)
Do you say about frequency or spatial domain ?
I think we may use some external sharpening (Limitedsharpen).
Boulder
24th April 2005, 20:36
Originally posted by Fizick
There are other fftw binary compiled with Intel comliler
ftp://ftp.fftw.org/pub/fftw/fftw-3.0.1-w32-pl1.zip
May be it is compatible. Can somebody with Pentium4 test its compatibility and speed?
Can't say anything about the speed right now, but it does work.
tsp
25th April 2005, 00:38
Originally posted by Fizick
About 3x3 convolution. I do not know really anything about sharpening :)
Do you say about frequency or spatial domain ?
I think we may use some external sharpening (Limitedsharpen).
it's kind of both: if you take an ordinary sharpening mask like this:
-0.1 -0.1 -0.1
-0.1 1.8 -0.1
-0.1 -0.1 -0.1
and you have a blocksize of bh=8 bw=8 you zeropad the mask like this:
1.8 -0.1 0.0 0.0 0.0 0.0 0.0 -0.1
-0.1 -0.1 0.0 0.0 0.0 0.0 0.0 -0.1
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
-0.1 -0.1 0.0 0.0 0.0 0.0 0.0 -0.1
and fft it. Then you take the fft'ed image and complex multiply it with the fft'ed masked and apply the inverse fft to the result with result in a sharpend image.
this can also be used with any other mask. It's the same amount of worked involved so for bigger mask the difference in speed between multiplication in the frequency domain and convolution in the spatial domain increase.
DarkFoon
25th May 2005, 05:00
has there been any development?
this thread has been pretty dead...
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.