Skip to content

Commit f2b1e7f

Browse files
committed
Merge branch 'dev/0.5.4' into 'main'
Start branch for dev/0.5.4 See merge request computer-vision/kwplot!24
2 parents 223619f + bceed03 commit f2b1e7f

13 files changed

Lines changed: 319 additions & 194 deletions

‎.gitlab-ci.yml‎

Lines changed: 148 additions & 84 deletions
Large diffs are not rendered by default.

‎CHANGELOG.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@
33
This changelog follows the specifications detailed in: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
44
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), although we have not yet reached a `1.0.0` release.
55

6-
## Version 0.5.3 - Unreleased
6+
## Version 0.5.4 - Released 2025-06-30
77

88
### Fix
99
* Fixed `ffmpeg_animate_frames` to handle paths and ndarrays
1010

1111
### Added
1212
* Add Palette class
1313
* Add relabel argument to FigureManager to automatically relabel on finalize
14+
* Add `draw_polyline`
15+
16+
17+
### Changed
18+
* Improved adjust gui
1419

1520

1621
## Version 0.5.2 - Released 2024-09-09

‎dev/ci_public_gpg_key.pgp.enc‎

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
1-
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
35-
r5RSkSdskxNZzK7fKF+wIQ==
1+
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
35+
tPoiV4xZcr+zhaeQ++eSlQ==

