18 |
19 |
19 using AlgTools.Util |
20 using AlgTools.Util |
20 using AlgTools.LinkedLists |
21 using AlgTools.LinkedLists |
21 using ImageTools.Denoise |
22 using ImageTools.Denoise |
22 using ImageTools.Visualise |
23 using ImageTools.Visualise |
|
24 using ImageTools.TVRecon |
|
25 using ImageTools.ImFilter |
23 |
26 |
24 # Parameters |
27 # Parameters |
25 const default_save_prefix="denoise_result_" |
28 const default_save_prefix="result_" |
26 |
29 |
27 const default_params = ( |
30 const default_params = ( |
28 α = 1, |
|
29 # PDPS |
|
30 # τ₀ = 5, |
|
31 # σ₀ = 0.99/5, |
|
32 # FISTA |
|
33 τ₀ = 0.9, |
|
34 ρ = 0, |
31 ρ = 0, |
35 accel = true, |
|
36 noise_level = 0.5, |
32 noise_level = 0.5, |
37 verbose_iter = 10, |
33 verbose_iter = 10, |
38 maxiter = 1000, |
34 maxiter = 1000, |
39 save_results = false, |
35 save_results = false, |
40 image_name = "lighthouse", |
36 image_name = "lighthouse", |
41 save_iterations = false |
37 save_iterations = false |
42 ) |
38 ) |
43 |
39 |
44 ####################### |
40 const denoise_params = ( |
45 # Main testing routine |
41 α = 2, |
46 ####################### |
42 # FISTA |
|
43 τ₀ = 0.9, |
|
44 accel = true, |
|
45 ) |
|
46 |
|
47 const deblur_params = ( |
|
48 α = 0.5, |
|
49 # PDPS |
|
50 τ₀ = 5, |
|
51 σ₀ = 0.99/5, |
|
52 accel = false, |
|
53 ) |
|
54 |
|
55 function save_results(params, b, b_data, x) |
|
56 if params.save_results |
|
57 perffile = params.save_prefix * ".txt" |
|
58 println("Saving " * perffile) |
|
59 write_log(perffile, st.log, "# params = $(params)\n") |
|
60 fn = (t, ext) -> "$(params.save_prefix)_$(t).$(ext)" |
|
61 save(File(format"PNG", fn("true", "png")), grayimg(b)) |
|
62 save(File(format"PNG", fn("data", "png")), grayimg(b_data)) |
|
63 save(File(format"PNG", fn("reco", "png")), grayimg(x)) |
|
64 end |
|
65 end |
|
66 |
|
67 ############### |
|
68 # Denoise test |
|
69 ############### |
47 |
70 |
48 function test_denoise(; |
71 function test_denoise(; |
49 visualise=true, |
72 visualise=true, |
50 save_prefix=default_save_prefix, |
73 save_prefix=default_save_prefix, |
51 kwargs...) |
74 kwargs...) |
52 |
75 |
53 |
|
54 # Parameters for this experiment |
76 # Parameters for this experiment |
55 params = default_params ⬿ kwargs |
77 params = default_params ⬿ denoise_params ⬿ kwargs |
56 params = params ⬿ (save_prefix = save_prefix * params.image_name,) |
78 params = params ⬿ (save_prefix = save_prefix * "denoise_" * params.image_name,) |
57 |
79 |
58 # Load image and add noise |
80 # Load image and add noise |
59 b = Float64.(Gray{Float64}.(TestImages.testimage(params.image_name))) |
81 b = Float64.(Gray{Float64}.(TestImages.testimage(params.image_name))) |
60 b_noisy = b .+ params.noise_level.*randn(size(b)...) |
82 b_noisy = b .+ params.noise_level.*randn(size(b)...) |
61 |
83 |
63 st, iterate = initialise_visualisation(visualise) |
85 st, iterate = initialise_visualisation(visualise) |
64 |
86 |
65 # Run algorithm |
87 # Run algorithm |
66 x, y, st = denoise_fista(b_noisy; iterate=iterate, params=params) |
88 x, y, st = denoise_fista(b_noisy; iterate=iterate, params=params) |
67 |
89 |
68 if params.save_results |
90 save_results(params, b, b_noisy, x) |
69 perffile = params.save_prefix * ".txt" |
91 |
70 println("Saving " * perffile) |
92 # Exit background visualiser |
71 write_log(perffile, st.log, "# params = $(params)\n") |
93 finalise_visualisation(st) |
72 fn = (t, ext) -> "$(params.save_prefix)_$(t).$(ext)" |
94 end |
73 save(File(format"PNG", fn("true", "png")), grayimg(b)) |
95 |
74 save(File(format"PNG", fn("data", "png")), grayimg(b_noisy)) |
96 ############## |
75 save(File(format"PNG", fn("reco", "png")), grayimg(x)) |
97 # Deblur test |
76 end |
98 ############## |
|
99 |
|
100 function test_deblur(; |
|
101 visualise=true, |
|
102 save_prefix=default_save_prefix, |
|
103 kwargs...) |
|
104 |
|
105 # Parameters for this experiment |
|
106 params = default_params ⬿ deblur_params ⬿ kwargs |
|
107 params = params ⬿ (save_prefix = save_prefix * "deblur_" * params.image_name,) |
|
108 |
|
109 # Load image and add noise |
|
110 b = Float64.(Gray{Float64}.(TestImages.testimage(params.image_name))) |
|
111 op = FilterKernel(gaussian(2, [7,7])) |
|
112 b_data = op(b .+ params.noise_level.*randn(size(b)...)) |
|
113 |
|
114 # Launch (background) visualiser |
|
115 st, iterate = initialise_visualisation(visualise) |
|
116 |
|
117 # Run algorithm |
|
118 x, y, st = recon_pdps(b_data, op; xinit=zeros(size(b)...), iterate=iterate, params=params) |
|
119 |
|
120 save_results(params, b, b_data, x) |
77 |
121 |
78 # Exit background visualiser |
122 # Exit background visualiser |
79 finalise_visualisation(st) |
123 finalise_visualisation(st) |
80 end |
124 end |
81 |
125 |