using ImageGeoms: ImageGeom, axis, axisf, axesf, downsample, grids, oversample import ImageGeoms # ellipse using AxisArrays using MIRTjim: jim, prompt using Plots: scatter, plot!, default; default(markerstrokecolor=:auto) using Unitful: mm, s using InteractiveUtils: versioninfo isinteractive() ? jim(:prompt, true) : prompt(:draw); ig = ImageGeom() ig = ImageGeom( (512,512,128), (1,1,2), (0,0,0) ) ig = ImageGeom( dims=(512,512,128), deltas=(1,1,2), offsets=(0,0,0) ) ig = ImageGeom( dims=(640,480,1000), deltas=(1mm,1mm,(1//12)s) ) ig = ImageGeom( dims=(7,8), deltas=(3,2), offsets=(0,0.5) ) axis(ig, 2) ig = ImageGeom( dims=(10,8), deltas=(1mm,1mm), offsets=(0.5,0.5) ) _ticks(x, off) = [x[1]; # hopefully helpful tick marks iseven(length(x)) && iszero(off) ? oneunit(eltype(x)) * [-0.5,0.5] : zero(eltype(x)); x[end]] showgrid = (ig) -> begin # x,y grid locations of pixel centers x = axis(ig, 1) y = axis(ig, 2) (xg, yg) = grids(ig) scatter(xg, yg; label="", xlabel="x", ylabel="y", xlims = extrema(x) .+ (ig.deltas[1] * 0.5) .* (-1,1), xticks = _ticks(x, ig.offsets[1]), ylims = extrema(y) .+ (ig.deltas[2] * 0.5) .* (-1,1), yticks = _ticks(y, ig.offsets[2]), widen = true, aspect_ratio = 1, title = "offsets $(ig.offsets)") end showgrid(ig) prompt() ig = ImageGeom( dims=(12,10), deltas=(1mm,1mm) ) p = showgrid(ig) prompt(); square = (x,y,Δ,p) -> plot!(p, label="", color=:black, x .+ Δ[1] * ([0,1,1,0,0] .- 0.5), y .+ Δ[2] * ([0,0,1,1,0] .- 0.5), ) square2 = (x,y) -> square(x, y, ig.deltas, p) square2.(grids(ig)...) plot!(p) prompt(); igo = ImageGeom( dims=(7,6) ) po = showgrid(igo) square2 = (x,y) -> square(x, y, igo.deltas, po) square2.(grids(igo)...) plot!(po) prompt(); ig = ImageGeom( dims=(60,48), deltas=(1.5mm,1mm) ) za = AxisArray( ImageGeoms.ellipse(ig) * 10/mm ; x=axis(ig,1), y=axis(ig,2) ) jim(za, "AxisArray example") prompt(); ig = ImageGeom( dims = (512,512), deltas = (500mm,500mm) ./ 512 ) ig_down = downsample(ig, 4) ig_over = oversample(ig, (2,2)) ig = ImageGeom( dims=(4,5), deltas=(1mm,1mm) ) axesf(ig) axisf(ig, 1) axisf(ig, 2) io = IOBuffer(); versioninfo(io); split(String(take!(io)), '\n') import Pkg; Pkg.status()