To be able to edit code and run cells, you need to run the notebook yourself. Where would you like to run the notebook?

In the cloud (experimental)

Binder is a free, open source service that runs scientific notebooks in the cloud! It will take a while, usually 2-7 minutes to get a session.

On your computer

(Recommended if you want to store your changes.)

  1. Copy the notebook URL:
  2. Run Pluto

    (Also see: How to install Julia and Pluto)

  3. Paste URL in the Open box

Frontmatter

If you are publishing this notebook on the web, you can set the parameters below to provide HTML metadata. This is useful for search engines and social media.

Author 1

Click somewhere on the image

👀 Reading hidden code
8.2 ms
👀 Reading hidden code
1.7 s

The bound variable is the click position, as fractional coordinate (x,y)[0,1]2.

👀 Reading hidden code
5.0 ms
missing
👀 Reading hidden code
18.3 μs

We can use the dimensions of the image to turn that into integer indices:

👀 Reading hidden code
263 μs
click_pos = let
if click_coord_fractional === missing
(5,5)
else
x, y = click_coord_fractional

to_index(x, dim) = let
s = size(philip_head)[dim]
clamp(ceil(Int, x * s), 1, s)
end

to_index(y, 1), to_index(x, 2)
end
end
👀 Reading hidden code
1.3 ms
sample_1x1 = philip_head[click_pos[1], click_pos[2]]
👀 Reading hidden code
18.4 μs
sample_7x7 = let
row, col = click_pos
philip_head[row-3:row+3, col-3:col+3]
end
👀 Reading hidden code
39.7 μs

Tracker code

👀 Reading hidden code
222 μs
clicktracker (generic function with 1 method)
👀 Reading hidden code
5.2 ms

Appendix

👀 Reading hidden code
209 μs
begin
import Pkg
Pkg.activate(mktempdir())
Pkg.add([
Pkg.PackageSpec(name="Images", version="0.23"),
Pkg.PackageSpec(name="ImageMagick", version="1"),
Pkg.PackageSpec(name="PlutoUI", version="0.7"),
Pkg.PackageSpec(name="HypertextLiteral", version="0.5")
])

