31 lines
827 B
Julia
31 lines
827 B
Julia
using LinearAlgebra, Plots, Statistics
|
|
|
|
include("../11-3/readyalefaces_to_tensor.jl")
|
|
function interactiverec(F, iterstop::Union{Nothing, Integer}=nothing)
|
|
# given a 243x320 image F, displays it as sum of components
|
|
stdsize = (243, 320)
|
|
|
|
(X, _) = readyalefaces_to_tensor()
|
|
|
|
X = reshape(X, (prod(stdsize), Integer(prod(size(X)) / prod(stdsize))))
|
|
|
|
avg = mean(X, dims=2)
|
|
Xs = X .- avg
|
|
(U,S,V) = svd(X)
|
|
|
|
h = Plots.heatmap(reshape(avg, stdsize), yflip=true)
|
|
display(h)
|
|
|
|
if iterstop == nothing
|
|
upto = size(U, 2)
|
|
else
|
|
upto = min(size(U, 2), iterstop)
|
|
end
|
|
|
|
# no fancy slider, not enough time
|
|
for d ∈ 0:upto
|
|
h = heatmap(reshape(avg .+ U[:, 1:d] * U[:, 1:d]' * F, stdsize), yflip=true)
|
|
IJulia.clear_output(true)
|
|
display(h)
|
|
end
|
|
end |