Release of G'MIC 2.4.0

This is the changelog for the release of the 2.4.0 version of the G’MIC software.
It lists all new features and changes done since the latest major version 2.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.

Enjoy !


What’s new in version 2.4.0?

New features:

Core

  • Add native commands and functions to manage inverse hyperbolic functions acohs(), asinh() and atanh().

  • Add command noise_poissondisk that implements the paper Fast Poisson Disk Sampling in Arbitrary Dimensions by R. Brinson. It adds a certain type of regular binary noise on 2D or 3D images, that looks like this:
    poissondisk_noise
    (contribution by @garagecoder).

  • Add commands uchar2base64 and base642uchar to encode/decode image data as base64-encoded strings.

G’MIC-Qt

  • Split preview mode has been recoded from scratch and most filters now allows to move the frontier between ‘Before’ and ‘After’ views. New splitting modes have been also added.
  • Add filter Deformations / Stereographic projection, usually used to create mini-planets from equirectangular panoramas.
  • Add filter Colors / Mixer [PCA] which gets the working color basis with a Principal Component Analysis of the image colors.

gmic_mix_pca

  • Add filter Colors / CLUT from after-before layers. This filter is able to recover the color transformation that has been applied between a pair of images, as a HaldCLUT. This HaldCLUT can then be applied afterwards to a bunch of other images.

gmic_clut_from_ab

  • Add filter Deformations / Self glitching that combines an image with a shifted version of itself with modulo arithmetics to create glitch effects.

  • Add filter Frames / Frame [mirror] that add frames as mirrored parts of the image.

  • Add filter Colors / Colorful blobs in order generate custom palette images composed of several color blobs, mixed together (inspired by Adobe’s Playful Palette).

gmic_color_blobs

  • Add filter Details / Constrained Sharpen, to sharpen images without producing halos.

  • Add filter UltraWarp++++ which warps images multiple times, applying many different operations before and after the warping process and most importantly after each iteration.

image

  • Add filter Cascading Self-Glitching which is similar but has a very different mechanism of image destruction, being based on the self-glitching filter.

image

  • Add filters Sawtoothers. They are modulo filters which operate individually on preset channels, manipulating values as if they are part of a sawtooth function. The channels can be smoothed beforehand to yield some unusual artefacts alongside the trippy colouring.

image

  • Add filter Rectexture. It generates random textures out of rectangles.

image

  • Add filter Hard Painting, a simple combination of two other filters: painting and multiple iterations of graphic boost. It can be used to make very glossy and high-contrast images (which are perfect for UW++++ and CSG).

image

  • Add filter Rays from image , a specific and easy polar transform which generates multicoloured rays from the image corresponding to the point at which the rays originate (I found it while messing around with the polar transform filter).

image

Improvements:

Core

  • Command pointcloud accepts now more different image dimensions to render pointclouds. It also has a new option that retrieve the set of point coordinates from a rendered pointcloud.

  • When saving image as a file where storage datatype can be specified as an option : New datatype ‘auto’ (which is now the default) auto-guesses the smallest datatype that can be used to store the image data as a file. This also applies for command serialize.

G’MIC-Qt

  • Improve burst mode for point() parameters, with better interactivity with the preview window, for the filters using them.
  • Slight changes in design: Remove some frame borders, darken line separators.
  • New keyboard shortcut CTRL+P allows to enable/disable the preview window.
  • New keyboard shortcut CTRL+R (or F5) to update filters.
  • Filter Rendering / Mandelbrot - Julia sets has been recoded from scratch and eases now the navigation in the fractal sets.
  • Added preview image cache system to reduce the number of API calls to the host software, when displaying the preview widget.

  • Improvement of filter Artistic / Polygonize with more options, e.g. allowing to fill Delaunay triangles with linearly interpolated colors.

  • Changed the behavior of the preview zoom. By default, it is not possible to zoom in/out the previewed image anymore if it renders a non-accurate preview. Old behavior (zoom is always possible) can be restored from the ‘Settings’ dialog.

  • Improve translation capabilities for individual filters, with new pragma #@gui_xx hide(filter or folder name) that can be used to hide the english version of a filter once it has been translated to another locale xx.

ZArt

  • Updated available filters, and added support of point() parameters.

Bug fixes:

Core

  • Change zooming behavior of 3d object with right mouse button (invert direction) when in volumetric image view (activated with CTRL+V).
  • Bugfix in command guided (guided filtering) when guide had less channels than source image.
  • Bugfix in loader of .pfm image files. Malformed files were trying to allocate a lot of
    memory.
  • Bugfix in command map with predefined colormap and boundary condition set to mirror.
  • Bugfix in command blur_angular. Now manage periodic boundaries.

G’MIC-Qt

  • Some code refactorization and small bug fixes.
  • Fixed bug when defining filters withpoint() parameter in burst mode : size of the image given to the preview command was occasionally wrong, leading to (slow) computation of the preview on the full-size image.
  • Fixed preview rendering bug when input images are float-valued with out-of-range values (<0 or >1.0).

ZArt

  • Add missing include for QButtonGroup.
  • Compiles again with Qt 4.8 2.
8 Likes

Awesome. I don’t remember: is there documentation on GUI related features?

