This is the changelog for the release of the 3.4.0 version of the G’MIC software, released on 2024/06/15.
It lists all new features and changes done since the previous version 3.3.0.
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 : G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download
- G’MIC web service : https://gmicol.greyc.fr/
- G’MIC language tutorial pages : Start Here
- Support G’MIC development : G'MIC — Association LILA
What’s new in version 3.4.0?
New features:
Version 3.4.0:
- [source-340] Add
CONTRIBUTING.md
file that explains how to contribute to the project.
Version 3.3.6:
- [gmic-qt-336] New filter Colors / Mixer [Generic] allows to apply linear and nonlinear transformations on color channels, for a wide range of different colorspaces.
- [gmic-qt-336] New filter Deformations / Distort [RBF].
- [gmic-qt-336] New button Randomize Parameters (dice icon) in the G’MIC-Qt plug-in, that randomizes parameters for filters that support it.
- [gmic-qt-336] New filter Rendering / Spline Spirograph, offers a range of settings to create intriguing, colorful textures, from spirograph-like process.
- [gmic-qt-336] New filter Rendering / Underwoods, by @prawnsushi .
- [gmic-qt-336] New filter Degradations / Blur [Motion] simulates motion blur on images, with user-defined trajectories.
- [gmic-qt-336] New filter Rendering / Color Wheel, by Claude Lion.
- [stdlib-336] New command
warp_seamless
warps selected images by specified displacement field, using seamless blending.
Version 3.3.5:
- [gmic-qt-335] New filter Layers / Spatial Blend Multi-Layers takes a bunch of input layers and blend them all spatially, according to a user-defined orientation. Useful to quickly create intriguing images from timelaps frames !
- [gmic-qt-335] New filter Artistic / Stringify renders images with colored lines.
- [gmic-qt-335] New filter category Map Projection/, with 14 new filters to project equirectangular maps using various projection methods. This is a very nice contribution from Kristian Järventaus, a member of the Cartographers Guild forum, where he posted these filters for the community there.
- [stdlib-335] New command
lines3d
transforms a 3D mesh as a set of segments that can be modified afterwards (e.g. to display 3D normals, as in the example below).
- [stdlib-335] New command
colorize3d
set the color of 3D object’s primitives according to a specified formulaf(x,y,z)
. Useful to view colored information on 3D meshes.
-
[stdlib-335] New commands
expand
andshrink
replaces deprecated commandsexpand_x
,expand_y
,expand_z
,expand_xy
,expand_xyz
(and same forshrink_*
). -
[stdlib-335] New commands
rescale2d
(shortcutrs
) andrescale3d
(shortcutrs3d
) perform 2D and 3D image rescaling with aspect ratio preservation. These two commands can replace the following commands (then leaving thestdlib
):resize2dx
,resize2dy
,resize3dx
,resize3dy
,resize3dz
,resize_ratio2d
,resize2din
,resize3din
,resize2dout
,resize3dout
. -
[stdlib-335] New commands
compress_to_keypoints
anddecompress_from_keypoints
allow to apply a RBF/PDE-based compression algorithm, that is particularly efficient for images with very smooth content (such as 3D CLUTs or light leak images).
-
[stdlib-335] Command
edgels
has been recoded from scratch and can now return multiple lists of edgels, either starting from the same pixel, or from any shape pixel present in the image. -
[stdlib-335] New command
split_vector
split an image into several parts, where specified vector is the separator. -
[core-335] New concept of
subcommand
: A subcommand of a commandfoo
is a command whose name starts with__foo
(e.g.__foo_parse
). Contrary to a normal command, a subcommand shares the variables it defines, with the calling command. Example:
__foo_define_var :
var=3.1415926
foo :
__foo_define_var
echo "var = "$var # Will print '3.1415926'.
- [math-core-335] New function
flood(_#ind,_x,_y,_z,_tolerance,_is_high_connectivity,_opacity,_color)
performs a flood fill in image[ind]
(or in default image selected ifind
is not specified) with specified coordinates. This is the math evaluator analog to commandflood
.
Version 3.3.4:
- [gmic-qt-334] Filter Rendering / Quick Copyright has been recoded from scratch, with lot of new options.
- [gmic-qt-334] New filter Patterns / Random Rectangles creates a random partition of colored rectangles.
- [stdlib-334] New command
poincare_disk
renders an image of the Poincaré disk, and its associated filter Deformations / Poincaré Disk.
-
[stdlib-334] New command
count_colors
returns the number of distinct colors used in selected images. -
[gmic-qt-334] New filter Patterns / Reaction-Diffusion creates reaction-diffusion patterns.
-
[math-core-334] New function
v(min,max,_include_min,_include_max)
returns a random integer in specified range (similar to functionu()
but returns an integer). -
[math-core-334] New pre-defined variable
eps
returns the machine epsilon, that is the difference between 1.0 and the next value representable by adouble
. -
[math-core-334] Add support for specifying binary litteral, as
0b1010010
. -
[math-core-334] New function
lcm()
computes the least common multiple of specified arguments. -
[math-core-334] Function
gcd()
now accepts multiple arguments.
Version 3.3.3:
- [gmic-qt-333] New filter Rendering / ABN Filigrees renders nice 2D closed curves with lot of controls. Filter done by @grosgood .
- [gmic-qt-333] New filter Rendering / CRT Scanlines simulates the CRT scanline effect.
- [gmic-qt-333] New filter Rendering / Random Signature.
- [gmic-qt-333] New filter Degradations / CRT Phosphors.
- [gmic-qt-333] New filter Deformations / Square to Circle [alt], that warps the image so that every centerted square (or rectangle) becomes a circle (or ellipse), or vice-versa.
- [gmic-qt-333] New filter Black & White / Filaments, that throws thousands of particles from the image borders and deform their paths according to the image geometry.
- [gmic-qt-333] New filter Degradations / Noise [Gradient] adds noise to image gradients (rather than image values) then reconstruct the corresponding image by solving the Poisson equation (with FFT).
- [stdlib-333] New command
canny
, and the filterEdges (Canny)
perform Canny edge detection on selected images.
-
[stdlib-333] New commands
clut2hald
andhald2clut
convert 3D CLUT to 2D HaldCLUT formats. -
[stdlib-333] Command
display
gets a new mode to display a 1px outline around each primitives of a 3D mesh. It also now support setting/getting the 3D pose by the user through the variable$_display_3d_pose
.
- [core-333] Command
rand
is now able to generate random values according to a user-defined probability density function.
-
[math-core-333] New function
warp(A,wA,hA,dA,sA,B,wB,hB,dB,sB,_mode,_interpolation,_boundary_conditions)
returns the warped version of the imageA
(viewed as a vector) by the warping fieldB
. This is the math-evaluator analog to thewarp
command. -
[math-core-333] New function
permute(A,wA,hA,dA,sA,permutation_string)
returns the permuted version of the imageA
(viewed as a vector). This is the math-evaluator analog to thepermute
command. -
[math-core-333] New function
mirror(A,wA,hA,dA,sA,axes_string)
returns the mirrored version of the imageA
(viewed as a vector). This is the math-evaluator analog to themirror
command. -
[math-core-333] New function
cumulate(A,_wA,_hA,_dA,_sA,_axes_string)
returns the cumulated version of the imageA
(viewed as a vector). This is the math-evaluator analog to thecumulate
command. -
[math-core-333] New function
normalize(A,min_value,max_value)
returns the normalized version of the vectorA
. This is the math-evaluator analog to thenormalize
command. -
[math-core-333] New function
noise(A,amplitude,_noise_type)
returns the noisy version of the vectorA
. This is the math-evaluator analog to thenoisy
command. -
[math-core-333] New function
index(A,P,nb_channelsP,_dithering,_map_colors)
returns the indexed version of the image ‘A’ by the colormap ‘P’. This is the math evaluator analog to commandindex
. -
[math-core-333] New function
histogram(A,nb_levels,_min_value,_max_value)
returns the histogram of the vectorA
. This is the math-evaluator analog to thehistogram
command. -
[math-core-333] New function
equalize(A,nb_levels,_min_value,_max_value)
returns the equalized version of the vectorA
. This is the math-evaluator analog to theequalize
command. -
[math-core-333] New function
hypot()
computes the length of the hypothenuse. -
[math-core-333] New function
isconst()
returns1
or0
whether the given argument is a constant (value known at compilation time) or not.
Version 3.3.2:
- [gmic-qt-332] New filter Rendering / Warped Rays render a spiral-like shape on the image. It uses the new command
shape_rays
added to thestdlib
.
-
[stdlib-332] New command
histogram_masked
computes the histogram on masked regions of an image. -
[stdlib-332] Command
dijkstra
is now a custom command and has been recoded from scratch. This command computes the minimal path between two vertices of a graph.
-
[math-core-332] New functions
da_push_heap()
andda_pop_heap()
insert/remove elements in/from a dynamic array viewed as a min-heap structure. Useful to manage priority queues from the math evaluator.
Version 3.3.1:
- [gmic-qt-331] New filter Arrays & Tiles / Loose Photos simulates an effect of loose photos that are spatially arranged to recreate a global picture.
- [gmic-qt-331] New filter Details / Sharpen [Alpha] implements a new multi-scale image sharpening algorithm that produces very few halos. New associated command
sharpen_alpha
is also available for script developers.
- [stdlib-331] Command
font
returns a font identifier that can be used in text drawing commands, to draw text with more various fonts than the default one.
-
[stdlib-331] Command
font2gmz
converts a.otf
or.ttf
font file as agmz
font file that can be used to draw text with custom fonts. -
[stdlib-331] Commands
split_alpha
andmerge_alpha
split an image into several levels of details, that can be recomposed afterwards with alpha-blending.
- [math-core-331] New function
ispercentage(arg)
returns1
or0
whetherarg
ends with a%
or not.
improvements / Modifications:
Version 3.4.0:
-
[stdlib-340] Command
blend
has been recoded to better mimic what is done in GIMP. -
[stdlib-340] Commands
select
,graph
andplot
have been recoded as G’MIC stdlib commands (rather than native ones). It will be easier to maintain and improve them over time.
-
[stdlib-340] Commands
columns
,rows
,slices
andchannels
now accepts aboundary_conditions
argument that tells how out-of-range geometry must be considered. -
[core-340] Command
mmul
can be now used for pointwise matrix-vector multiplication when specified right-hand image is vector-valued. -
[core-340] Command
polygon
now defines a way to also draw open polylines rather than closed outlined or filled polygons. -
[core-340] Command
polygon
accepts that polygon coordinates are provided as an image (e.g.polygon[canvas] [coords],1,255
).
Version 3.3.6:
-
[stdlib-336] Command
input_obj
has been improved to search for texture files also in current path, when wrong path has been specified in the.mtl
file. -
[stdlib-336] Command
plasma
has been implemented as a custom command. -
[core-336] Improved parsing of special input string
(val1,val2,...)
, so that the order of specified axes is taken into account when constructing the image. -
[math-core-336] Improved management of string literals and constant vectors, avoiding constructing them multiple times when they are used in loops.
-
[math-core-336] Improved management of hexadecimal and binary literals, as well as hexadecimal and binary number parsing from strings (function
s2v()
).
Version 3.3.5:
-
[stdlib-335] Command
frame
has been recoded from scratch and replaces commandsframe_x
,frame_y
,frame_xy
,frame_xyz
. -
[stdlib-335] Command
inpaint_pde
: Allow ‘nb_scales’ to be determined as the minimal image size at lowest scale. -
[stdlib-335] Command
input_obj
(import of Wavefront 3D meshes): Improved parsing speed of primitive materials. -
[math-core-335] Function
isint(x,_xmin,_xmax)
has been extended to test if a numberx
is an integer in specified range[xmin,xmax]
.
Version 3.3.4:
- [math-core-334] Removed pre-defined variable
v
in math evaluator (useu(-1,1)
instead).
Version 3.3.3:
-
[math-core-333] Function
permut()
has been renamed asperm()
. -
[core-333] G’MIC interpreter now discards possible comments passed in the
commands_line
argument of G’MIC API functions. -
[core-333] Community filters are now included by default in the CLI tool
gmic
as well as in thelibgmic
library. -
[stdlib-333] Commands
display
: When displaying 3D objects, pressing keyP
not print the 3D pose matrix onstdout
.
Version 3.3.2:
-
[gmic-qt-332] When updating filters, the filter tree is refreshed before the dialog window saying the update has been done shows up.
-
[gmic-qt-332] Updated plug-in code to make it work with API changes introduced in GIMP development version v.2.99.12.
-
[gmic-qt-332] Windows installer updated to include missing DLLs from latest GIMP release 2.10.36.
-
[packaging] Put back the
CMakeLists.txt
file in the project root folder, to allow compilinggmic
withcmake
.
Version 3.3.1:
-
[core-331] Removed possibility of having stand-alone
{ ... }
blocks in scripts. Now{ ... }
can be only used for constructs that require adone
ending item. -
[core-331] Command
text
can now use a custom font defined as an image in the list, in addition to a image-valued variable name. -
[stdlib-331] Command
img2str
has been recoded from scratch. It returns the content of the selected images, as special G’MIC input strings. -
[stdlib-331] Command
display
: Add forward/backward modes for 3D mesh animation. -
[stdlib-331] Command
text_outline
now accepts a custom font as argument. -
[stdlib-331] Command
input_obj
: Improve import of.obj
mesh with per-vertex defined colors. -
[stdlib-331] Command
xcrop
: Single user-defined crop now applies on all selected images.
Bug fixes:
Version 3.4.0:
- [core-340] Fix slightly wrong texture offset when rendering 3D textured triangles and quadrangles. Particularly visible with smaller textures (like having a size of 3x3).
Version 3.3.6:
-
[math-core-336] Defining a binary litteral was limited to 32 bits on Windows (and 64 bits on Linux) , due to the fact that
long int
on WIndows is 32 bits only. Now works with 64 bits for both systems. -
[core-336] Recoded line drawing functions to better manage cropping of large (out-of-bounds) coordinates.
Version 3.3.5:
-
[stdlib-335] Command ‘parse_cli_bashcompletion’: Fix parsing of choice-valued arguments.
-
[stdlib-335] Command
output_obj
(export of Wavefront 3D meshes): Fix export of materials for segment primitives. -
[core-335] Fix: Conditions involving simple expressions inside double quotes and containing a
$
were not evaluated correctly. -
[math-core-335] Fix: Function ‘isint()’ now works for integers larger than 64bits.
Version 3.3.4:
- [math-core-334] Fix possible side effects in math evaluator, that happened when math compiler was trying to optimize the use of some operator (e.g.
x=3; (x^1)=4
was setting4
to variablex
).
Version 3.3.3:
-
[gmic-qt-333] Fix management of dynamic interfaces (for filters that use it) when the “Preview” box is unchecked.
-
[core-333] Fix wrong parsing of
xN
repetition suffix ininput
command.
Version 3.3.2:
- [math-core-332] Fixed functions to remove elements from a dynamic array. When the array became too large, suppressing elements was not possible.
Version 3.3.1:
- [gmic-qt-331] Fix aspect ratio of preview error when using
gui_error_preview
.