From ba194b79453a1a77cca906fc02db4ed2a0fe9bee Mon Sep 17 00:00:00 2001 From: Adrian Hill Date: Fri, 16 Feb 2024 22:00:38 +0100 Subject: [PATCH 1/3] Add heatmap overlays --- Project.toml | 4 ++++ src/VisionHeatmaps.jl | 5 ++++- src/overlay.jl | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/overlay.jl diff --git a/Project.toml b/Project.toml index 33e8e19..1235937 100644 --- a/Project.toml +++ b/Project.toml @@ -6,8 +6,12 @@ version = "1.1.1" [deps] ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" ImageCore = "a09fc81d-aa75-5fe9-8630-4744c3626534" +ImageTransformations = "02fcd773-0e25-5acc-982a-7f6622650795" +Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" [compat] ColorSchemes = "3" ImageCore = "0.9, 0.10" +ImageTransformations = "0.10" +Interpolations = "0.15" julia = "1.6" diff --git a/src/VisionHeatmaps.jl b/src/VisionHeatmaps.jl index ddc158a..50952da 100644 --- a/src/VisionHeatmaps.jl +++ b/src/VisionHeatmaps.jl @@ -1,10 +1,13 @@ module VisionHeatmaps using ColorSchemes: ColorScheme, colorschemes, get, seismic +using ImageTransformations: imresize +using Interpolations: Lanczos using ImageCore include("heatmap.jl") +include("overlay.jl") -export heatmap +export heatmap, heatmap_overlay end # module diff --git a/src/overlay.jl b/src/overlay.jl new file mode 100644 index 0000000..23148f4 --- /dev/null +++ b/src/overlay.jl @@ -0,0 +1,43 @@ +const DEFAULT_OVERLAY_ALPHA = 0.6 + +""" + heatmap_overlay(val, img) + +Create a heatmap from `val` and overlay it on top of an image. +Assumes 4D input array following the WHCN convention +(width, height, color channels, batch dimension) and batch size 1. + +## Keyword arguments +- `alpha::Real`: Opacity of the heatmap overlay. Defaults to `$DEFAULT_OVERLAY_ALPHA`. +- `resize_method`: Method used to resize the heatmap in case of a size mismatch with the image. + Defaults to `Lanczos(1)` from Interpolations.jl. + +Further keyword arguments are passed to `heatmap`. +Refer to the [`heatmap`](@ref) documentation for more information. +""" +function heatmap_overlay( + val::AbstractArray{T,N}, + im::AbstractMatrix{<:Colorant}; + alpha=DEFAULT_OVERLAY_ALPHA, + resize_method=Lanczos(1), + kwargs..., +) where {T,N} + N != 4 && throw(InputDimensionError) + if size(val, 4) != 1 + throw( + ArgumentError( + "heatmap_overlay assumes a single heatmap, i.e. a 4D array with batch dimension 1.", + ), + ) + end + if alpha < 0 || alpha > 1 + throw(ArgumentError("alpha must be in the range [0, 1]")) + end + hm = heatmap(val; kwargs...) + hmsize = size(hm) + imsize = size(im) + if hmsize != imsize + hm = imresize(hm, imsize; method=resize_method) + end + return im * (1 - alpha) + hm * alpha +end From 67f42abeea9a46de7f55b64ce170ceb014574096 Mon Sep 17 00:00:00 2001 From: Adrian Hill Date: Fri, 16 Feb 2024 22:00:53 +0100 Subject: [PATCH 2/3] Add tests --- test/Manifest.toml | 207 +++++++++++++++++- test/Project.toml | 1 + test/references/overlay_inferno.txt | 1 + test/references/overlay_maxabs_centered.txt | 1 + test/references/overlay_maxabs_extrema.txt | 1 + test/references/overlay_norm_centered.txt | 1 + test/references/overlay_norm_extrema.txt | 1 + .../overlay_rescale_maxabs_centered.txt | 3 + .../overlay_rescale_maxabs_extrema.txt | 3 + .../overlay_rescale_norm_centered.txt | 3 + .../overlay_rescale_norm_extrema.txt | 3 + .../overlay_rescale_sum_centered.txt | 3 + .../overlay_rescale_sum_extrema.txt | 3 + test/references/overlay_sum_centered.txt | 1 + test/references/overlay_sum_extrema.txt | 1 + test/references/process_batch_false.txt | 2 +- test/references/process_batch_true.txt | 2 +- test/test_heatmap.jl | 28 +++ 18 files changed, 257 insertions(+), 8 deletions(-) create mode 100644 test/references/overlay_inferno.txt create mode 100644 test/references/overlay_maxabs_centered.txt create mode 100644 test/references/overlay_maxabs_extrema.txt create mode 100644 test/references/overlay_norm_centered.txt create mode 100644 test/references/overlay_norm_extrema.txt create mode 100644 test/references/overlay_rescale_maxabs_centered.txt create mode 100644 test/references/overlay_rescale_maxabs_extrema.txt create mode 100644 test/references/overlay_rescale_norm_centered.txt create mode 100644 test/references/overlay_rescale_norm_extrema.txt create mode 100644 test/references/overlay_rescale_sum_centered.txt create mode 100644 test/references/overlay_rescale_sum_extrema.txt create mode 100644 test/references/overlay_sum_centered.txt create mode 100644 test/references/overlay_sum_extrema.txt diff --git a/test/Manifest.toml b/test/Manifest.toml index 37407f9..fd6d0cd 100644 --- a/test/Manifest.toml +++ b/test/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.0-beta3" +julia_version = "1.10.1" manifest_format = "2.0" -project_hash = "0be457628dfd5d423c82c1e12d8129fa1cf18c88" +project_hash = "0e0600168384b7f99b1c10db2ca1a3612ff221e5" [[deps.Aqua]] deps = ["Compat", "Pkg", "Test"] @@ -20,35 +20,120 @@ uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "67c1f244b991cad9b0aa4b7540fb758c2488b129" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.24.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.4" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + + [deps.ColorVectorSpace.weakdeps] + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.10" + [[deps.Compat]] deps = ["UUIDs"] git-tree-sha1 = "8a62af3e248a8c4bad6b32cbbe663ae02275e32c" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" version = "4.10.0" +weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] CompatLinearAlgebraExt = "LinearAlgebra" - [deps.Compat.weakdeps] - Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.0+0" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +[[deps.DeepDiffs]] +git-tree-sha1 = "9824894295b62a6a4ab6adf1c7bf337b3a9ca34c" +uuid = "ab62b9b5-e342-54a8-a765-a90f495de1a6" +version = "1.2.0" + +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.11" + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + + [deps.Distances.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "c5c28c245101bd59154f649e19b038d15901b5dc" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.2" + [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageCore]] +deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "b2a7eaa169c13f5bcae8131a83bc30eff8f71be0" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.2" + [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" @@ -57,7 +142,7 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.0.1+1" +version = "8.4.0+0" [[deps.LibGit2]] deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] @@ -76,9 +161,18 @@ version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +[[deps.MappedArrays]] +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.2" + [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" @@ -88,6 +182,12 @@ deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.2+1" +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2023.1.10" @@ -96,11 +196,45 @@ version = "2023.1.10" uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" +[[deps.OffsetArrays]] +git-tree-sha1 = "6a731f2b5c03157418a20c12195eb4b74c8f8621" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.13.0" + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + + [deps.OffsetArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.12" + [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" version = "1.10.0" +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.0" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.1" + [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" @@ -113,6 +247,23 @@ uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.ReferenceTests]] +deps = ["Colors", "DeepDiffs", "Distances", "FileIO", "ImageCore", "LazyModules", "Random", "SHA", "Test", "XTermColors"] +git-tree-sha1 = "2b5ce86595240f17e434530c3f98cad09b4329c8" +uuid = "324d217c-45ce-50fc-942e-d289b448e8cf" +version = "0.10.3" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" @@ -123,6 +274,33 @@ uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" @@ -133,6 +311,12 @@ deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" version = "1.10.0" +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -144,11 +328,22 @@ uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +[[deps.XTermColors]] +deps = ["Crayons", "ImageBase", "OffsetArrays"] +git-tree-sha1 = "bc27b7622a51f570c57b80bd839d1c0d43605b38" +uuid = "c8c2cc18-de81-4e68-b407-38a3a0c0491f" +version = "0.2.1" + [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" version = "1.2.13+1" +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+1" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" diff --git a/test/Project.toml b/test/Project.toml index 5483300..8d17b7d 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,6 +1,7 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +ImageCore = "a09fc81d-aa75-5fe9-8630-4744c3626534" ReferenceTests = "324d217c-45ce-50fc-942e-d289b448e8cf" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/references/overlay_inferno.txt b/test/references/overlay_inferno.txt new file mode 100644 index 0000000..0e76209 --- /dev/null +++ b/test/references/overlay_inferno.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/overlay_maxabs_centered.txt b/test/references/overlay_maxabs_centered.txt new file mode 100644 index 0000000..57d3560 --- /dev/null +++ b/test/references/overlay_maxabs_centered.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/overlay_maxabs_extrema.txt b/test/references/overlay_maxabs_extrema.txt new file mode 100644 index 0000000..0c01456 --- /dev/null +++ b/test/references/overlay_maxabs_extrema.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/overlay_norm_centered.txt b/test/references/overlay_norm_centered.txt new file mode 100644 index 0000000..57d3560 --- /dev/null +++ b/test/references/overlay_norm_centered.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/overlay_norm_extrema.txt b/test/references/overlay_norm_extrema.txt new file mode 100644 index 0000000..0c01456 --- /dev/null +++ b/test/references/overlay_norm_extrema.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/overlay_rescale_maxabs_centered.txt b/test/references/overlay_rescale_maxabs_centered.txt new file mode 100644 index 0000000..e7a720c --- /dev/null +++ b/test/references/overlay_rescale_maxabs_centered.txt @@ -0,0 +1,3 @@ +▀▀▀▀▀▀ +▀▀▀▀▀▀ +▀▀▀▀▀▀ \ No newline at end of file diff --git a/test/references/overlay_rescale_maxabs_extrema.txt b/test/references/overlay_rescale_maxabs_extrema.txt new file mode 100644 index 0000000..bccc955 --- /dev/null +++ b/test/references/overlay_rescale_maxabs_extrema.txt @@ -0,0 +1,3 @@ +▀▀▀▀▀▀ +▀▀▀▀▀▀ +▀▀▀▀▀▀ \ No newline at end of file diff --git a/test/references/overlay_rescale_norm_centered.txt b/test/references/overlay_rescale_norm_centered.txt new file mode 100644 index 0000000..863212c --- /dev/null +++ b/test/references/overlay_rescale_norm_centered.txt @@ -0,0 +1,3 @@ +▀▀▀▀▀▀ +▀▀▀▀▀▀ +▀▀▀▀▀▀ \ No newline at end of file diff --git a/test/references/overlay_rescale_norm_extrema.txt b/test/references/overlay_rescale_norm_extrema.txt new file mode 100644 index 0000000..d46bb45 --- /dev/null +++ b/test/references/overlay_rescale_norm_extrema.txt @@ -0,0 +1,3 @@ +▀▀▀▀▀▀ +▀▀▀▀▀▀ +▀▀▀▀▀▀ \ No newline at end of file diff --git a/test/references/overlay_rescale_sum_centered.txt b/test/references/overlay_rescale_sum_centered.txt new file mode 100644 index 0000000..bcfcb11 --- /dev/null +++ b/test/references/overlay_rescale_sum_centered.txt @@ -0,0 +1,3 @@ +▀▀▀▀▀▀ +▀▀▀▀▀▀ +▀▀▀▀▀▀ \ No newline at end of file diff --git a/test/references/overlay_rescale_sum_extrema.txt b/test/references/overlay_rescale_sum_extrema.txt new file mode 100644 index 0000000..bccc955 --- /dev/null +++ b/test/references/overlay_rescale_sum_extrema.txt @@ -0,0 +1,3 @@ +▀▀▀▀▀▀ +▀▀▀▀▀▀ +▀▀▀▀▀▀ \ No newline at end of file diff --git a/test/references/overlay_sum_centered.txt b/test/references/overlay_sum_centered.txt new file mode 100644 index 0000000..57d3560 --- /dev/null +++ b/test/references/overlay_sum_centered.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/overlay_sum_extrema.txt b/test/references/overlay_sum_extrema.txt new file mode 100644 index 0000000..0c01456 --- /dev/null +++ b/test/references/overlay_sum_extrema.txt @@ -0,0 +1 @@ +▀▀ \ No newline at end of file diff --git a/test/references/process_batch_false.txt b/test/references/process_batch_false.txt index 4fff15b..c398d8c 100644 --- a/test/references/process_batch_false.txt +++ b/test/references/process_batch_false.txt @@ -1 +1 @@ -Matrix{ColorTypes.RGB{Float64}}[[RGB{Float64}(1.0,0.0,0.0) RGB{Float64}(0.8333333333333331,0.0,0.0); RGB{Float64}(0.6666666666666666,0.0,0.0) RGB{Float64}(0.5,0.0,0.0)], [RGB{Float64}(0.7142857142857142,0.0,0.0) RGB{Float64}(0.6428571428571428,0.0,0.0); RGB{Float64}(0.5714285714285714,0.0,0.0) RGB{Float64}(0.5,0.0,0.0)]] \ No newline at end of file +Matrix{RGB{Float64}}[[RGB{Float64}(1.0,0.0,0.0) RGB{Float64}(0.8333333333333331,0.0,0.0); RGB{Float64}(0.6666666666666666,0.0,0.0) RGB{Float64}(0.5,0.0,0.0)], [RGB{Float64}(0.7142857142857142,0.0,0.0) RGB{Float64}(0.6428571428571428,0.0,0.0); RGB{Float64}(0.5714285714285714,0.0,0.0) RGB{Float64}(0.5,0.0,0.0)]] \ No newline at end of file diff --git a/test/references/process_batch_true.txt b/test/references/process_batch_true.txt index 3c450ce..43914ae 100644 --- a/test/references/process_batch_true.txt +++ b/test/references/process_batch_true.txt @@ -1 +1 @@ -Matrix{ColorTypes.RGB{Float64}}[[RGB{Float64}(1.0,0.5714285714285714,0.5714285714285714) RGB{Float64}(1.0,0.4285714285714283,0.4285714285714283); RGB{Float64}(1.0,0.2857142857142856,0.2857142857142856) RGB{Float64}(1.0,0.1428571428571428,0.1428571428571428)], [RGB{Float64}(0.7142857142857142,0.0,0.0) RGB{Float64}(0.6428571428571428,0.0,0.0); RGB{Float64}(0.5714285714285714,0.0,0.0) RGB{Float64}(0.5,0.0,0.0)]] \ No newline at end of file +Matrix{RGB{Float64}}[[RGB{Float64}(1.0,0.5714285714285714,0.5714285714285714) RGB{Float64}(1.0,0.4285714285714283,0.4285714285714283); RGB{Float64}(1.0,0.2857142857142856,0.2857142857142856) RGB{Float64}(1.0,0.1428571428571428,0.1428571428571428)], [RGB{Float64}(0.7142857142857142,0.0,0.0) RGB{Float64}(0.6428571428571428,0.0,0.0); RGB{Float64}(0.5714285714285714,0.0,0.0) RGB{Float64}(0.5,0.0,0.0)]] \ No newline at end of file diff --git a/test/test_heatmap.jl b/test/test_heatmap.jl index 9d55500..9cd8e13 100644 --- a/test/test_heatmap.jl +++ b/test/test_heatmap.jl @@ -1,9 +1,14 @@ +using ImageCore + shape = (2, 2, 3, 1) A = reshape(collect(Float32, 1:prod(shape)), shape) shape = (2, 2, 3, 2) batch = reshape(collect(Float32, 1:prod(shape)), shape) +img = [RGB(1, 0, 0) RGB(0, 1, 0); RGB(0, 0, 1) RGB(1, 1, 1)] +img2 = [RGB(x, y, 0) for x in 0:0.2:1, y in 0:0.2:1] + reducers = [:sum, :maxabs, :norm] rangescales = [:extrema, :centered] @@ -14,9 +19,23 @@ rangescales = [:extrema, :centered] @test_reference "references/$(reducer)_$(rangescale).txt" h h2 = heatmap(A; reduce=reducer, rangescale=rangescale, unpack_singleton=false)[1] @test h ≈ h2 + + ho = heatmap_overlay(A, img; reduce=reducer, rangescale=rangescale) + @test size(ho) == size(img) + @test_reference "references/overlay_$(reducer)_$(rangescale).txt" ho end end end +@testset "Overlay rescaling" begin + for reducer in reducers + for rangescale in rangescales + ho = heatmap_overlay(A, img2; reduce=reducer, rangescale=rangescale) + @test size(ho) == size(img2) + @test_reference "references/overlay_rescale_$(reducer)_$(rangescale).txt" ho + end + end +end + @testset "Batched input" begin for reducer in reducers for rangescale in rangescales @@ -34,12 +53,21 @@ end # Test colorscheme symbols h = heatmap(A; colorscheme=:inferno) @test_reference "references/inferno.txt" h + + ho = heatmap_overlay(A, img; colorscheme=:inferno) + @test_reference "references/overlay_inferno.txt" ho + ho = heatmap_overlay(A, img; colorscheme=ColorSchemes.inferno) + @test_reference "references/overlay_inferno.txt" ho end @testset "Error handling" begin @test_throws ArgumentError heatmap(A, reduce=:foo) @test_throws ArgumentError heatmap(A, rangescale=:bar) + @test_throws ArgumentError heatmap_overlay(batch, img) + @test_throws ArgumentError heatmap_overlay(A, img; alpha=2) + @test_throws ArgumentError heatmap_overlay(A, img; alpha=-1) + B = reshape(A, 2, 2, 3, 1, 1) @test_throws ArgumentError heatmap(B) B = reshape(A, 2, 2, 3) From 9f41f1f6a2acf5c83719a3fb8a19d98fa59ef91e Mon Sep 17 00:00:00 2001 From: Adrian Hill Date: Fri, 16 Feb 2024 22:09:46 +0100 Subject: [PATCH 3/3] Update API reference --- docs/src/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/index.md b/docs/src/index.md index 04662ff..ee75845 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -15,4 +15,5 @@ To install this package and its dependencies, open the Julia REPL and run ## API ```@docs heatmap +heatmap_overlay ```