This is the changelog for the release of the 2.9.x versions of the G’MIC software.
It lists all new features and changes done since the latest version 2.8.4.
What is G’MIC?
G’MIC (GREYC’s Magic for Image Computing) is a full-featured open-source framework for image processing. It provides several different user interfaces to convert/manipulate/filter/visualize generic image datasets, ranging from 1D scalar signals to 3D+t sequences of multi-spectral volumetric images, thus including 2D color images.
- G’MIC main project page : https://gmic.eu
- G’MIC download : https://gmic.eu/download.shtml
- G’MIC web service : https://gmicol.greyc.fr/
- G’MIC language tutorial pages : https://gmic.eu/tutorial/basics.shtml
- Support G’MIC development : G'MIC — Association LILA
What’s new in version 2.9.x?
New features:
- [gmic-qt_290] New filter Rendering / Tree renders a fractal tree, with various parameters that can be tuned to generate different kind of trees.
- [gmic-qt_290] New filter Sequences / Moiré Animation produces still images that can be animated with a transparent sheet, from several frames (layers), as shown in the video https://www.youtube.com/watch?v=f5plDb_JRq4.
-
[gmic-qt_290] Filter parameter
color()
now accepts an argument that is a RGB or RGBA colors in HTML format (e.g.#aabbcd
or#aabbccddee
). -
[math_core_290] New functions
maxabs(), minabs(), argmaxabs()
andargminabs()
find the min/max (in absolute value) of a list of arguments. New commandsmaxabs, minabs, argmaxabs
andargminabs
also added to operate on image pipelines. -
[math_core_290] New functions
name(_#ind,_siz)
andsetname(_#ind,str)
get/set the name of an image of the list (eq. to commandname
but directly inside the math parser). -
[math_core_290] New function
ref(expr,varname)
references the specified expressionexpr
by the variablevarname
. Useful to declare large vector-valued variables while avoiding memory duplication in the math parser (e.g.ref(vector1024(),A)
is better thanA = vector1024()
, as the latter requires two allocations and a call to the vector copy constructor). -
[math_core_290] New function
lerp(a,b,t)
computes the linear interpolation between argumentsa
andb
(i.e.a*(1-t) + b*t
). -
[math_core_290] New function
inrange(val,a,b,include_boundaries)
tests if a value lies in a given range. -
[core_290] Most substituting expressions between braces
{}
can now specify a delimiter option, that delimits multiple values coming from a substitution (e.g.{[1,2,3]:;}
is substituted as1;2;3
and{'foo:^}
by102^111^111
). Accepted delimiters are,
(default),;
,/
,^
and ’ ’ (space). -
[core_290] New input expressions
('string')
and('string':delimiter)
now available, to create images containing the character codes composing the string (equivalent to({'string'})
and({'string':delimiter})
wheredelimiter
can be,
(default),;
,/
or^
). For this special expression,delimiter
can also be specified asx
,y
,z
orv
to set the main image orientation. -
[stdlib_290] New command
parse_gui
parses all#@gui
filters available (e.g. all filters defined for the G’MIC-Qt plug-in) and outputs filter information in a format following a given output mode (json | list | print | update | zart
). -
[stdlib_290] New commands
input_text
(shortcutit
) andoutput_text
(shortcutot
) load/save text-data files as new images containing the ASCII characters asunsigned char
-valued pixels (eq. to using expressionraw:filename.txt,uchar
). -
[stdlib_290] New command
strcapitalize
capitalizes an input string.
Modifications / Improvements:
-
[gmic-qt_290] G’MIC now supports UTF-8 encoded command files. All existing command files have been converted to UTF-8. In scripts, strings can also specify UTF-8 characters with the
\u
or\U
prefixes (as in"\uA0B3"
(ꂳ)). Note that UTF-8 characters are still not rendered by commandtext
. -
[gmic-qt_290] Enable link-time optimization (flag
-flto
) when compiling the CLI tool on Linux. This produces a binary with an improvement of 14% in size. -
[cli_290] Command
help
has been redesigned, and always outputs help messages onstdout
. -
[core_290] Command
discard
has been optimized when called with a single scalar argument. -
[core_290] Command
display
now outputs info on console forverbosity>=0
(was>=1
before). -
[core_290] Loading animated
.gif
now always returns full frames (rather than difference frames). -
[core_290] Command
store
accepts an optional argumentis_compressed
that tells if stored images must be stored in a compressed form. -
[math_core_290] Function
find()
is now able to search inside a vector with a given step (positive or negative). -
[math_core_290] Function
store()
can now store a sub-vector as an image-valued variable. -
[stdlib_290] Commands
version
now always output messages onstdout
. -
[stdlib_290] Command
compress_gmic
has been recoded and is now faster to execute. -
[stdlib_290] Interactive viewer for 2D images now accepts shortcut
CTRL+W
to close the window. -
[stdlib_290] Command
echo
(shorcute
) can be invoked as+echo[]
(shortcut+e[]
) to output onstdout
rather thanstderr
(equivalent toecho_stdout
). -
[stdlib_290] Command
colormap
has been optimized for extracting all existing colors from an input image (with argument0
). -
[stdlib_290] Command
display2d
is now able to perform multi-image display with synchronized views, when selected 2D input images are stacked along the z-axis. Commanddisplay_parallel
enables this mode by default when compatible images are displayed.
Bug fixes:
-
[core_290] Value of milliseconds timer
$|
was resetting itself each day, on Windows. This is now fixed. Precision of the timer has been also improved when running after several days. -
[core_290] Command
fft
: Fix calculation of FFT along ‘y’-axis when used with volumetric images. -
[core_290] Fix substituting expression
{ind,b}
when image name is empty. -
[core_290] Expressions s.a.
.,.,.,.xN
are now recognized. -
[core_290] Fix bug in thread waiting functions (wait_threads() is now thread-safe).
-
[math_core_290] Check constant image index, when accessing vector-valued expressions
I/J[#ind,off]
andI/J(#ind,x,y,z,c)
. -
[gmic-qt_290] Fix critical bug in filter
Montage
(regression introduced in 2.8.4). -
And a lot of other small bugfixes!