‎dev/ci_secret_gpg_subkeys.pgp.enc‎

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
U2FsdGVkX18wD6UK4/XsYu+aJPdSk7yFA9uXu76GC4X7JzfMUjAltMesOMBFJozQ
2-
cJDOoVH921zgy1RB8+qFWJ485hTPAdKi9sxQG7FbXOMAex3sqbYZcQ1tyhk49NFb
3-
MJeJ1xRgY5nnsFBRCe3/43k0zyz2fiuz7rELcGqiUHPy/iWhcwLTLfu4DfaaoM9T
4-
147BJuVKBE4OIPwNNcwb/ULJgPcGe5jsZkYjhWQBU4wnkEKLAPYKLPY2vKhTRdFK
5-
+JxJ9ArObI0ece4z4vxWGcKNfK4wbDCk+kJP40HdcJcuIk2FuKioLvDaHoHUxi8B
6-
Eq7yx8PAdK1hZS3T3xgVaOs0IGxmIczK4DrCs0vTKzQWTqAJGwiM/r3YQJKSIsEC
7-
T81qxxCwU7QUeQPd3SPF7m7oPXCmSNMlyc5zS+2ud9ViwVibBvo9iaUcZF/fCHuE
8-
iv6G799XuF13JAD0iJ8DpFfh4vPTCI9iGZeXCnLZWgsN1hhda/UQMQiSmAHSETw7
9-
rNRtCaackkqaWeV2Y736OF0eQ8V8kmk2ZscaX/GBMu2gCmQ9HZrNJ4hw13oGxEwm
10-
gZ/TyitBD8zVGQziqC0ZE8zDZAnM1VjJ2CISAdJlZyUVXaR4mcbVWF9HkWP0zhBu
11-
nGeOefZDOMM3W4/VUdqngybY9dV32lgfCm3M1jG+NGMCpkdYvNaeKvX46Japm3xB
12-
ZooXE+j0+mw9tRBU2LZMSYaKqtjUuAGDR08GyC0v6PsRopzAeMZcK1qHNOjwoTTp
13-
3msRLp3fWCiecgMHMcKqI1YQomP2zBA7yULi4K90OtALvtm9jgHl3kgyALyYPLoY
14-
AGug2cbsgHWj95IKmQ27MPDuF0GCJODvk3tvCiLhS0+V6reQAofj9U/Cd0hXGF3k
15-
T26wE/IY7XA1CpEFnmQn9QyRc0AMy4Ph9iuvJMKcbNRexlLIQs5g4lJUdZo1oTCJ
16-
W4jEPBOR1DDIniP0ewh3njr/SsCkE4bqCnZhYMI2089A8kiwY7OeQktElkkFekEQ
17-
8r8OkI8Y1lz9dGuZFH/nAa3hs17gKEbmNWcg6bLbHZ8Wm6QRwhCNpeChoyLh9jAy
18-
7UaVc4mvdYjer8LAzYsuq+951IKfUnW/QqOo/3XhpOLztwdxUiStqRnDwRiN847d
19-
zx0e5CWWcnxqZS5V2T48NGvjUHVXBuRy1dYQLn4oFTer/nWzJ78vM0gqfpNzAgQn
20-
j6DtkV+SoVVTKsKTtQ0o7KZzsTIA59sLHQ35efoomnZ0uDyIX/yjbzFFZFg8tUy+
21-
o81V2aDp72/idKb0Whe9XkT1TW9gUVMjhTWA7trbEBBcHpSF2dKKRov01DLnBuml
22-
XdODxG0uYpvjp/aJ//sUX4aObyHq00DZACB9R8J/k4V9AqaIosDNc56iGDHGkHrQ
23-
p/AK4vIhFJ4GLATmfZ25NEpWaBuebZaWAyegIZ53KJKUgGtP/B4MkoF2CS2ckfB0
24-
x+DrhPkBG+ex33ONjEIAGbwBUnKsrag8ecsQnQO7lrRp396cgiazfAL94C/2uzl/
25-
5CKhIyI1zR+aCMMFBnrbaj3Jx130G1O2nauyGqGTY6PUVMWXn/xt00R+CvoXnoKp
26-
Swi/hIaYDA49BqK0+HS56QI8nu9piiZPkQbIY6KE3pJ4euhDkuNtnEGWJesegnZQ
27-
9nuKkN/XwBL59X2WERT3LdBKSapwm8WBwBea/jQ+c8v0dMEWoshdeS34G3zBWA4C
1+
U2FsdGVkX1+cqD0m1BWakdm4rUmNjK4XPwFLN1m0UjCrH3W9HLHY18kCsU1UamA4
2+
0a0NWm40UKyAAIXmZLpUz8LQL90H3MYz4SBt4Exqb7G/UPgG6KaqlA/h3qZ5fCy/
3+
qD2AxTHo8+xCG59pNGkvjX09bkYqXLH1xk8e3L5n7RuWXZ1IxMfFOFmZLQ689tDk
4+
L6NhOQJoH15FUSrptOMhwiiOMaqckCfo2V3V9WmIQnBdsdvewMZDWhSnCku93NtK
5+
2aB0X23a4lSGVBFpHkXElsiQfjD36LHrlSFJGvSp3BTUx2fsLQRSXn6rPu+NDuad
6+
Z9YYD5InsJfuchn6BwsJjzlZ0BMlG56ZPKPdB1kORtfu5Bu1f35Lm4htcj624Obl
7+
lnxCLJ17zskb+YH+NZLxPrb7gsJKvvazHXWcERUQVNpfFuE+Ozf2yAhKwciSfFnr
8+
uPP8IZeEFuJKoLamPJMVNjCi7qe0zIrFIGhLNxuU9xYFvPUYTu7c9OubnfzgLLV8
9+
ApNff3EOkZPGjORkW1opZ9j2Ws6/DuiYOn+guPoDHohBAbNqiOC8SpH/fSOgMrCE
10+
nsxXD/GdK29oJHqMh30lDgdMK9IVw4Y9PjGAs9HO4aY1aJK+UTa+VgL9VC+GGaMP
11+
RiXjmDInyWoNGRKco+k7/akSRT0RsXGaNVAH4EDaZMiNFdD8VMHXax0qT/boPmiG
12+
JwYlzUY1Wr/1cmYZan12FeyHzxENZ9R/RtKmZtxltM4YjZXDLGR1tpJdEqllALvG
13+
MXsUQA0Qka6PPtKgEY8AYbrpwc/W0FbKta04AKfrVLa3xnzBVEPQYYXKle4WoMJJ
14+
mfhEJmaQ9DCBajI7eiEeDh5t8pZGCMpcJO0bJ8gwN4IhXQ9k7JMkixhN61Mdr53w
15+
2fX2bC7nboIVC5zZC4EYzmC2j2zrdIjACGAdhcC/ERXdSksjqIC0ounsvrkd559m
16+
aMYkFFehVkpgKVPLtpdKpEdsnRcRftIDb6Z9PmpCyszuYqJPolXS/xh7MSg4qneM
17+
8SPS8Y2MobkTh0XjQ97E9SiLi859I+lpVonR1ArQmDGFTNLhN1AufIrU9wseF04h
18+
HVTp3DHaT9TGVhBFaCHJD/SV48wpnw1bxuLJlofuxQSUp/qD1yXT2n7gTPf0xuqO
19+
KE4ZGqqBN0SMjpJH8nTn+4Rde+dfOzIJy3ox18qiECLQ62DbdiBiqZ7oKZsyExzN
20+
LmzhhDVhzwQV5xZGNQMfE6TpjqsTX8I0uJmUis2DT3aGhKJq9VulIc6so5q4lLwR
21+
o4b5w8z0qmNCe3Dpb1jXBCp8UWa9v2E3TWi//fFw1DgwPjkMkQhrYRD8oUtCf9n4
22+
lw5yRszneHpG+dF3nrweehU3XaqIRMAD7xRHOYVb5iIXzXnc9HuCopusk4Wyw09K
23+
tqsBJAF0FRfgsE+egJJ/k6BhuMj/BfT5zTNO1r0KyOCyyYTXHlgdbSijEPSfOZ88
24+
0980qAywtIeR7cCJjoOcUZ9dze6XSkSi1HldcT9gLTCMB7+0MnwhWBa1/75jzodU
25+
eYR4RwDakAn+12MnuJWbX1YYt5L/81Yrn7QY4bjDQC0GPnxiQ3RVMa9Xoy/ugKkD
26+
pvS9TFPq0KRYPcWjRTeoa77I57TCN93RqeI1uP4eVzNKV81LVLlnLY/xd2mxVfsi
27+
SPtQ5JAUz2QAQoexDXzcQeuJBdiFRsDfZEgSeNsCibIRM9Efdpk+yYSrtdroxWav

