#using Pkg
#Pkg.add("Images")
#Pkg.add("ImageMagick")
Updating registry at `C:\Users\llinp\.julia\registries\General` Updating git-repo `https://github.com/JuliaRegistries/General.git` Resolving package versions... Installed MappedArrays ────────────── v0.4.1 Installed ImageIO ─────────────────── v0.6.6 Installed ComputationalResources ──── v0.3.2 Installed Images ──────────────────── v0.25.2 Installed QOI ─────────────────────── v1.0.0 Installed ImageMagick ─────────────── v1.2.2 Installed LazyModules ─────────────── v0.3.1 Installed RegionTrees ─────────────── v0.3.2 Installed MosaicViews ─────────────── v0.3.3 Installed Netpbm ──────────────────── v1.0.2 Installed ImageSegmentation ───────── v1.7.0 Installed ImageQualityIndexes ─────── v0.3.3 Installed CoordinateTransformations ─ v0.6.2 Installed ImageDistances ──────────── v0.2.16 Installed IndirectArrays ──────────── v1.0.0 Installed ImageTransformations ────── v0.9.5 Installed CustomUnitRanges ────────── v1.0.2 Installed TiledIteration ──────────── v0.3.1 Installed Imath_jll ───────────────── v3.1.2+0 Installed CatIndices ──────────────── v0.2.2 Installed SimpleWeightedGraphs ────── v1.2.1 Installed Ratios ──────────────────── v0.4.3 Installed Rotations ───────────────── v1.3.3 Installed OpenEXR ─────────────────── v0.3.2 Installed FileIO ──────────────────── v1.16.0 Installed WoodburyMatrices ────────── v0.5.5 Installed libpng_jll ──────────────── v1.6.38+0 Installed OpenEXR_jll ─────────────── v3.1.1+0 Installed IntegralArrays ──────────── v0.1.5 Installed AxisAlgorithms ──────────── v1.0.1 Installed ProgressMeter ───────────── v1.7.2 Installed Quaternions ─────────────── v0.6.1 Installed PaddedViews ─────────────── v0.5.11 Installed RangeArrays ─────────────── v0.3.2 Installed ImageMagick_jll ─────────── v6.9.10-12+3 Installed ImageAxes ───────────────── v0.6.10 Installed ImageFiltering ──────────── v0.7.2 Installed NearestNeighbors ────────── v0.4.12 Installed PkgVersion ──────────────── v0.1.1 Installed TiffImages ──────────────── v0.6.0 Installed IterTools ───────────────── v1.4.0 Installed Interpolations ──────────── v0.14.6 Installed ImageCore ───────────────── v0.9.4 Installed Libtiff_jll ─────────────── v4.4.0+0 Installed Sixel ───────────────────── v0.1.2 Installed Graphs ──────────────────── v1.5.0 Installed PNGFiles ────────────────── v0.3.17 Installed ImageBase ───────────────── v0.1.5 Installed AxisArrays ──────────────── v0.4.6 Installed MetaGraphs ──────────────── v0.7.1 Installed JpegTurbo ───────────────── v0.1.1 Installed ColorVectorSpace ────────── v0.9.9 Installed Clustering ──────────────── v0.14.3 Installed StackViews ──────────────── v0.1.1 Installed ImageShow ───────────────── v0.3.6 Installed Graphics ────────────────── v1.1.2 Installed libsixel_jll ────────────── v1.10.3+0 Installed LERC_jll ────────────────── v3.0.0+1 Installed ImageMetadata ───────────── v0.9.8 Installed ImageMorphology ─────────── v0.3.2 Installed JLD2 ────────────────────── v0.4.25 Installed JpegTurbo_jll ───────────── v2.1.2+0 Installed TensorCore ──────────────── v0.1.1 Installed FFTViews ────────────────── v0.3.2 Installed ImageContrastAdjustment ─── v0.3.10 Updating `C:\Users\llinp\.julia\environments\v1.6\Project.toml` [916415d5] + Images v0.25.2 Updating `C:\Users\llinp\.julia\environments\v1.6\Manifest.toml` [13072b0f] + AxisAlgorithms v1.0.1 [39de3d68] + AxisArrays v0.4.6 [aafaddc9] + CatIndices v0.2.2 [aaaa29a8] + Clustering v0.14.3 [c3611d14] + ColorVectorSpace v0.9.9 [ed09eef8] + ComputationalResources v0.3.2 [150eb455] + CoordinateTransformations v0.6.2 [dc8bdbbb] + CustomUnitRanges v1.0.2 [4f61f5a4] + FFTViews v0.3.2 [5789e2e9] + FileIO v1.16.0 [a2bd30eb] + Graphics v1.1.2 [86223c79] + Graphs v1.5.0 [2803e5a7] + ImageAxes v0.6.10 [c817782e] + ImageBase v0.1.5 [f332f351] + ImageContrastAdjustment v0.3.10 [a09fc81d] + ImageCore v0.9.4 [51556ac3] + ImageDistances v0.2.16 [6a3955dd] + ImageFiltering v0.7.2 [82e4d734] + ImageIO v0.6.6 [6218d12a] + ImageMagick v1.2.2 [bc367c6b] + ImageMetadata v0.9.8 [787d08f9] + ImageMorphology v0.3.2 [2996bd0c] + ImageQualityIndexes v0.3.3 [80713f31] + ImageSegmentation v1.7.0 [4e3cecfd] + ImageShow v0.3.6 [02fcd773] + ImageTransformations v0.9.5 [916415d5] + Images v0.25.2 [9b13fd28] + IndirectArrays v1.0.0 [1d092043] + IntegralArrays v0.1.5 [a98d9a8b] + Interpolations v0.14.6 [c8e1da08] + IterTools v1.4.0 [033835bb] + JLD2 v0.4.25 [b835a17e] + JpegTurbo v0.1.1 [8cdb02fc] + LazyModules v0.3.1 [dbb5928d] + MappedArrays v0.4.1 [626554b9] + MetaGraphs v0.7.1 [e94cdb99] + MosaicViews v0.3.3 [b8a86587] + NearestNeighbors v0.4.12 [f09324ee] + Netpbm v1.0.2 [52e1d378] + OpenEXR v0.3.2 [f57f5aa1] + PNGFiles v0.3.17 [5432bcbf] + PaddedViews v0.5.11 [eebad327] + PkgVersion v0.1.1 [92933f4c] + ProgressMeter v1.7.2 [4b34888f] + QOI v1.0.0 [94ee1d12] + Quaternions v0.6.1 [b3c3ace0] + RangeArrays v0.3.2 [c84ed2f1] + Ratios v0.4.3 [dee08c22] + RegionTrees v0.3.2 [6038ab10] + Rotations v1.3.3 [47aef6b3] + SimpleWeightedGraphs v1.2.1 [45858cf5] + Sixel v0.1.2 [cae243ae] + StackViews v0.1.1 [62fd8b95] + TensorCore v0.1.1 [731e570b] + TiffImages v0.6.0 [06e1c1a7] + TiledIteration v0.3.1 [efce3f68] + WoodburyMatrices v0.5.5 [c73af94c] + ImageMagick_jll v6.9.10-12+3 [905a6f67] + Imath_jll v3.1.2+0 [aacddb02] + JpegTurbo_jll v2.1.2+0 [88015f11] + LERC_jll v3.0.0+1 [89763e89] + Libtiff_jll v4.4.0+0 [18a262bb] + OpenEXR_jll v3.1.1+0 [b53b4c65] + libpng_jll v1.6.38+0 [075b6546] + libsixel_jll v1.10.3+0 Precompiling project... ✓ IndirectArrays ✓ IterTools ✓ ProgressMeter ✓ MappedArrays ✓ Quaternions ✓ CustomUnitRanges ✓ WoodburyMatrices ✓ RangeArrays ✓ PkgVersion ✓ LazyModules ✓ Ratios ✓ TensorCore ✓ ComputationalResources ✓ TiledIteration ✓ PaddedViews ✓ StackViews ✓ libpng_jll ✓ CoordinateTransformations ✓ JpegTurbo_jll ✓ FileIO ✓ Imath_jll ✓ LERC_jll ✓ Graphics ✓ NearestNeighbors ✓ IntegralArrays ✓ FFTViews ✓ CatIndices ✓ RegionTrees ✓ AxisAlgorithms ✓ Graphs ✓ MosaicViews ✓ AxisArrays ✓ Rotations ✓ libsixel_jll ✓ QOI ✓ ColorVectorSpace ✓ OpenEXR_jll ✓ Libtiff_jll ✓ Clustering ✓ SimpleWeightedGraphs ✓ Interpolations ✓ OpenEXR ✓ ImageMagick_jll ✓ JLD2 ✓ MetaGraphs ✓ ImageCore ✓ ImageMorphology ✓ ImageBase ✓ PNGFiles ✓ ImageMagick ✓ Sixel ✓ JpegTurbo ✓ Netpbm ✓ ImageDistances ✓ ImageShow ✓ ImageAxes ✓ ImageTransformations ✓ ImageMetadata ✓ TiffImages ✓ ImageIO ✓ ImageContrastAdjustment ✓ ImageFiltering ✓ ImageQualityIndexes ✓ ImageSegmentation ✓ Images 65 dependencies successfully precompiled in 72 seconds (177 already precompiled)
using Images
using LinearAlgebra
img = load("./duck.jpg");
display(img)
display(Gray.(img))
# convert to a matrix
A=float64.(channelview(Gray.(img[:,:])))
println("size of A = ", size(A,1)," x ", size(A,2))
println("storage = ", size(A,1) * size(A,2))
size of A = 247 x 230 storage = 56810
A
247×230 Matrix{Float64}: 0.984314 0.984314 0.984314 0.984314 … 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 … 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 … 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 ⋮ ⋱ 0.984314 0.984314 0.984314 0.984314 … 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 … 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.984314 0.988235 0.988235 0.988235 0.988235 … 0.988235 0.988235 0.988235 0.996078 0.996078 0.996078 0.996078 0.996078 0.996078 0.996078
U, S, V = svd(A)
# check the accuracy of SVD
print("||USV'-A||=", norm(U*diagm(S)*V' - A))
||USV'-A||=3.866466999562912e-13
rank_list = [1,5,10,20,30,40]
for rank in rank_list
Acompress = U[:,1:rank] * diagm(S[1:rank]) * V[:,1:rank]'
println("Compression rank = ", rank)
println("Storage = ", (size(A,1)+size(A,2))*rank)
flush(stdout)
display(Gray.(Acompress))
end
Compression rank = 1 Storage = 477
Compression rank = 5 Storage = 2385
Compression rank = 10 Storage = 4770
Compression rank = 20 Storage = 9540
Compression rank = 30 Storage = 14310
Compression rank = 40 Storage = 19080
Show the decay of the singular values
using PyPlot
plot(S, "b-.")
title("singular values, linear-scale")
PyObject Text(0.5, 1.0, 'singular values, linear-scale')
semilogy(S, "b-.")
title("singular values, log-scale")
PyObject Text(0.5, 1.0, 'singular values, log-scale')