View Full Version : PhotoDenoise - batch and script to enhance photos
ADLANCAS
26th December 2006, 07:23
NEWEST VERSION ON THIS POST: http://forum.doom9.org/showthread.php?p=936652#post936652
I've just created a function to denoise photos.
It generates a script that includes all files .jpg from a subfolder and allow to set parameters individually
for each photo. Preview comparation between before and after filtered it's also possible.
Filters used:
- Hdragc v1.8.7;
- FFT3DFilter v1.9.1;
- VagueDenoiser v0.33.4;
- LimitedSharpenFaster.avsi
Limitations:
- It's slow;
- Works with .jpg photos;
- uses portrait or landscape format;
- batch file works on XP (others ?)
Create Script avs.bat
echo off
setlocal enabledelayedexpansion
if exist "Script.avs" del "Script.avs"
echo ###================================================================== >> Script.avs
echo ###General_Parameters: >> Script.avs
echo ###Xwidth--photo_width >> Script.avs
echo ###Yheight-photo_height >> Script.avs
echo ###Folder--Path_where_filtered_photos_will_be_placed >> Script.avs
echo ###Comp----(true=display_original/filtered,false=write_filtered_photo >> Script.avs
echo ###Parameters_for_each_photo: >> Script.avs
echo ###Str-----Strenght(float-0.0_3.0) >> Script.avs
echo ###LSF-----sharp(bool) >> Script.avs
echo ###AutoG---Auto_gain(float) >> Script.avs
echo ###MinG----Minimum_gain(float) >> Script.avs
echo ###Both----(Same_as_parameter_Comp) >> Script.avs
echo ###================================================================== >> Script.avs
echo Xwidth=1600 >> Script.avs
echo Yheight=1200 >> Script.avs
echo Folder="C:\Photo\Filtered" >> Script.avs
echo Comp=true >> Script.avs
echo ###===BlankClip====================================================== >> Script.avs
echo z=Yheight*4/3 >> Script.avs
echo Landscape=(z==Xwidth)?true:false >> Script.avs
echo c=BlankClip(length=1,width=Xwidth,height=Yheight,pixel_type="YUY2",color=$000000).KillAudio() >> Script.avs
echo c=(Comp==true)?c.BicubicResize(960,360):c >> Script.avs
echo c=(Landscape==false)?c.BicubicResize(720,480).Subtitle("BlankClip",align=5):c.Subtitle("BlankClip",align=5) >> Script.avs
echo c=(Comp==false)?BlankClip(length=1,width=Xwidth,height=Yheight,pixel_type="YUY2",color=$000000).KillAudio():c >> Script.avs
echo ###===Photos_to_be_filtered========================================== >> Script.avs
for /R %%x in (*.jpg) do (
echo.temp=ImageSource^("%%x",end=0^).PhDenoise
echo.c=c+temp
) >> "Script.avs"
echo last=c >> Script.avs
echo ###===Path_of_the_saved_images======================================= >> Script.avs
echo (Comp==true)?last:ConvertToRGB32().ImageWriter(Folder,start=0,type="jpg",info=true) >> Script.avs
REM ###======Add_parameters_to_function_PhDenoise=====================
set text=(Str=2.0,LSF=true,AutoG=1,MinG=1.0,Both=Comp)
for /f %%L in (Script.avs) DO (
set line=%%L
set _marker=!line:*PhDenoise=PhDenoise!
rem SET _marker=!_marker:~0,9!
if !_marker! EQU PhDenoise (
set complete=!line!!text!
echo !complete! >>temp.TMP
) ELSE (echo %%L >>temp.TMP)
)
copy /Y temp.TMP Script.avs
if exist temp.TMP del temp.TMP
PhDenoise.avsi:
function PhDenoise(clip clip, Float "Str", bool "LSF", int "AutoG", float "MinG", bool "Both"){
Str = default(Str, 2.0)
AutoG = default(AutoG, 0.0)
LSF = default(LSF, false)
MinG = default(MinG, 1.0)
Global Both = default(Both, true)
x = clip.width
y = clip.height
z = y * 4 / 3
Landscape = (z == x) ? true : false # if z= x (orientation Landscape)
clip = clip.ConvertToYUY2()
clip = (Both==true && Landscape==true) ? clip.BicubicResize(640,480) : clip
clip = (Both==true && Landscape==false) ? clip.BicubicResize(480,640) : clip
before = (Both==true && Landscape==true) ? clip.BicubicResize(480,360).Subtitle("Original", align=5) : clip
before = (Both==true && Landscape==false) ? clip.BicubicResize(360,480).Subtitle("Original", align=5) : before
clip = (Str > 0) ? clip.Combo(Str,AutoG,LSF,MinG) : clip
after = (Both==true && Landscape==true) ? clip.BicubicResize(480,360).Subtitle("Filtered", align=5) : clip
after = (Both==true && Landscape==false) ? clip.BicubicResize(360,480).Subtitle("Filtered", align=5) : after
(Both == true && Landscape==true) ? StackHorizontal(before,after) : clip
(Both == true && Landscape==false) ? StackHorizontal(before,after) : last
return last
}
function Combo(clip clip, Float "Str", int "AutoG", bool "LSF", float "MinG"){
clip
MaxGain = (MinG > 3.0) ? MinG : 3.0
(AutoG > 0) ? HDRAGC(shift=2, reducer=0.5,coef_gain=int(AutoG*1), min_gain=MinG, max_gain=MaxGain, coef_sat=1.0, corrector=0.8) : last
FFT3DFilter(sigma=Str/2 ,plane=4, bw=32, bh=32, bt=3, ow=16, oh=16)
VagueDenoiser(threshold = Str/2, wavelet = 3, method=1, nsteps=16 ,chromaT=0.8, Wiener = false,
\ percent = 80, interlaced = false)
(LSF == true) ? LimitedSharpenFaster(Smode=4,strength=200,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3) : last
return last
}
It should be nice to have comments and/or compare with other filters.:)
ADLANCAS
28th December 2006, 17:06
My doubt is about which kind of filters could be used to reduce noise from original footage.
Until now, Iīve got good results with fft3d and VagueDenoiser, but it crashes if script uses more than one photo (maybe because of low memory), besides itīs very slow. What do you think about filtering photos size 3072x2048 :eek:
Parameter Reducer from HDRAGC itīs also very usefull to reduce noise amplified by AGC.
I tried other filters like RemoveDirt,DegrainMedian, but results were not satisfied.
Iīm interested in some advices about filtering.
Ideas :)
Thanks,
PS.: Iīm in the end of some changes in the batch and scripts, maybe today Iīll post it.
Fizick
30th December 2006, 09:16
bt=3 for fft3dfilter is quite strange choice for 1-frame clip (photo). Or it is produced from film image sequence?
ADLANCAS
30th December 2006, 18:21
Yes, you are right. My propose is to use only with individuall photos.
Next version it will be :
FFT3DFilter(sigma=Str/2 ,plane=0, bw=32, bh=32, bt=1, ow=16, oh=16)
Maybe, Plane=4 is the better technical choice, but my eyes canīt see so much difference.
Fizick
30th December 2006, 18:34
more info about craches?
and probably for so big image sizes you can use bigger bw, ow
ADLANCAS
31st December 2006, 16:05
@Fizick
Photo:
http://img218.imageshack.us/img218/6475/23041728ji1.jpg
Iīve made 3 tests:
-with plane=4 and 1 photo, it works
-with plane=4 and 3 photos, system fault
-with plane=0 and 10 photos, system fault
http://img466.imageshack.us/img466/971/avisynthopenfailurecq6.jpg
Edit: For easier script, fault is in line 18 (FFT3d)
Maybe calling fft more than one time itīs causing that crash.
Script with 3 photos:
###===Photos_to_be_filtered==========================================
temp=ImageSource("C:\Photo_test\Original\2304_1728.JPG",end=0).PhDenoise(Str=2.0,LSF=true,AG=1.0)
c=temp
temp=ImageSource("C:\Photo_test\Original\2304_1728.JPG",end=0).PhDenoise(Str=2.0,LSF=true,AG=1.0)
c=c+temp
temp=ImageSource("C:\Photo_test\Original\2304_1728.JPG",end=0).PhDenoise(Str=2.0,LSF=true,AG=1.0)
c=c+temp
last=c
###===Path_of_the_saved_images=======================================
ConvertToRGB32().ImageWriter("C:\Photo_test\Filtered\",start=0,type="jpg",info=true)
function PhDenoise(clip clip, Float "Str", bool "LSF", float "AG"){
Str = default(Str, 2.0)
LSF = default(LSF, false)
AG = default(AG, 0.0)
clip.ConvertToYUY2()
FFT3DFilter(sigma=Str ,plane=4, bw=48, bh=48, bt=1, ow=24, oh=24)
return last
}
Fizick
2nd January 2007, 19:23
multiple instances is bad for complex filters (fft3dfilter). It eats huge memory for every instance (use many internal buffers, optimized for video).
Try also use ImageSequence plugin by WarpEnterprises.
But all image must have same size probably.
Sort them by some groups (with same size).
Loadplugin("imagesequence.dll")
###===Photos_to_be_filtered==========================================
temp=CoronaSequence("C:\Photo_test\Original\*.jpg")
last=temp.PhDenoise(Str=2.0,LSF=true,AG=1.0)
###===Path_of_the_saved_images=======================================
ConvertToRGB32().ImageWriter("C:\Photo_test\Filtered\",start=0,type="jpg",info=true)
function PhDenoise(clip clip, Float "Str", bool "LSF", float "AG"){
Str = default(Str, 2.0)
LSF = default(LSF, false)
AG = default(AG, 0.0)
clip.ConvertToYUY2()
FFT3DFilter(sigma=Str ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32,measure=false)
return last
}
ADLANCAS
2nd January 2007, 23:22
Try also use ImageSequence plugin by WarpEnterprises
Thanks, I didnīt know that.
But all image must have same size probably
For sure. Itīd be there another possibility ?:stupid:
multiple instances is bad for complex filters (fft3dfilter)
What a pity!
With multiple instances, it allows to tweak fft3d and AGC in each photo individually. Without multiple instances, no way:(
Is there a way to set different strenghts for each frame ?
Thatīs could solve the problem...
Something like...###===Photos_to_be_filtered==========================================
temp=ImageSource("C:\Photo_test\Original\2304_1728.JPG",end=0).PhDenoise(Str=2.0,LSF=true,AG=1.0)
c=temp
temp=ImageSource("C:\Photo_test\Original\2304_1728.JPG",end=0).PhDenoise(Str=1.0,LSF=true,AG=1.0)
c=c+temp
temp=ImageSource("C:\Photo_test\Original\2304_1728.JPG",end=0).PhDenoise(Str=1.5,LSF=true,AG=1.0)
c=c+temp
last=c
###===Path_of_the_saved_images=======================================
ConvertToRGB32().ImageWriter("C:\Photo_test\Filtered\",start=0,type="jpg",info=true)
function PhDenoise(clip clip, Float "Str", bool "LSF", float "AG"){
Str = default(Str, 2.0)
LSF = default(LSF, false)
AG = default(AG, 0.0)
clip.ConvertToYUY2()
FFT3DFilter(sigma=Str ,FRAME=Framecount, plane=4, bw=64, bh=64, bt=1, ow=48, oh=48,measure=false)
return last
}
Fizick
3rd January 2007, 00:03
FRAME=Framecount ?
no, you need in:
FFT3DFilter(sigma=Str, sigmafile = "sigma_per_frame.txt", ...)
(it is not implemented)
ADLANCAS
4th January 2007, 20:19
What do you think about attached file ?
Neatimage and others sounds good to compare quality. I don't have any of them. Could someone test and post it here ?
ADLANCAS
16th January 2007, 01:07
After some ideas, iīve rewriten and simplified this batch file.
Changes:
- Batch creates multiple scripts, one for each photo.
- Script uses BlindPP before and TBilateral after fft3Dfilter. This combo produces much better results than only VagueDenoiser.
- script allows to set where the zoom is taked from, relative to the center of photo (on preview mode).
- itīs easy to use :D
Here is an example how it looks:
http://img440.imageshack.us/img440/6222/comparegq3.th.jpg (http://img440.imageshack.us/my.php?image=comparegq3.jpg)
Script generated by batch file###==================================================================
# General Parameters:
# Compare___(true=display original/filtered, false=write filtered photo to the path)
#
# Parameters for each photo:
# Str_______Strenght. Same as Sigma from fft3DFilter (float)
# PP________Strength of the deblocking process. Same as in BlindPP (int)
# LSF_______Strenght of sharp. Same as streght in LimitedSharpenFaster (int)
# AG________Auto-gain (float) . AG = 0.0 means no gain.
# align_____allows to set (int) where the zoom(1:1) is taked from, relative to the center of photo.
# top (7,8,9), center (4,5,6), bottom (1,2,3) -> where (left,middle,right)
# (each zoomed block is size 192x192 pixels).
###==================================================================
###===Input==========================================================
Compare = true
###===Variables======================================================
Cp1 = Compare
###===Photo to be filtered==========================================
ImageSource("C:\Photo\Original\2304_1728.JPG",end=0).PhDenoise(Str=4.0,PP=2,LSF=200,AG=0.0,align=5,Cp=Cp1)
###===Path of the saved images=======================================
Path = "C:\Photo\Filtered\" + "2304_1728" + "_"
(Cp1==true) ? last : ConvertToRGB32().ImageWriter(Path,start=0,type="jpg",info=true)
###===Function Photo Denoise=========================================
function PhDenoise(clip clip, Float "Str", Int "PP", int "LSF", float "AG", int "align", bool "Cp"){
Str = default(Str, 1.0)
PP = default(PP, 2)
AG = default(AG, 1.0)
LSF = default(LSF, 200)
align = default(align, 5)
Cp = default(Cp, true)
clip = clip.ConvertToYUY2()
global x= clip.width
global y= clip.height
p = (x/y)
Ld = (p==1) ? true : false
Px = (align==1 || align==4 || align==7) ? -1 : 0
Px = (align==3 || align==6 || align==9) ? +1 : Px
Py = (align==7 || align==8 || align==9) ? -1 : 0
Py = (align==1 || align==2 || align==3) ? +1 : Py
block = clip.Crop(x/2+Px*192,y/2+Py*192,192,192)
before = (Cp==true && Ld==true) ? clip.BicubicResize(480,352) : clip
before = (Cp==true && Ld==false) ? clip.BicubicResize(352,480) : before
Zblock = (Cp==true) ? block.Combo(Str,PP,AG,LSF) : block
after = (Cp==true) ? before.Combo(Str,PP,AG,LSF) : before
before = (Cp==true) ? Overlay(before.Subtitle("Original", align=8), block, x=0, y=0, mode="Blend", opacity=1.0) : before
after = (Cp==true) ? Overlay(after.Subtitle("Filtered", align=8), Zblock, x=0, y=0, mode="Blend", opacity=1.0) : after
(Cp == true) ? StackHorizontal(before,after) : clip.Combo(Str,PP,AG,LSF)
return last
}
function Combo(clip clip, Float "Str", Int "PP", float "AG", int "LSF"){
clip
r_add = (AG > 1.4) ? 0.3 : 0.0
r_add = (AG > 1.9) ? 0.6 : r_add
BlindPP(quant=PP)
(AG >= 1.0) ? HDRAGC(shift=2, reducer=0.5+r_add,coef_gain=1, min_gain=AG, max_gain=AG, coef_sat=1.0, corrector=0.8) : last
(x > 2304 && Str > 0) ? FFT3DFilter(sigma=Str ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false) : last
(x <= 2304 && Str > 0) ? FFT3DFilter(sigma=Str/1.4 ,plane=0, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false) : last
(x <= 2304 && Str > 0) ? FFT3DFilter(sigma=Str/1.4 ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false) : last
(x <= 2304 && Str > 0.4) ? TBilateral(diameterL=5,diameterC=5,sDevL=Str/8,sDevC=Str/8) : last
LimitedSharpenFaster(Smode=4,strength=LSF,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3)
return last
}
Edit: Batch was missing
Create nScripts nPhotos.avs.bat
@echo off
setlocal enabledelayedexpansion
for /R %%x in (*.jpg) do (
echo ###==================================================================
echo # General Parameters:
echo # Compare___^(true=display original/filtered, false=write filtered photo to the path^)
echo #
echo # Parameters for each photo:
echo # Str_______Strenght. Same as Sigma from fft3DFilter ^(float^)
echo # PP________Strength of the deblocking process. Same as in BlindPP ^(int^)
echo # LSF_______Strenght of sharp. Same as streght in LimitedSharpenFaster ^(int^)
echo # AG________Auto-gain ^(float^) . AG = 0.0 means no gain.
echo # align_____allows to set ^(int^) where the zoom^(1:1^) is taked from, relative to the center of photo.
echo # top ^(7,8,9^), center ^(4,5,6^), bottom ^(1,2,3^) -^> where ^(left,middle,right^)
echo # ^(each zoomed block is size 192x192 pixels^).
echo ###==================================================================
echo ###===Input==========================================================
echo Compare = true
echo ###===Variables======================================================
echo Cp1 = Compare
echo ###===Photo to be filtered==========================================
echo ImageSource^("%%x",end=0^).PhDenoise^(Str=1.0,PP=2,LSF=150,AG=1.0,align=5,Cp=Cp1^)
echo ###===Path of the saved images=======================================
echo Path = "C:\Photo\Filtered\" + "%%~nx" + "_"
echo ^(Cp1==true^) ? last : ConvertToRGB32^(^).ImageWriter^(Path,start=0,type="jpg",info=true^)
echo ###===Function Photo Denoise=========================================
echo function PhDenoise^(clip clip, Float "Str", Int "PP", int "LSF", float "AG", int "align", bool "Cp"^){
echo Str = default^(Str, 1.0^)
echo PP = default^(PP, 2^)
echo AG = default^(AG, 1.0^)
echo LSF = default^(LSF, 200^)
echo align = default^(align, 5^)
echo Cp = default^(Cp, true^)
echo clip = clip.ConvertToYUY2^(^)
echo global x= clip.width
echo global y= clip.height
echo p = ^(x/y^)
echo Ld = ^(p==1^) ? true : false
echo Px = ^(align==1 ^|^| align==4 ^|^| align==7^) ? -1 : 0
echo Px = ^(align==3 ^|^| align==6 ^|^| align==9^) ? +1 : Px
echo Py = ^(align==7 ^|^| align==8 ^|^| align==9^) ? -1 : 0
echo Py = ^(align==1 ^|^| align==2 ^|^| align==3^) ? +1 : Py
echo block = clip.Crop^(x/2+Px*192,y/2+Py*192,192,192^)
echo before = ^(Cp==true ^&^& Ld==true^) ? clip.BicubicResize^(480,352^) : clip
echo before = ^(Cp==true ^&^& Ld==false^) ? clip.BicubicResize^(352,480^) : before
echo Zblock = ^(Cp==true^) ? block.Combo^(Str,PP,AG,LSF^) : block
echo after = ^(Cp==true^) ? before.Combo^(Str,PP,AG,LSF^) : before
echo before = ^(Cp==true^) ? Overlay^(before.Subtitle^("Original", align=8^), block, x=0, y=0, mode="Blend", opacity=1.0^) : before
echo after = ^(Cp==true^) ? Overlay^(after.Subtitle^("Filtered", align=8^), Zblock, x=0, y=0, mode="Blend", opacity=1.0^) : after
echo ^(Cp == true^) ? StackHorizontal^(before,after^) : clip.Combo^(Str,PP,AG,LSF^)
echo return last
echo }
echo function Combo^(clip clip, Float "Str", Int "PP", float "AG", int "LSF"^){
echo clip
echo r_add = ^(AG ^> 1.4^) ? 0.3 : 0.0
echo r_add = ^(AG ^> 1.9^) ? 0.6 : r_add
echo BlindPP^(quant=PP^)
echo ^(AG ^>= 1.0^) ? HDRAGC^(shift=2, reducer=0.5+r_add,coef_gain=1, min_gain=AG, max_gain=AG, coef_sat=1.0, corrector=0.8^) : last
echo ^(x ^> 2304 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(x ^<= 2304 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=0, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(x ^<= 2304 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(x ^<= 2304 ^&^& Str ^> 0.4^) ? TBilateral^(diameterL=5,diameterC=5,sDevL=Str/8,sDevC=Str/8^) : last
echo LimitedSharpenFaster^(Smode=4,strength=LSF,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3^)
echo return last
echo }
) > "%%~nx.avs"
Comments ?
ADLANCAS
19th January 2007, 13:37
Script revised. (see above)
Improved parameters for low resolution photos.
Until now only (and very important) comments from Fizick.:(
halsboss
20th January 2007, 03:53
After some ideas, iīve rewriten and simplified this batch file.
... Comments ?
Thanks. I hope to use this. Sorry it's not clear to me what .BAT and .AVS files to copy... the one at the top of this thread ? The 1st post suggests NEW VERSION ON THIS POST http://forum.doom9.org/showthread.ph...652#post936652:
(Edit: I don't change this post due historical reasons.) however I didn't spot another .AVS script-generating .BAT file as suggested by
Changes:
- Batch creates multiple scripts, one for each photo.
- Script uses BlindPP before and TBilateral after fft3Dfilter. This combo produces much better results than only VagueDenoiser.
- script allows to set where the zoom is taked from, relative to the center of photo (on preview mode).
- itīs easy to use
ADLANCAS
20th January 2007, 22:48
it's not clear to me what .BAT and .AVS files to copy... the one at the top of this thread ? The 1st post suggests
On the top was my first idea that I only want to save the post. I tried to put all the photos/parameters in only one script, then preview each photo tweaking parameters and so donīt use preview mode processing all photos in sequence. Itīs not usefull because fft3dfilter eats a lot of memory for every instance and then it crashes.
however I didn't spot another .AVS script-generating .BAT file as suggested by
You are right. New batch is now in the same thread as the newest version of script, but of course you donīt need to have the script because batch file generate them for you :D
I hope that now itīs clear.
If possible post your results here.
halsboss
21st January 2007, 01:23
Ah, thanks, I see you edited-in the .BAT into post above: http://forum.doom9.org/showthread.php?p=936652#post936652
Will give it a try on some terrible photos and post.
halsboss
21st January 2007, 02:14
Seeking patient assistance... Hmm, are the new dependencies only BlindPP, HDRAGC, FFT3DFilter, TBilateral, LimitedSharpenFaster ? Have LSF, found
TBilateral at http://bengal.missouri.edu/~kes25c/
FFT3DFilter at http://avisynth.org.ru/fizick.html
HDRAGC at http://strony.aster.pl/paviko/hdragc.htm
BlindPP at where?
Ran nPhotos.avs.bat and saw the .AVS files created. Oh, I now have to edit them all to include the above plugins using LoadPlugin ? Instead, I'll edit nPhotos.avs.bat and re-run it (too many photos). Query: is this the way to do it ? If so, Suggestion - could you include a parameter to optionally do that in each AVS from a specified plugins path ?
Now that I have all these .AVS files created, what is the easiest way to deal with them ? Maybe if I create another .BAT which just runs mplayer over the .AVS one by one ? Maybe nPhotos.avs.bat could create that (or something better) ?
ADLANCAS
21st January 2007, 03:10
BlindPP is in this package:http://neuron2.net/dgmpgdec/dgmpgdec149b12.zip
Ran nPhotos.avs.bat and saw the .AVS files created. Oh, I now have to edit them all to include the above plugins using LoadPlugin ? Instead, I'll edit nPhotos.avs.bat and re-run it (too many photos). Query: is this the way to do it ? If so, Suggestion - could you include a parameter to optionally do that in each AVS from a specified plugins path ?
LoadPlugin is not necessary. You need only to put all .dll files from filters on your C:\Program Files\Avisynth 2.5\plugins folder. When you open a script on VDubMod for example, avisynth look automatically all .dll files that are on this folder.
Now that I have all these .AVS files created, what is the easiest way to deal with them ? Maybe if I create another .BAT which just runs mplayer over the .AVS one by one ? Maybe nPhotos.avs.bat could create that (or something better) ?
What I do normally is:
- open first script in VDubMod;
- default parameters are:
###===Input==========================================================
Compare = true
###===Variables======================================================
Cp1 = Compare
###===Photo to be filtered==========================================
ImageSource("C:\Photo\Original\2304_1728.JPG",end=0).PhDenoise(Str=1.0,PP=2,LSF=150,AG=1.0,align=5,Cp=Cp1)
- tweak PhDenoise parameters, so you could compare to the original. Parameter "align" (=1 to 9) helps to select some areas on photo, to see in original size.
- When you are satisfied, just change line "Compare = true" to "Compare = false" and wait filtered photo is on your path.
- Next photo...;)
halsboss
21st January 2007, 04:19
Thanks. For various pragmatic reasons I do not put plugins in the default plugins folder to load automatically, so I must load them. Tinkered with the script slightly to do it
@echo off
REM ----- edit these to set global parameters of your choice -----
Set ImageCompare=false
set PluginsPath=C:\Program Files\AviSynth 2.5\plugins-dcw\
set ImportsPath=C:\Program Files\AviSynth 2.5\
set DGDecodePluginsPath=C:\SOFTWARE\DGindex\
set FilteredOutputPath=D:\TEMP\2007-01-13-Robe-to-2007-01-17\Cleanup\Filtered\
REM ----- edit these to set global parameters of your choice -----
setlocal enabledelayedexpansion
for /R %%x in (*.jpg) do (
echo ###==================================================================
echo # General Parameters:
echo # Compare___^(true=display original/filtered, false=write filtered photo to the path^)
echo #
echo # Parameters for each photo:
echo # Str_______Strenght. Same as Sigma from fft3DFilter ^(float^)
echo # PP________Strength of the deblocking process. Same as in BlindPP ^(int^)
echo # LSF_______Strenght of sharp. Same as streght in LimitedSharpenFaster ^(int^)
echo # AG________Auto-gain ^(float^) . AG = 0.0 means no gain.
echo # align_____allows to set ^(int^) where the zoom^(1:1^) is taked from, relative to the center of photo.
echo # top ^(7,8,9^), center ^(4,5,6^), bottom ^(1,2,3^) -^> where ^(left,middle,right^)
echo # ^(each zoomed block is size 192x192 pixels^).
echo #
echo # Dependencies :-
echo # LimitedSharpenFaster
echo # TBilateral from http://bengal.missouri.edu/~kes25c/
echo # FFT3DFilter from http://avisynth.org.ru/fizick.html
echo # HDRAGC ^(AGC^) from http://strony.aster.pl/paviko/hdragc.htm
echo # BlindPP inside DGDecode from http://neuron2.net/dgmpgdec/dgmpgdec.html
echo # mt_masktools V2 underpins LimitedSharpenFaster from http://manao4.free.fr/
echo # RemoveGRain underpins LimitedSharpenFaster from http://home.arcor.de/kassandro/
echo ###==================================================================
echo #
echo #SetPlanarLegacyAlignment^(True^)
echo LoadPlugin^("%DGDecodePluginsPath%DGDecode.dll"^)
echo LoadPlugin^("%PluginsPath%Tbilateral.dll"^)
echo LoadPlugin^("%PluginsPath%fft3dfilter.dll"^)
echo LoadPlugin^("%PluginsPath%AGC.dll"^)
echo #LoadPlugin^("%PluginsPath%WarpSharp.dll"^)
echo #LoadPlugin^("%PluginsPath%MaskTools.dll"^)
echo # mt_masktools.dll is for LimitedSharpenFaster.avsi
echo LoadPlugin^("%PluginsPath%mt_masktools.dll"^)
echo # RemoveGrain.dll is for LimitedSharpenFaster.avsi
echo LoadPlugin^("%PluginsPath%RemoveGrainSSE2.dll"^)
echo #
echo # For further testing/tinkering ^(some of these may be spatio-temporal or temporal, so weed them out^)
echo #LoadPlugin^("%PluginsPath%degrainmedian.dll"^)
echo #LoadPlugin^("%PluginsPath%Convolution3d.dll"^)
echo #LoadPlugin^("%PluginsPath%despot.dll"^)
echo #LoadPlugin^("%PluginsPath%descratch.dll"^)
echo # http://avisynth.org/warpenterprises/ for others
echo #
echo Import^("%ImportsPath%LimitedSharpenFaster.avsi"^)
echo #
echo ###===Input==========================================================
echo Compare = %ImageCompare%
echo ###===Variables======================================================
echo Cp1 = Compare
echo ###===Photo to be filtered==========================================
echo ImageSource^("%%x",end=0^).PhDenoise^(Str=1.0,PP=2,LSF=150,AG=1.0,align=5,Cp=Cp1^)
echo ###===Path of the saved images=======================================
echo Path = "%FilteredOutputPath%" + "%%~nx" + "_"
echo ^(Cp1==true^) ? last : ConvertToRGB32^(^).ImageWriter^(Path,start=0,type="jpg",info=true^)
echo ###===Function Photo Denoise=========================================
echo function PhDenoise^(clip clip, Float "Str", Int "PP", int "LSF", float "AG", int "align", bool "Cp"^){
echo Str = default^(Str, 1.0^)
echo PP = default^(PP, 2^)
echo AG = default^(AG, 1.0^)
echo LSF = default^(LSF, 200^)
echo align = default^(align, 5^)
echo Cp = default^(Cp, true^)
echo clip = clip.ConvertToYUY2^(^)
echo global x= clip.width
echo global y= clip.height
echo p = ^(x/y^)
echo Ld = ^(p==1^) ? true : false
echo Px = ^(align==1 ^|^| align==4 ^|^| align==7^) ? -1 : 0
echo Px = ^(align==3 ^|^| align==6 ^|^| align==9^) ? +1 : Px
echo Py = ^(align==7 ^|^| align==8 ^|^| align==9^) ? -1 : 0
echo Py = ^(align==1 ^|^| align==2 ^|^| align==3^) ? +1 : Py
echo block = clip.Crop^(x/2+Px*192,y/2+Py*192,192,192^)
echo before = ^(Cp==true ^&^& Ld==true^) ? clip.BicubicResize^(480,352^) : clip
echo before = ^(Cp==true ^&^& Ld==false^) ? clip.BicubicResize^(352,480^) : before
echo Zblock = ^(Cp==true^) ? block.Combo^(Str,PP,AG,LSF^) : block
echo after = ^(Cp==true^) ? before.Combo^(Str,PP,AG,LSF^) : before
echo before = ^(Cp==true^) ? Overlay^(before.Subtitle^("Original", align=8^), block, x=0, y=0, mode="Blend", opacity=1.0^) : before
echo after = ^(Cp==true^) ? Overlay^(after.Subtitle^("Filtered", align=8^), Zblock, x=0, y=0, mode="Blend", opacity=1.0^) : after
echo ^(Cp == true^) ? StackHorizontal^(before,after^) : clip.Combo^(Str,PP,AG,LSF^)
echo return last
echo }
echo function Combo^(clip clip, Float "Str", Int "PP", float "AG", int "LSF"^){
echo clip
echo r_add = ^(AG ^> 1.4^) ? 0.3 : 0.0
echo r_add = ^(AG ^> 1.9^) ? 0.6 : r_add
echo BlindPP^(quant=PP^)
echo ^(AG ^>= 1.0^) ? HDRAGC^(shift=2, reducer=0.5+r_add,coef_gain=1, min_gain=AG, max_gain=AG, coef_sat=1.0, corrector=0.8^) : last
echo ^(x ^> 2304 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(x ^<= 2304 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=0, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(x ^<= 2304 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(x ^<= 2304 ^&^& Str ^> 0.4^) ? TBilateral^(diameterL=5,diameterC=5,sDevL=Str/8,sDevC=Str/8^) : last
echo LimitedSharpenFaster^(Smode=4,strength=LSF,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3^)
echo return last
echo }
) > "%%~nx.avs"
Will post a test of cheapish digital camera photo soon (inside, no flash).
halsboss
21st January 2007, 04:47
Hmm, default settings (see prior post).
1.3 Mb original ended up 2.6Mb filtered.
Brightened it up a bit but noise as bad or worse ?
http://rapidshare.com/files/12635816/PIC00792_original.JPG.html
http://rapidshare.com/files/12635817/PIC00792_filtered.jpg.html
ADLANCAS
21st January 2007, 05:00
Set ImageCompare=false
I think that is not a good idea to put =false, because you need to tweak parameters at first, and then generate filtered photo (original size).
Iīll look your photo.
halsboss
21st January 2007, 05:47
Thanks, I'd appreciate that.
Is there a more useful place to upload photos than rapidshare (one that doesn't go through a lot of hoohah just to see the image, and doesn't resize it or anything) ?
ADLANCAS
21st January 2007, 06:08
You can upload photos using:
http://www.imageshack.us/
On your batch version, try to use:
PhDenoise(Str=2.0,PP=2,LSF=150,AG=1.5,align=4,Cp=Cp1)
It seems not so bad to me.
New batch.
changes:
-Mode =1 Normal denoise. Mode=2 Strongest denoise.
@echo off
setlocal enabledelayedexpansion
for /R %%x in (*.jpg) do (
echo ###==================================================================
echo # General Parameters:
echo # Compare___^(true=display original/filtered, false=write filtered photo to the path^)
echo #
echo # Parameters for each photo:
echo # Str_______Strenght. Same as Sigma from fft3DFilter ^(float^)
echo # Mode______Type of noise reduction. =1 Normal ; =2 Strongest noise reduction
echo # PP________Strength of the deblocking process. Same as in BlindPP ^(int^)
echo # LSF_______Strenght of sharp. Same as streght in LimitedSharpenFaster ^(int^)
echo # AG________Auto-gain ^(float^) . AG = 0.0 means no gain.
echo # align_____allows to set ^(int^) where the zoom^(1:1^) is taked from, relative to the center of photo.
echo # top ^(7,8,9^), center ^(4,5,6^), bottom ^(1,2,3^) -^> where ^(left,middle,right^)
echo # ^(each zoomed block is size 192x192 pixels^).
echo ###==================================================================
echo ###===Input==========================================================
echo Compare = true
echo ###===Variables======================================================
echo Cp1 = Compare
echo ###===Photo to be filtered==========================================
echo ImageSource^("%%x",end=0^).PhDenoise^(Str=1.0,Mode=2,PP=2,LSF=150,AG=1.0,align=5,Cp=Cp1^)
echo ###===Path of the saved images=======================================
echo Path = "C:\Photo\Filtered\" + "%%~nx" + "_"
echo ^(Cp1==true^) ? last : ConvertToRGB32^(^).ImageWriter^(Path,start=0,type="jpg",info=true^)
echo ###===Function Photo Denoise=========================================
echo function PhDenoise^(clip clip, Float "Str", Int "Mode", Int "PP", int "LSF", float "AG", int "align", bool "Cp"^){
echo Str = default^(Str, 1.0^)
echo Mode = default^(Mode, 2^)
echo PP = default^(PP, 2^)
echo AG = default^(AG, 1.0^)
echo LSF = default^(LSF, 150^)
echo align = default^(align, 5^)
echo Cp = default^(Cp, true^)
echo clip = clip.ConvertToYUY2^(^)
echo global x= clip.width
echo global y= clip.height
echo p = ^(x/y^)
echo Ld = ^(p==1^) ? true : false
echo Px = ^(align==1 ^|^| align==4 ^|^| align==7^) ? -1 : 0
echo Px = ^(align==3 ^|^| align==6 ^|^| align==9^) ? +1 : Px
echo Py = ^(align==7 ^|^| align==8 ^|^| align==9^) ? -1 : 0
echo Py = ^(align==1 ^|^| align==2 ^|^| align==3^) ? +1 : Py
echo block = clip.Crop^(x/2+Px*192,y/2+Py*192,192,192^)
echo before = ^(Cp==true ^&^& Ld==true^) ? clip.BicubicResize^(480,352^) : clip
echo before = ^(Cp==true ^&^& Ld==false^) ? clip.BicubicResize^(352,480^) : before
echo Zblock = ^(Cp==true^) ? block.Combo^(Str,Mode,PP,AG,LSF^) : block
echo after = ^(Cp==true^) ? before.Combo^(Str,Mode,PP,AG,LSF^) : before
echo before = ^(Cp==true^) ? Overlay^(before.Subtitle^("Original", align=8^), block, x=0, y=0, mode="Blend", opacity=1.0^) : before
echo after = ^(Cp==true^) ? Overlay^(after.Subtitle^("Filtered", align=8^), Zblock, x=0, y=0, mode="Blend", opacity=1.0^) : after
echo ^(Cp == true^) ? StackHorizontal^(before,after^) : clip.Combo^(Str,Mode,PP,AG,LSF^)
echo return last
echo }
echo function Combo^(clip clip, Float "Str", Int "Mode", Int "PP", float "AG", int "LSF"^){
echo clip
echo r_add = ^(AG ^> 1.4^) ? 0.3 : 0.0
echo r_add = ^(AG ^> 1.9^) ? 0.6 : r_add
echo BlindPP^(quant=PP^)
echo ^(AG ^>= 1.0^) ? HDRAGC^(shift=2, reducer=0.5+r_add,coef_gain=1, min_gain=AG, max_gain=AG, coef_sat=1.0, corrector=0.8^) : last
echo ^(Mode == 1 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(Mode == 2 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=0, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(Mode == 2 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(Mode == 2 ^&^& Str ^> 0.4^) ? TBilateral^(diameterL=5,diameterC=5,sDevL=Str/8,sDevC=Str/8^) : last
echo LimitedSharpenFaster^(Smode=4,strength=LSF,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3^)
echo return last
echo }
) > "%%~nx.avs"
halsboss
21st January 2007, 07:37
OK ! http://www.imageshack.us/ had a filesize limit on .jpgs which wouldn't allow these images. Oh well.
The updated images :-
http://rapidshare.com/files/12645144/PIC00792_original.JPG.html
http://rapidshare.com/files/12645145/PIC00792_filtered.jpg.html
A nicer look, cleaned up, and a useful tool... seems that great magic is still the domain of fiction at this point :) Thanks for the tool !
That version of the .BAT gave a script error when compare was set to false Script Error: Invalid arguments to function "Combo"
Fixed .BAT below, to assist you.
@echo off
REM based on ADLANCAS's http://forum.doom9.org/showthread.php?p=941525#post941525
REM On your batch version, try to use: PhDenoise(Str=2.0,PP=2,LSF=150,AG=1.5,align=4,Cp=Cp1)
REM ----- edit these to set global parameters of your choice -----
set ImageCompare=false
set NoiseReductionMode=2
set StrValue=2.0
set PPvalue=2
set LSFstrengthValue=150
set AGvalue=1.0
set ALIGNvalue=4
set PluginsPath=C:\Program Files\AviSynth 2.5\plugins-dcw\
set ImportsPath=C:\Program Files\AviSynth 2.5\
set DGDecodePluginsPath=C:\SOFTWARE\DGindex\
set FilteredOutputPath=D:\TEMP\2007-01-13-Robe-to-2007-01-17\Cleanup\Filtered\
REM ----- edit these to set global parameters of your choice -----
setlocal enabledelayedexpansion
for /R %%x in (*.jpg) do (
echo ###==================================================================
echo # General Parameters:
echo # Compare___^(true=display original/filtered, false=write filtered photo to the path^)
echo #
echo # Parameters for each photo:
echo # Str_______Strength. Same as Sigma from fft3DFilter ^(float^)
echo # Mode______Type of noise reduction. =1 Normal ; =2 Strongest noise reduction
echo # PP________Strength of the deblocking process. Same as in BlindPP ^(int^)
echo # LSF_______Strenght of sharp. Same as streght in LimitedSharpenFaster ^(int^)
echo # AG________Auto-gain ^(float^) . AG = 0.0 means no gain.
echo # align_____allows to set ^(int^) where the zoom^(1:1^) is taked from, relative to the center of photo.
echo # top ^(7,8,9^), center ^(4,5,6^), bottom ^(1,2,3^) -^> where ^(left,middle,right^)
echo # ^(each zoomed block is size 192x192 pixels^).
echo # Dependencies :-
echo # LimitedSharpenFaster
echo # TBilateral from http://bengal.missouri.edu/~kes25c/
echo # FFT3DFilter from http://avisynth.org.ru/fizick.html
echo # HDRAGC ^(AGC^) from http://strony.aster.pl/paviko/hdragc.htm
echo # BlindPP inside DGDecode from http://neuron2.net/dgmpgdec/dgmpgdec.html
echo # mt_masktools V2 underpins LimitedSharpenFaster from http://manao4.free.fr/
echo # RemoveGRain underpins LimitedSharpenFaster from http://home.arcor.de/kassandro/
echo ###==================================================================
echo #
echo LoadPlugin^("%DGDecodePluginsPath%DGDecode.dll"^)
echo LoadPlugin^("%PluginsPath%Tbilateral.dll"^)
echo LoadPlugin^("%PluginsPath%fft3dfilter.dll"^)
echo LoadPlugin^("%PluginsPath%AGC.dll"^)
echo #LoadPlugin^("%PluginsPath%WarpSharp.dll"^)
echo #LoadPlugin^("%PluginsPath%MaskTools.dll"^)
echo # mt_masktools.dll is for LimitedSharpenFaster.avsi
echo LoadPlugin^("%PluginsPath%mt_masktools.dll"^)
echo # RemoveGrain.dll is for LimitedSharpenFaster.avsi
echo LoadPlugin^("%PluginsPath%RemoveGrainSSE2.dll"^)
echo #
echo # For further testing/tinkering ^(some of these may be spatio-temporal or temporal, so weed them out^)
echo #LoadPlugin^("%PluginsPath%degrainmedian.dll"^)
echo #LoadPlugin^("%PluginsPath%Convolution3d.dll"^)
echo #LoadPlugin^("%PluginsPath%despot.dll"^)
echo #LoadPlugin^("%PluginsPath%descratch.dll"^)
echo # http://avisynth.org/warpenterprises/ for others
echo #
echo Import^("%ImportsPath%LimitedSharpenFaster.avsi"^)
echo #
echo ###===Input==========================================================
echo Compare = %ImageCompare%
echo ###===Variables======================================================
echo Cp1 = Compare
echo ###===Photo to be filtered==========================================
echo ImageSource^("%%x",end=0^).PhDenoise^(Str=%StrValue%,Mode=%NoiseReductionMode%,PP=%PPvalue%,LSF=%LSFstrengthValue%,AG=%AGvalue%,align=%ALIGNvalue%,Cp=Cp1^)
echo ###===Path of the saved images=======================================
echo Path = "%FilteredOutputPath%" + "%%~nx" + "_"
echo ^(Cp1==true^) ? last : ConvertToRGB32^(^).ImageWriter^(Path,start=0,type="jpg",info=true^)
echo ###===Function Photo Denoise=========================================
echo function PhDenoise^(clip clip, Float "Str", Int "Mode", Int "PP", int "LSF", float "AG", int "align", bool "Cp"^){
echo Str = default^(Str, 1.0^)
echo Mode = default^(Mode, 2^)
echo PP = default^(PP, 2^)
echo AG = default^(AG, 1.0^)
echo LSF = default^(LSF, 150^)
echo align = default^(align, 5^)
echo Cp = default^(Cp, true^)
echo clip = clip.ConvertToYUY2^(^)
echo global x= clip.width
echo global y= clip.height
echo p = ^(x/y^)
echo Ld = ^(p==1^) ? true : false
echo Px = ^(align==1 ^|^| align==4 ^|^| align==7^) ? -1 : 0
echo Px = ^(align==3 ^|^| align==6 ^|^| align==9^) ? +1 : Px
echo Py = ^(align==7 ^|^| align==8 ^|^| align==9^) ? -1 : 0
echo Py = ^(align==1 ^|^| align==2 ^|^| align==3^) ? +1 : Py
echo block = clip.Crop^(x/2+Px*192,y/2+Py*192,192,192^)
echo before = ^(Cp==true ^&^& Ld==true^) ? clip.BicubicResize^(480,352^) : clip
echo before = ^(Cp==true ^&^& Ld==false^) ? clip.BicubicResize^(352,480^) : before
echo Zblock = ^(Cp==true^) ? block.Combo^(Str=Str,Mode=Mode,PP=PP,AG=AG,LSF=LSF^) : block
echo after = ^(Cp==true^) ? before.Combo^(Str=Str,Mode=Mode,PP=PP,AG=AG,LSF=LSF^) : before
echo before = ^(Cp==true^) ? Overlay^(before.Subtitle^("Original", align=8^), block, x=0, y=0, mode="Blend", opacity=1.0^) : before
echo after = ^(Cp==true^) ? Overlay^(after.Subtitle^("Filtered", align=8^), Zblock, x=0, y=0, mode="Blend", opacity=1.0^) : after
echo ^(Cp == true^) ? StackHorizontal^(before,after^) : clip.Combo^(Str=Str,Mode=Mode,PP=PP,AG=AG,LSF=LSF^)
echo return last
echo }
echo function Combo^(clip clip, Float "Str", Int "Mode", Int "PP", float "AG", int "LSF"^){
echo clip
echo r_add = ^(AG ^> 1.4^) ? 0.3 : 0.0
echo r_add = ^(AG ^> 1.9^) ? 0.6 : r_add
echo BlindPP^(quant=PP^)
echo ^(AG ^>= 1.0^) ? HDRAGC^(shift=2, reducer=0.5+r_add,coef_gain=1, min_gain=AG, max_gain=AG, coef_sat=1.0, corrector=0.8^) : last
echo ^(Mode == 1 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(Mode == 2 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=0, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(Mode == 2 ^&^& Str ^> 0^) ? FFT3DFilter^(sigma=Str/1.4 ,plane=4, bw=64, bh=64, bt=1, ow=32, oh=32, measure=false^) : last
echo ^(Mode == 2 ^&^& Str ^> 0.4^) ? TBilateral^(diameterL=5,diameterC=5,sDevL=Str/8,sDevC=Str/8^) : last
echo LimitedSharpenFaster^(Smode=4,strength=LSF,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3^)
echo return last
echo }
) > "%%~nx.avs"
ADLANCAS
21st January 2007, 14:17
A nicer look, cleaned up, and a useful tool...
Thanks:D
Are you sure that you have loaded a filtered file with settings that I recommended ? It seems that you use original default values.
That version of the .BAT gave a script error when compare was set to false Script Error: Invalid arguments to function "Combo"
I hope that is fixed now.
Maybe I was not so clear in my last post.
My default values (most of my photos needs nearly this settings) is :
PhDenoise(Str=1.0,Mode=2,PP=2,LSF=150,AG=1.0,align=5,Cp=Cp1)
,but after some tests, optimal values for your photo that I found is PhDenoise(Str=2.0,Mode=2,PP=2,LSF=150,AG=1.5,align=5,Cp=Cp1). So you have to play with some photos to get an idea how should be your default.
By the way, after preview in each photo, iīve never used default values. Each photo has its own values.
In general, I found this values(not so big range of photos tested):
Str = Low noise (0.5 to 0.8); Medium noise (1.0 to 4.0)
Mode = Low noise (1); Medium noise (2)
PP = (2) Other values lost details of photos
LSF = (150) For my taste is a good value, but could be (100 to 200)
AG = Clear photos(0.0); Dark photos (1.0 to 2.0)
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.