‎dev/gpg_owner_trust.enc‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
U2FsdGVkX1/TThXDrSLkIxnwxwfMGJCm9HOBTKNg/DKT6pgK44WLXi6TFOb2uTgC
2-
NQd/IbJob5eXBuCeNugThBARtC/EvFZsd11RI6qM+VmjeMlzfQMiQEhVTUc8AUMH
3-
Lz4CyjUVAHzCMNThcLrFYjt6tPTC3LJHXS+mdbyJr6K8J3juFTt6aB0nDuZJzs9q
4-
2veyN3YiGDvUZJqskEewJX+11rfZv9sCoD/+FKdttQD3iLEBTg68E6N/kiPPH/46
5-
YIE3N3CwdG1oOUcf196v28QNXVekEzvDRWIdeB3b1C4N3LV/vWCTiUXAEy5XoQQ7
6-
8jijGkHnYlszI/VAIhRNnJymTPvDVhbJ5z0qTrvOriHUVwh18BQ2mzosLRUWZZqa
7-
B/Kk8wEtAnlJkBsO5n3wNbcInu3eaQ5gEU2sGy5iRFY=
1+
U2FsdGVkX1+g3WSQhgWN0a97s59aJCjyLiiguc8DuHn6JJ6v7rHqlHrJjD85zgex
2+
CYUGFIA0OQbHCAIsIBo11s1oUwbo4HL6pwhaTCZYPqmJtws7hByRI2t9omDgLD5U
3+
og7riM0HmviRAL/i5H0dwb+DeObMhzPbeF52TQoBTs1fbn/0HCHRhpJrukdXyt6w
4+
Sj83Kq5jykucul40eqhieSy2A6Im0W4yhnR1GFX8ZYz0zJu4N/7qr4L6Ujv5qYqw
5+
at2G9qrQ88GPMHB3t3Im9lLZ7RbKk1woqE9YWFx58hoOfbq/GLd9nW9XWlIbb+oF
6+
aLCcaBPfgePCcNAz8OdFZ0BD7A58VRyO5aW9JvU35qecV6wEBGQRS9OZpuJx65bE
7+
/FK9SrjjHZPZoTqhlEcSfGyT2dPojFnBU12YHAyFi9I0HJ99vXNPTuit4n6CZV0q
8+
94yGTaKk+hYReIa5GQIWSvXTytL65gv60hwMPfUK2gcXdeEXdfUYQrIjwlvkyDuQ
9+
6ZsVzDH90sif7n/LS9Qg2qwSWNbGTLQXHZBJT6tBTQX++35raLzeudSRsYobuKi8
10+
MjMCF2uBmgOHs9ZBkyZifg==