using Images
using PlutoUI
using HypertextLiteral
end
👀 Reading hidden code
❔
  Activating new project at `/tmp/jl_UCyAR8`
    Updating registry at `~/.julia/registries/General.toml`
   Resolving package versions...
   Installed PlutoUI ─ v0.7.9
    Updating `/tmp/jl_UCyAR8/Project.toml`
  [ac1192a8] + HypertextLiteral v0.5.2
  [6218d12a] + ImageMagick v1.3.0
  [916415d5] + Images v0.23.3
  [7f904dfe] + PlutoUI v0.7.9
    Updating `/tmp/jl_UCyAR8/Manifest.toml`
  [621f4979] + AbstractFFTs v1.5.0
  [79e6a3ab] + Adapt v4.2.0
  [13072b0f] + AxisAlgorithms v1.0.1
  [39de3d68] + AxisArrays v0.4.7
  [aafaddc9] + CatIndices v0.2.2
  [d360d2e6] + ChainRulesCore v1.25.1
  [9e997f8a] + ChangesOfVariables v0.1.9
  [3da002f7] + ColorTypes v0.10.12
  [c3611d14] + ColorVectorSpace v0.8.7
  [5ae59095] + Colors v0.12.11
  [34da2185] + Compat v4.16.0
  [ed09eef8] + ComputationalResources v0.3.2
  [150eb455] + CoordinateTransformations v0.6.3
  [dc8bdbbb] + CustomUnitRanges v1.0.2
  [9a962f9c] + DataAPI v1.16.0
  [864edb3b] + DataStructures v0.18.20
  [b4f34e82] + Distances v0.10.12
  [ffbed154] + DocStringExtensions v0.9.3
  [4f61f5a4] + FFTViews v0.3.2
  [7a1cc6ca] + FFTW v1.8.1
  [5789e2e9] + FileIO v1.17.0
  [53c48c17] + FixedPointNumbers v0.8.5
  [a2bd30eb] + Graphics v1.1.3
  [ac1192a8] + HypertextLiteral v0.5.2
  [bbac6d45] + IdentityRanges v0.3.1
  [2803e5a7] + ImageAxes v0.6.9
  [f332f351] + ImageContrastAdjustment v0.3.7
  [a09fc81d] + ImageCore v0.8.22
  [51556ac3] + ImageDistances v0.2.13
  [6a3955dd] + ImageFiltering v0.6.21
  [6218d12a] + ImageMagick v1.3.0
  [bc367c6b] + ImageMetadata v0.9.5
  [787d08f9] + ImageMorphology v0.2.11
  [2996bd0c] + ImageQualityIndexes v0.2.2
  [4e3cecfd] + ImageShow v0.2.3
  [02fcd773] + ImageTransformations v0.8.13
  [916415d5] + Images v0.23.3
  [9b13fd28] + IndirectArrays v0.5.1
  [a98d9a8b] + Interpolations v0.13.6
  [8197267c] + IntervalSets v0.7.10
  [3587e190] + InverseFunctions v0.1.17
  [92d709cd] + IrrationalConstants v0.1.1
  [c8e1da08] + IterTools v1.4.0
  [692b3bcd] + JLLWrappers v1.7.0
  [682c06a0] + JSON v0.21.4
  [2ab3a3ac] + LogExpFunctions v0.3.28
  [1914dd2f] + MacroTools v0.5.15
  [dbb5928d] + MappedArrays v0.4.2
  [e1d29d7a] + Missings v1.2.0
  [e94cdb99] + MosaicViews v0.3.4
  [77ba4419] + NaNMath v1.0.3
  [6fe1bfb0] + OffsetArrays v1.15.0
  [bac558e1] + OrderedCollections v1.8.0
  [5432bcbf] + PaddedViews v0.5.12
  [d96e819e] + Parameters v0.12.3
  [69de0a69] + Parsers v2.8.1
  [7f904dfe] + PlutoUI v0.7.9
  [aea7be01] + PrecompileTools v1.2.1
  [21216c6a] + Preferences v1.4.3
  [94ee1d12] + Quaternions v0.7.6
  [b3c3ace0] + RangeArrays v0.3.2
  [c84ed2f1] + Ratios v0.4.5
  [c1ae055f] + RealDot v0.1.0
  [3cdcf5f2] + RecipesBase v1.3.4
  [189a3867] + Reexport v1.2.2
  [ae029012] + Requires v1.3.1
  [6038ab10] + Rotations v1.7.1
  [699a6c99] + SimpleTraits v0.9.4
  [a2af1166] + SortingAlgorithms v1.2.1
  [276daf66] + SpecialFunctions v1.8.8
  [cae243ae] + StackViews v0.1.1
  [90137ffa] + StaticArrays v1.9.13
  [1e83bf80] + StaticArraysCore v1.4.3
  [82ae8749] + StatsAPI v1.7.0
  [2913bbd2] + StatsBase v0.33.21
  [fd094767] + Suppressor v0.2.8
  [06e1c1a7] + TiledIteration v0.3.1
  [3a884ed6] + UnPack v1.0.2
  [efce3f68] + WoodburyMatrices v0.5.6
  [f5851436] + FFTW_jll v3.3.10+3
  [c73af94c] + ImageMagick_jll v6.9.10-12+3
  [1d5cc7b8] + IntelOpenMP_jll v2025.0.4+0
  [aacddb02] + JpegTurbo_jll v3.1.1+0
  [88015f11] + LERC_jll v3.0.0+1
  [89763e89] + Libtiff_jll v4.4.0+0
  [856f044c] + MKL_jll v2025.0.1+1
  [efe28fd5] + OpenSpecFun_jll v0.5.6+0
  [3161d3a3] + Zstd_jll v1.5.7+1
  [b53b4c65] + libpng_jll v1.6.47+0
  [1317d2d5] + oneTBB_jll v2022.0.0+0
  [0dad84c5] + ArgTools
  [56f22d72] + Artifacts
  [2a0f44e3] + Base64
  [ade2ca70] + Dates
  [8ba89e20] + Distributed
  [f43a241f] + Downloads
  [7b1f6079] + FileWatching
  [b77e0a4c] + InteractiveUtils
  [4af54fe1] + LazyArtifacts
  [b27032c2] + LibCURL
  [76f85450] + LibGit2
  [8f399da3] + Libdl
  [37e2e46d] + LinearAlgebra
  [56ddb016] + Logging
  [d6f4376e] + Markdown
  [a63ad114] + Mmap
  [ca575930] + NetworkOptions
  [44cfe95a] + Pkg
  [de0858da] + Printf
  [3fa0cd96] + REPL
  [9a3f8284] + Random
  [ea8e919c] + SHA
  [9e88b42a] + Serialization
  [1a1011a3] + SharedArrays
  [6462fe0b] + Sockets
  [2f01184e] + SparseArrays
  [10745b16] + Statistics
  [fa267f1f] + TOML
  [a4e569a6] + Tar
  [8dfed614] + Test
  [cf7118a7] + UUIDs
  [4ec0a83e] + Unicode
  [e66e0078] + CompilerSupportLibraries_jll
  [deac9b47] + LibCURL_jll
  [29816b5a] + LibSSH2_jll
  [c8ffd9c3] + MbedTLS_jll
  [14a3606d] + MozillaCACerts_jll
  [4536629a] + OpenBLAS_jll
  [05823500] + OpenLibm_jll
  [83775a58] + Zlib_jll
  [8e850b90] + libblastrampoline_jll
  [8e850ede] + nghttp2_jll
  [3f19e933] + p7zip_jll
Precompiling project...
PlutoUI
  1 dependency successfully precompiled in 2 seconds (96 already precompiled)
8.6 s
"https://user-images.githubusercontent.com/6933510/107239146-dcc3fd00-6a28-11eb-8c7b-41aaf6618935.png"
url = "https://user-images.githubusercontent.com/6933510/107239146-dcc3fd00-6a28-11eb-8c7b-41aaf6618935.png"
👀 Reading hidden code
13.8 μs
"/tmp/jl_kvVhUp"
philip_filename = download(url) # download to a local file. The filename is returned
👀 Reading hidden code
1.1 s
philip = load(philip_filename);
👀 Reading hidden code
1.3 s
philip_head = philip[400:800,100:400];
👀 Reading hidden code
406 μs