This is the changelog for the release of the 3.2.0 version of the G’MIC software, released on 2023/01/16.
It lists all new features and changes done since the previous minor version 3.1.
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.2?
New features:
-
[gmic-qt-320] New filter Patterns / Pills renders a periodic pattern that looks like pills.
-
[gmic-qt-320] New filter Patterns / Halftone [Generic] implements a generic versatile algorithm for image halftoning, allowing various halftoning shapes.
-
[gmic-qt-320] Stand-alone version of G’MIC-Qt gets new option
--layers
to specify that multiple input images must be used as layers for the selected filters (rather than applying the filter image by image). -
[gmic-qt-316] New filter Rendering / Algorithm A, is a G’MIC conversion of an interesting idea proposed by Memo Akten on Twitter. It creates abstract “Mondrian-like” illustrations.
- [gmic-qt-316] New filter Arrays & Tiles / Shuffle Patches, allow to reconstruct images from shuffling the initial image patches, with different reconstruction options.
- [gmic-qt-315] Filter Colors / Vibrance can be used to make your colors more saturated (filter done by @age).
- [gmic-qt-315] Filter Colors / YCH Vibrance can be used to make your colors more saturated (works in th YCH colorspace). Filter done by @Reptorian .
- [gmic-qt-313] New filter Rendering / 3D Mesh renders a 3D object on a new transparent layer, from a
.obj
(Wavefront) or.off
filename.
-
[gmic-qt-313] New system for storing persistent data between successive calls of a filter, through new reserved variable
$_persistent
. Particularly useful for filter that input large external data files (e.g. that does not have to be reloaded each time the preview is updated). -
[gmic-stdlib-320] Many improvements to the
nn_lib
(G’MIC neural network library): new lossescross entropy
,softmax+crossentropy
,binary crossentropy
(classification losses), new modulesconv3d
(and variants),maxpool3d
,patchdown2d/3d
andpatchup2d/3d
+ various improvements of existing modules, optimizations and bug fixes. As a test, thenn_lib
has been able to train neural networks for classifying things (hand-written digits: MNIST dataset, clothes: MNIST Fashion dataset, faces, and others).
-
[gmic-qt-311] New filter Colors / Apply From CLUT Set allows to apply a CLUT on an image, from a compressed CLUT set stored as a custom
.gmz
file.
-
[stdlib-320] New command
narg
returns the number of passed arguments. -
[stdlib-320] New command
filename_dated
converts specified filename to one stamped with the current date (such asfilename_YYYYMMDD_HHMMSS.ext
). -
[stdlib-320] New command
betti
return the Betti numbers of selected 3D binary shapes. -
[stdlib-320] New command
to_automode
converts an input image as an image with the minimal number of channels, without losing information. Useful to discard alpha-channel, or convert RGB images to GRAY, when possible. -
[stdlib-316] New macro
do_intersect(p0x,p0y,p1x,p1y,q0x,q0y,q1x,q1y)
inmath_lib
: returns0
(false) or1
(true) whether the 2D segments[p0,p1]
and[q0,q1]
intersect or not. -
[stdlib-316] New command
ssim
, computes the Structural Similarity Index Measure, as described in the paper: Wang, Zhou, et al., “Image quality assessment: from error visibility to structural similarity.”, in IEEE transactions on image processing 13.4 (2004): 600-612. -
[stdlib-316] New commands
mse_matrix
,psnr_matrix
andssim_matrix
return the matrix of resp. MSE, PSNR and SSIM values between images of the selection. -
[stdlib-316] New command
keep_named
(shortcutkn
) keeps only images with specific name in the image list (opposite ofremove_named
). -
[stdlib-316] New command
img2patches
andpatches2img
: Commandimg2patches
decomposes an image into a set of (possibly overlapping) patches, stacked along the z-axis. Commandpatch2img
does the opposite. It reconstructs an image from its patch representation. -
[stdlib-313] New command
eye
inserts an identity matrix of specified size at the end of the image list. -
[stdlib-313] New command
identity
inserts an identity map with specified dimensions at the end of the image list. -
[stdlib-313] New command
surfels3d
converts an image containing a binary shape as a 3D object containing 3D surfels (works for 2D images too).
- [stdlin-313] New command
input_obj
implements a 3D mesh loader, in the.obj
file format (Wavefront) (beware: not all .obj features implemented!).
- [core-320] Command
text
is now able to draw text using user-defined fonts.
-
[math-core-320] Functions
crop()
anddraw()
now have variants that respectively extract and draw images from/in a vector-valued variable. -
[math-core-320] New functions
gamma()
computes the Gamma function of its real-valued argument. -
[math-core-320] New predefined variable
v
, equivalent tou(-1,1)
. -
[math-core-316] New function
cov(A,B,_avgA,_avgB)
computes the covariance estimation from two input vectors. -
[math-core-316] New function
mse(A,B)
computes the mean-squared error between two input vectors. -
[math-core-316] New function
da_freeze(_#ind)
convert a dynamic array as a 1-column image of size1 x da_size(_#ind) x 1x100%
. -
[math-core-316] New predefined variable
id
stands for the standard deviation of the current image (eq. tosqrt(iv)
).
Improvements / Changes:
-
[gmic-qt-320] Allow
bool()
parameters to have HTML codes in labels. Also swap widget ordering (label on the left, checkbox on the right). -
[gmic-qt-320] Default interface layout is now set in “Dark Mode”, and “Preview on the Right”.
-
[gmic-qt-315] Make G’MIC-Qt compilation independent on G’MIC source code, when dynamic linking is set. This should ease the packaging of G’MIC into different components (requested by the Krita folks).
-
[gmic-qt-314] Filter 3D Mesh: Add rendering option Bounding Box.
-
[gmic_qt-313] Filter labels are now selectable and can be copy/pasted if necessary.
-
[stdlib-316] Commands
mse
andpsnr
have been recoded and return resp. the MSE and PSNR values of selected images with a reference image, passed as an argument. -
[stdlib-313] Improve command
output_obj
: export face transparency; less memory used to export RGB materials. -
[core-320] Improvement of the variable storage mechanism. Make things slightly faster, particularly for append/prepend assignments (
var.=str
andvar..=str
). -
[core-320] Command
camera
now throws an exception if a camera frame could not be captured. -
[core-320] Merge commands and math parser functions
invert
andpseudoinvert
for matrix inversion. -
[core-320]
libgmic
API has been cleaned. Classesgmic_image
andgmic_list
are now part of a newgmic_library
namespace. -
[core-316] Prevent warning on
stderr
when no display available (e.g., remote execution). -
[core-316] Put back shotcut
nm
for commandname
. -
[core-316] Improved how image copies are named in the image list.
-
[core-315] Improved the sharing of abort pointers between multiple parallel instances of G’MIC interpreters.
-
[core-313] Command
warp
: Make default value =0
for argument 'boundary_conditions`. -
[core-313] Optimize syntax
+command
for some arithmetic commands (e.g.sqr
,sqrt
,cos
, …). -
[core-313] Improve behavior of math function
get()
. Do not throw exceptions anymore. -
[math-core-320] Optimize evaluation of math functions when expressions are simple.
-
[math-core-320] Add new option
use_LU
to commandsolve
and math functionsolve()
. -
[math-core-320] Functions
stov()
andvtos()
renameds2v()
andv2s()
respectively. -
[math-core-320] Function
u(min,max)
has been extended tou(min,max,_include_min,_include_max)
allowing to choose more finely if each range extrema must be included in the uniform distribution. -
[web-316] Changes of URLs for the github repositories, now: GitHub - GreycLab/gmic: GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing and GitHub - GreycLab/gmic-community: Community contributions to the G'MIC software.
-
[package-313] Remove packages for versions of Debian and Ubuntu that are not supported anymore (Debian 9, Ubuntu 19.04, 19.10, 20.10, 21.04).
Bug fixes:
-
[gmic-qt-320] Fix saving output file in .png format with stand-alone version.
-
[gmic-qt-314] Fix encoding issue for filters returning encoded text in status, to modify input parameters.
-
[gmic-qt-314] Disable entirely the log output when verbosity is set to none.
-
[stdlib-320] Fix command
texturize3d
(a.k.a.t3d
) when used on large 3D object (>2M primitives). -
[stdlib-313] Fix command
parse_cli
when run without input data. -
[stdlib-313] Fix command
primitives3d
for large 3d objects. -
[gmic-qt-311] Fix management of “Faves” file on Windows, when the account name contains accentuated characters.
-
[core-320] Saving animated
.gif
now better handles alpha-channels (still requires IMconvert
to be installed on your system). -
[core-320] Fix behavior of using
break
in aforeach...done
loop (was behaving likecontinue
). -
[core-315] Fix possible double memory free, when exiting a filter.
-
[core-314] Fix regression in 3.1.3 that causes certain
+command
to be much slower than in3.1.2
. -
[core-313] Fix macro value of
cimg_max_buf_size
that causes crash on 32-bits arch. -
[core-313] Command
rotate
: fix argument parsing bug, happening with 3D rotations, when last argumentcenter_z
has a%
suffix. -
[core-313] Fix variable assignment operators
>>=
and<<=
. -
[core-313] Fix arithmetic variable assignment with rounding (e.g.
x:=_pi
). -
[core-312] Fix bug in commands
break
andcontinue
when executed in a loop that is the last code block of a command. -
[core-311] Fix possible misinterpretation by the interpreter of arithmetic expression like ‘str1’==‘str2’, when used with the
:=
assignment operator (commit #4200a80aae83b53d1a6d0e950f47e49601842d76) -
[core-311] Fix blocking mutex when using nested
run()
in mathematical expressions. -
[core-311] Fix regression that happened in command
input_flo
between version 3.0.2 and 3.1.0 (wrong datatype name used).