‎dev/setup_secrets.sh‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,14 @@ toggle_setx_enter(){
190190
__context_1_toggle_setx=0
191191
fi
192192
if [[ "$__context_1_toggle_setx" == "1" ]]; then
193-
echo "Setx was on, disable temporarilly"
193+
echo "Setx was on, disable temporarily"
194194
set +x
195195
fi
196196
}
197197

198198
toggle_setx_exit(){
199199
echo "Exit sensitive area"
200-
# Can we guarentee this will happen?
200+
# Can we guarantee this will happen?
201201
if [[ "$__context_1_toggle_setx" == "1" ]]; then
202202
set -x
203203
fi

‎docs/source/conf.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def visit_Assign(self, node):
136136
return visitor.version
137137

138138
project = 'kwplot'
139-
copyright = '2024, Jon Crall'
139+
copyright = '2025, Jon Crall'
140140
author = 'Jon Crall'
141141
modname = 'kwplot'
142142

@@ -217,7 +217,7 @@ def visit_Assign(self, node):
217217
# 'xxhash': ('https://pypi.org/project/xxhash/', None),
218218
# 'pygments': ('https://pygments.org/docs/', None),
219219
# 'tqdm': ('https://tqdm.github.io/', None),
220-
# Requries that the repo have objects.inv
220+
# Requires that the repo have objects.inv
221221
'kwarray': ('https://kwarray.readthedocs.io/en/latest/', None),
222222
'kwimage': ('https://kwimage.readthedocs.io/en/latest/', None),
223223
# 'kwplot': ('https://kwplot.readthedocs.io/en/latest/', None),
@@ -588,7 +588,7 @@ def accept():
588588

589589
accum.append(line)
590590

591-
# Finialize the last section
591+
# Finalize the last section
592592
accept()
593593

594594
lines[:] = new_lines

‎kwplot/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
images.
6969
"""
7070

71-
__version__ = '0.5.3'
71+
__version__ = '0.5.4'
7272
__author__ = 'Kitware Inc., Jon Crall'
7373
__author_email__ = 'kitware@kitware.com, jon.crall@kitware.com'
7474
__url__ = 'https://gitlab.kitware.com/computer-vision/kwplot'

‎kwplot/cli/adjust_gui.py‎

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,79 @@
3030
class AdjustGuiConfig(scfg.DataConfig):
3131
"""
3232
Helper to find good robust normalization parameters for input images.
33+
34+
This tool allows cropping and normalization of input images using robust
35+
statistics. It is useful for tuning contrast and visualization parameters
36+
interactively or programmatically.
3337
"""
34-
img_fpath = scfg.Value(None, help='input', position=1)
35-
scaling = 'sigmoid'
36-
extrema = 'quantile'
37-
low = 0.1
38-
mid = 0.5
39-
high = 0.9
40-
crop = scfg.Value("null", type=str, help='A crop string e.g. y1:y2, x1:x2')
41-
expr = scfg.Value("null", type=str)
42-
cmap = scfg.Value('None', type=str)
38+
39+
img_fpath = scfg.Value(None, help='Path to the input image file.', position=1)
40+
41+
scaling = scfg.Value(
42+
'sigmoid', choices=['sigmoid', 'linear'],
43+
help=ub.codeblock(
44+
'''
45+
Scaling function used for normalization:
46+
- 'sigmoid': nonlinear sigmoid mapping centered at `mid`
47+
- 'linear' : linear rescaling between `low` and `high`
48+
'''
49+
))
50+
51+
extrema = scfg.Value(
52+
'quantile', choices=['quantile', 'adaptive-quantile', 'iqr',
53+
'iqr-clip'],
54+
help=ub.codeblock(
55+
'''
56+
Method used to estimate low/mid/high intensity thresholds:
57+
- 'quantile' : empirical percentiles
58+
- 'adaptive-quantile': quantile with local adaptation
59+
- 'iqr' : interquartile range
60+
- 'iqr-clip' : IQR with clipping of outliers
61+
'''
62+
))
63+
64+
low = scfg.Value(0.1, help='Lower bound percentile or IQR quantile (range: 0.0–1.0).')
65+
66+
mid = scfg.Value(0.5, help='Midpoint intensity (used in sigmoid scaling, range: 0.0–1.0).')
67+
68+
high = scfg.Value(0.9, help='Upper bound percentile or IQR quantile (range: 0.0–1.0).')
69+
70+
crop = scfg.Value("null", type=str, help=ub.codeblock(
71+
'''
72+
Optional crop string in the form "y1:y2,x1:x2".
73+
74+
Use empty values for open-ended slices, e.g.:
75+
"10:, :100" → rows from 10 to end, columns from start to 100
76+
77+
Set to "null" to disable cropping.
78+
'''))
79+
80+
expr = scfg.Value("null", type=str, help=ub.codeblock(
81+
'''
82+
Optional Python expression to transform the image after cropping.
83+
84+
This is evaluated as `eval(expr)` with `img` bound to the cropped
85+
image (i.e., `img = self.processed_img`).
86+
87+
Example:
88+
"np.log1p(img)"
89+
"img[::2, ::2]"
90+
91+
Set to "null" to disable expression evaluation.
92+
'''
93+
))
94+
95+
cmap = scfg.Value(
96+
'None', type=str, help=ub.codeblock(
97+
'''
98+
Optional matplotlib colormap to apply when displaying the image.
99+
100+
Examples:
101+
"gray", "viridis", "magma"
102+
103+
Set to "None" or "null" to use default colormap behavior.
104+
'''
105+
))
43106

44107

45108
def report_thread_error(fn):
@@ -968,9 +1031,6 @@ def update_normalization(self, key=None):
9681031
params = self.config.to_indexable()
9691032
print('params = {}'.format(ub.urepr(params, nl=1)))
9701033

971-
norm_param_names = {
972-
'scaling', 'extrema', 'low', 'mid', 'high'
973-
}
9741034

9751035
cropstr = params.get('crop', 'null')
9761036
sl = parse_cropstr(cropstr)
@@ -989,6 +1049,9 @@ def update_normalization(self, key=None):
9891049
self.processed_img = eval(expr, ns)
9901050
# self.processed_img = ns['img']
9911051

1052+
norm_param_names = {
1053+
'scaling', 'extrema', 'low', 'mid', 'high'
1054+
}
9921055
normalizer_params = ub.udict(params) & norm_param_names
9931056
norm_img, norm_info = kwarray.robust_normalize(self.processed_img, params=normalizer_params, return_info=True)
9941057

‎publish.sh‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ ls_array(){
384384
# shellcheck disable=SC2206
385385
array=($glob_pattern)
386386
shopt -u nullglob # Turn off nullglob to make sure it doesn't interfere with anything later
387-
# FIXME; for some reason this doesnt always work properly
387+
# FIXME; for some reason this does not always work properly
388388
# Copy the array into the dynamically named variable
389389
# shellcheck disable=SC2086
390390
readarray -t $arr_name < <(printf '%s\n' "${array[@]}")

0 commit comments

Comments
 (0)