using Random
using Statistics
using TotalVariationImageFiltering
Random.seed!(42)
# Synthetic piecewise-constant image
n, m = 128, 128
clean = zeros(Float32, n, m)
clean[33:96, 33:96] .= 1f0
# Add Gaussian noise
noisy = clean .+ 0.15f0 * randn(Float32, n, m)
problem = TotalVariationImageFiltering.TVProblem(
noisy;
lambda = 0.12f0,
tv_mode = TotalVariationImageFiltering.IsotropicTV(),
spacing = (1.0f0, 1.0f0),
)
config = TotalVariationImageFiltering.ROFConfig(
maxiter = 1000,
tau = 0.0625f0,
tol = 1f-5,
check_every = 10,
)
denoised, stats = TotalVariationImageFiltering.solve(problem, config)
println("Converged: ", stats.converged)
println("Iterations: ", stats.iterations)
println("Relative change: ", stats.rel_change)
println("Noisy MSE: ", mean(abs2, noisy .- clean))
println("Denoised MSE: ", mean(abs2, denoised .- clean))