Tests/src/Tests.jl

Mon, 22 Dec 2025 14:23:18 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Mon, 22 Dec 2025 14:23:18 -0500
changeset 69
14a42aa4601a
parent 57
d3688b3c7c4e
permissions
-rw-r--r--

Dirty hack

9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 ##################
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
2 # Denoise testing
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
3 ##################
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
4
50
ef9d33ea4460 Rename TestDenoise to Tests
Tuomo Valkonen <tuomov@iki.fi>
parents: 43
diff changeset
5 module Tests
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
6
43
492a57594b88 Make denoise test script a proper project so it can be run easily.
Tuomo Valkonen <tuomov@iki.fi>
parents: 42
diff changeset
7 # Our exports
51
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
8 export test_denoise,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
9 test_deblur
43
492a57594b88 Make denoise test script a proper project so it can be run easily.
Tuomo Valkonen <tuomov@iki.fi>
parents: 42
diff changeset
10
492a57594b88 Make denoise test script a proper project so it can be run easily.
Tuomo Valkonen <tuomov@iki.fi>
parents: 42
diff changeset
11 # Dependencies
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
12 using Printf
25
1fba916f2b77 denoise test improvements: save results, don't depend on Images
Tuomo Valkonen <tuomov@iki.fi>
parents: 11
diff changeset
13 using FileIO
69
14a42aa4601a Dirty hack
Tuomo Valkonen <tuomov@iki.fi>
parents: 57
diff changeset
14 using ImageCore # We don't use ImageCore, but Julia is fiddly and fails if don't import ImageCore
25
1fba916f2b77 denoise test improvements: save results, don't depend on Images
Tuomo Valkonen <tuomov@iki.fi>
parents: 11
diff changeset
15 using ColorTypes: Gray
1fba916f2b77 denoise test improvements: save results, don't depend on Images
Tuomo Valkonen <tuomov@iki.fi>
parents: 11
diff changeset
16 # ColorVectorSpace is only needed to ensure that conversions
1fba916f2b77 denoise test improvements: save results, don't depend on Images
Tuomo Valkonen <tuomov@iki.fi>
parents: 11
diff changeset
17 # between different ColorTypes are defined.
1fba916f2b77 denoise test improvements: save results, don't depend on Images
Tuomo Valkonen <tuomov@iki.fi>
parents: 11
diff changeset
18 import ColorVectorSpace
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
19 import TestImages
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
21 using AlgTools.Util
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
22 using AlgTools.LinkedLists
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23 using ImageTools.Denoise
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24 using ImageTools.Visualise
51
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
25 using ImageTools.TVRecon
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
26 using ImageTools.ImFilter
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
27
43
492a57594b88 Make denoise test script a proper project so it can be run easily.
Tuomo Valkonen <tuomov@iki.fi>
parents: 42
diff changeset
28 # Parameters
51
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
29 const default_save_prefix="result_"
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
30
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
31 const default_params = (
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
32 ρ = 0,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
33 noise_level = 0.5,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
34 verbose_iter = 10,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
35 maxiter = 1000,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
36 save_results = false,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
37 image_name = "lighthouse",
25
1fba916f2b77 denoise test improvements: save results, don't depend on Images
Tuomo Valkonen <tuomov@iki.fi>
parents: 11
diff changeset
38 save_iterations = false
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
39 )
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
40
51
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
41 const denoise_params = (
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
42 α = 2,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
43 # FISTA
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
44 τ₀ = 0.9,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
45 accel = true,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
46 )
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
47
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
48 const deblur_params = (
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
49 α = 0.5,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
50 # PDPS
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
51 τ₀ = 5,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
52 σ₀ = 0.99/5,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
53 accel = false,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
54 )
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
55
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
56 function save_results(params, b, b_data, x)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
57 if params.save_results
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
58 perffile = params.save_prefix * ".txt"
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
59 println("Saving " * perffile)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
60 write_log(perffile, st.log, "# params = $(params)\n")
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
61 fn = (t, ext) -> "$(params.save_prefix)_$(t).$(ext)"
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
62 save(File(format"PNG", fn("true", "png")), grayimg(b))
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
63 save(File(format"PNG", fn("data", "png")), grayimg(b_data))
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
64 save(File(format"PNG", fn("reco", "png")), grayimg(x))
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
65 end
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
66 end
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
67
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
68 ###############
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
69 # Denoise test
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
70 ###############
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
71
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
72 function test_denoise(;
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
73 visualise=true,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
74 save_prefix=default_save_prefix,
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
75 kwargs...)
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
76
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
77 # Parameters for this experiment
51
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
78 params = default_params ⬿ denoise_params ⬿ kwargs
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
79 params = params ⬿ (save_prefix = save_prefix * "denoise_" * params.image_name,)
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
80
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
81 # Load image and add noise
69
14a42aa4601a Dirty hack
Tuomo Valkonen <tuomov@iki.fi>
parents: 57
diff changeset
82 b = Float64.(Gray{Float64}.(TestImages.testimage(params.image_name)))
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
83 b_noisy = b .+ params.noise_level.*randn(size(b)...)
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
84
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
85 # Launch (background) visualiser
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
86 st, iterate = initialise_visualisation(visualise)
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
87
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
88 # Run algorithm
28
d1f40f6654cb denoise_fista
Tuomo Valkonen <tuomov@iki.fi>
parents: 25
diff changeset
89 x, y, st = denoise_fista(b_noisy; iterate=iterate, params=params)
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
90
51
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
91 save_results(params, b, b_noisy, x)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
92
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
93 # Exit background visualiser
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
94 finalise_visualisation(st)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
95 end
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
96
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
97 ##############
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
98 # Deblur test
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
99 ##############
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
100
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
101 function test_deblur(;
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
102 visualise=true,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
103 save_prefix=default_save_prefix,
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
104 kwargs...)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
105
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
106 # Parameters for this experiment
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
107 params = default_params ⬿ deblur_params ⬿ kwargs
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
108 params = params ⬿ (save_prefix = save_prefix * "deblur_" * params.image_name,)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
109
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
110 # Load image and add noise
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
111 b = Float64.(Gray{Float64}.(TestImages.testimage(params.image_name)))
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
112 op = FilterKernel(gaussian(2, [7,7]))
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
113 b_data = op(b .+ params.noise_level.*randn(size(b)...))
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
114
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
115 # Launch (background) visualiser
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
116 st, iterate = initialise_visualisation(visualise)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
117
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
118 # Run algorithm
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
119 x, y, st = recon_pdps(b_data, op; xinit=zeros(size(b)...), iterate=iterate, params=params)
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
120
370931a692a1 Add deblurring test using PDPS
Tuomo Valkonen <tuomov@iki.fi>
parents: 50
diff changeset
121 save_results(params, b, b_data, x)
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
122
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
123 # Exit background visualiser
11
f1bbdf68f35b Use Threads.@spawn instead of the broken hang-prone Distributed.
Tuomo Valkonen <tuomov@iki.fi>
parents: 9
diff changeset
124 finalise_visualisation(st)
9
1cffd3d07fe2 Denoising routine for testing + visualisation tools
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
125 end
43
492a57594b88 Make denoise test script a proper project so it can be run easily.
Tuomo Valkonen <tuomov@iki.fi>
parents: 42
diff changeset
126
492a57594b88 Make denoise test script a proper project so it can be run easily.
Tuomo Valkonen <tuomov@iki.fi>
parents: 42
diff changeset
127 end

mercurial