Not so much, the main doc is available in the header of the file gmic_stdlib.gmic.
Here basically, I’ve used the newly introduced point() parameter to provides a movable boundary for the split preview mode.

Could you add the inverse hyperbolic functions?

Commits Sign in · GitLab and Sign in · GitLab implements the support of new commands acosh, asinh and atanh in G’MIC, as well as new functions acosh(), asinh() and atanh() in the math parser.

2 Likes

Interactive Window without having to go into interact mode on Julia filter? Does this mean I no longer need to go on separate window? Like for extract foreground, and eventually Quadredal or whatever that is that can be used to place skewed document into a rightfully placed one.

No, we have allowed one kind of interactivity in the preview window, with movable points.
Although this is already a big step forward :), it doesn’t cover all the interactive use cases.

For instance, it is not possible to conveniently let the user add an arbitrary number of points, which would be required for the Extract foreground and Colorize filters.

Ok, thank you for letting me know.

@David_Tschumperle, thank you for the “mixer [PCA]”. Awesome!

@David_Tschumperle,

Question from a layman; “Can there also be curves based on PCA?”, so we can use:

GIMP>G’MIC>Colors>Curves
with colorspace PCA

I saw code from the “mixer [PCA]”, so I suppose this would be quite complicated.

  • 2018/08/17 : Release of version 2.3.4.
2 Likes

Where have you been just out of curiousity?

On vacations, as may people do during summer :sunny:

3 Likes

Incoming long post. Since filter devs (should I be considered one?) have been asked to post a bit more about their new filters to ‘on the road to’ threads like these concerning G’MIC, I’ll post my entire .gmic file as a text file and walk through the filters that I’ve added and updated:

jr-230818.gmic.txt (29.9 KB)

I’ll be using this public domain image to demonstrate each filter.

UltraWarp++++ is an extremely-complicated filter which warps images multiple times, applying many different operations before and after the warping process and most importantly after each iteration. It can deface images very quickly and has many parameters which allow for precise ranges in which random values are passed to each of the commands that it uses within iterations. It can also be used to generate extremely-abrasive textures from scratch through a built-in plasma texture generator, though it’s at its best when distorting flat images with few colours and with alpha channels or masks.

image

Cascading Self-Glitching is similar but has a very different mechanism of image destruction, being based on the self-glitching filter which David made. For each iteration, it copies and shifts an image whose pixel values interact with those of the copied image through a given operation. It also operates on image values for different colour spaces, producing many jagged and distorted artefacts. Its main problem now is that it’s hopeless at treating the alpha channel correctly so I will be trying to fix that unless I forget about it somewhere because it’s fun to use it for making ridiculously-crunched images. It has over 600 channel mode and operator combinations. Also if anyone has any more ideas about operators, please give me some.

image

The Sawtoothers are modulo filters which operate individually on preset channels, manipulating values as if they are part of a sawtooth function. The channels can be smoothed beforehand to yield some unusual artefacts alongside the trippy colouring.

image

Rectexture generates random textures out of rectangles. It can make sharp black-and-white textures or multicoloured textures with optional warping to distort them enough to complicate them some more. It’s a bit broken with the alpha channel but set it to run on RGB (no alpha) and it’ll work fine.

image

Hard Painting is a simple combination of two other filters: painting and multiple iterations of graphic boost. It can be used to make very glossy and high-contrast images (which are perfect for UW++++ and CSG).

image

Rays from image is a specific and easy polar transform which generates multicoloured rays from the image corresponding to the point at which the rays originate (I found it while messing around with the polar transform filter). If the power is left at 5, it produces rays which roughly correspond with the directions of objects of the given colours at from that point.

image

That’s all I have for now, I’d love to see someone else turn these filters into something unbelievably-distorted and glitchy.

@David_Tschumperle Also if you have time and it’s easy enough, can you make rgb2pca a thing (with configurable twist options like in the mixer and maybe even an option for a number of channels?) That would be extremely-useful for all sorts of filters and it would go down a storm in the CSG one.

5 Likes

Question though to Joan, shouldn’t the credit also go to you. Basically, you could credit @David_Tschumperle as a note, and put your name in authored or you could put info that @David_Tschumperle made the original filter, and you edited it.

Since he asked us to describe new filters.

Testing > Modulus Operations
A simple filter which treats image as 8-bit and then apply arithmetic operations, and find the modulus of division by 255.

I have seen that in a few places. It is only slightly irritating. I guess it would be nice. E.g., for my darken sky filter, I credited @Carmelo_DrRaw and linked to the thread that inspired it. It isn’t the same as his technique but I wanted to credit him and provide a way for people to give feedback in the future.

I don’t really care about any credit that I get. Sure, it might help to keep track of things so that people don’t falsely associate filters with the wrong authors but I only really came here to show my filters so that I’d get help and others would use and modify them further. I probably won’t be able to support too many people having issues with them either; I would like to remain a hobbyist.

Rectexture has updated. I’ve added two more random colour modes.

@Joan_Rake1, a really convenient thing for me would be that you fork the gmic-community project:

and then, create pull requests when you’ve done modifications to your .gmic file, located in include/joan_rake.gmic. This way, I could update it more easily (and thus, more often !).

I’ve done the update today.

I can do that if I learn how to use GitHub. I suppose it’s easy. I hope.