This thread enumerates the list of changes in the G’MIC project since the latest major version (3.6), until it reaches the next major version 3.7 (so everything added in versions 3.6.x, with x>=1, and 3.7.0 included).
New features
- [gmic-qt-365] New filter Degradations / Offset Tiles generates glitch effects by randomly shifting horizontal/vertical stripes in images.
- [gmic-qt-363] New filter Rendering / Gradient [Poles] generates color gradients from moveable colored keypoints, directly on the preview widget.
- [stdlib-367] New command
random_patchesrenders a set of square images containing random geometric shapes and textures. Useful to generate input images for training neural networks without copyright issues (e.g denoising or upscaling networks).
- [stdlib-362] New command
pcaperforms PCA (Principal Component Analysis) on a set of vector-valued samples and eventually projects it in a vector sub-space (with lower dimension). Can be used to determine the orientation of shapes in images, among other things!
- [stdlib-362] New command
depthmap3drenders a 3D image in an image, as a depth map.

- [stdlib-362] New command
normalmap3drenders a 3D image in an image, as a normal map.

-
[stdlib-362] Command
math_lib: New macroepoch2date()convert an epoch to UTC time. -
[nn-lib-367] New loss functions have been added or modified, with commands
nn_loss_crossentropy,nn_loss_l2,nn_loss_mse,nn_loss_softmax_crossentropy,nn_loss_binary_crossentropy,nn_loss_l1,nn_loss_lp,nn_loss_smoothl1. -
[nn-lib-364] New command
nn_normalizeimplements a generic normalization layer for neural network, along any combination of axes (can simulate so-called InstanceNorm, LayerNorm, GroupNorm and RMSNorm modules from Pytorch). -
[core-364] New native command
qrcomputes the QR decomposition of selected matrices. Corresponding math functionqr(A,_nb_colsA,_is_reduced_form)does the same directly inside the math evaluator. -
[core-362] New native command
createdircreates file directories on the filesystem. -
[math-core-367] New functions
sigmoid()andlogit()added to the math evaluator. -
[math-core-364] New function
indexof(ref,a_0,...,a_k)returns the indexiof the elementrefin the list of elementsa_k(or-1ifrefis not present in the list). Indexistarts from0. -
[math-core-363] New functions
fft()andifft()compute the Fast Fourier Transform (and its inverse) on image-valued variables. Equivalent to existing commandsfftandift, but directly in the math evaluator. -
[math-core-362] Make loop variable
$%available from the math expression evaluator.
Improvements / Modifications
-
[stdlib-366] Improvement of the
nn_lib: Lp-losses have been recoded, Smooth-L1 loss has been added. Passing tensors from one network to another has been simplified, so managing multiple networks at the same time is easier. -
[stdlib-365] Each G’MIC-Qt filter now has a simple description saying what the filter does.
-
[stdlib-365] Command
animatehas now a fullscreen mode (CTRL+F). -
[stdlib-364] Command
invertis now a non-native command, part of the G’MIC standard library. It is based on the newest version of native commandsolve. -
[stdlib-364] Command
invertis now a non-native command, part of the G’MIC standard library. It is based on the newest version of native commandsolve. -
[stdlib-363] Command
clut: All CLUTs have been re-compressed with compression parameters that allow more precision. -
[nn-lib-364] The
nn_batchnormcommand has been removed fromnn_lib. For technical reasons, batch statistics cannot be calculated during training, and the simplified version of batchnorm that was implemented actually made network training less efficient than without using this module. Use newest genericnn_normalizemodule instead. -
[nn-lib-363] Command
nn_nl: L2-normalization activation has been added a a possible nonlinear function. -
[nn-lib-363] Gradient momentum and weight decay are now implemented for all optimizers (not only adam and adamax).
-
[nn-lib-363] Trainer module has been recoded and is now more flexible, easing the passing of parameters to chosen optimizer and scheduler.
-
[nn-lib-362] Adam optimizer now implements a decoupled
weight_decay(AdamW variant). -
[core-364] Improve robustness of variance computation, using the Welford algorithm.
-
[core-364] Command
randcan take now a single argument. -
[core-364] Commands
solveandinvertnow use the QR-decomposition of matrices (Householder) to do their job. Arguments to choose between LU/SVD options have been removed (it also applies to the corresponding functions in the math evaluator). -
[math-core-365] Function
stats()can now compute the statistics vector from an input vectorXseen as an image of size(w,h,d,s), with:stats(X,w,h,d,s). -
[math-core-365] Function
ftt(): Allow multiple axes to be specified as a string. -
[math-core-364] Pixel access functions have been optimized when used on 1D or 2D images (particularly with linear or cubic interpolations). Before, interpolation were computed on all 3D coordinates.
-
[math-core-364] Function
expr()can now take an additionnal vector-valued argument used as a reference image for the given expression. -
[math-core-364] Function
fill()has a new variantfill(A,w,h,d,s,'expr')that fill the vector-valued variableAwith the specified expressionexpr. -
[math-core-363] Function
epoch()now computes epoch from UTC time. -
[math-core-363] Optimized versions of multi-arguments functions
min(), max(), argmin(), ...when invoked with only one or two arguments. -
[math-core-363] Function
lerp(a,b,t)now accepts a vector value fort(that has same size as argumentsaandb). -
[web-363] Added a new code sample “Morph Shape”, in the Gallery section of the G’MIC website.

- [web-362] Added a new code sample “3D Tunnel”, in the Gallery section of the G’MIC website (Source Code).

Bugfixes
-
[core-366] Command
polygon: Fix integer-rounding of segment coordinates, leading to more precise drawing. -
[core-365] Fixed sources so that G’MIC can be compiled again with
gmic_pixel_type=halfoption enabled. -
[core-362] Command
object3d: Fix vertice brightness for z-clipped triangles, when Gouraud shading rendering mode is used. -
[math-core-365] Function
ftt(): Fix argument parsing when axis is not specified.





