Release of G'MIC 2.4.0

  • 2018/08/28 : Release of version 2.3.6.
  • Add filter Details / Constrained Sharpen, to sharpen images without producing halos.

3 Likes

I’ve started the work toward the version 2.4.0. So, next G’MIC release will be v.2.4.0.

This will break some existing codes, with a few syntax changes or improvements. I’ll post pre-release packages regularly to be sure people can test with the very latest version (hopefully the first one in one hour or so).

One ‘big’ change has already started : in math expressions, init() has been renamed to begin(), so the starting and ending functions of an expression are now begin()... end(), which is more coherent (init() may be reserved for another use in the future).

I’ve already changed all the .gmic sources in gmic and gmic-community to reflect this change.

Be aware also that from now, and since the release of version 2.4.0, filter updates won’t be done anymore for the previous versions (2.3.x), but will be available only for this upcoming 2.4.0 version.

There’s Modulus Operations which is under Testing/Reptorian, but that’s not mentioned. Anyway, it’s a bit too simplistic to be worth noting at this point, and the note should be:

This filter applies modulo operation after arithmetic operation. Sawtoothers filter are the more advanced version of this filter, however this is a simplified version of Sawtoother(RGB), and it's more useful in cases where you want to change all channels at once.

I’ll PM you a pic since I couldn’t get anything other than full preview to work there.

Maybe you shouldn’t add news for filters that are still in Testing/ , because they are not as visible as the “regular” ones, and if they are still in Testing/ , there may be a reason :slight_smile:

Okay, I understood.

Cool stuff. One of the things I’d love to see is substitution of multiple commands via strings. I’ve tried putting together series of commands using string concatenation techniques and variables for the mathematical parser to use but sometimes when it’s very deep in a block (say, in a j() argument which is itself inside an if expression after a condition), it’ll say that it hasn’t recognised it. Meanwhile, stov() parses the values inside, which isn’t good if I’m trying to build a command out of various parts (say, concatenating “rgb”,“2”, and “srgb”). This would be cool for dramatically reducing code duplication and it may even allow for some processing optimisations.

You can actually do something even more flexible, as you can include regular G’MIC variables to generate your G’MIC expression to evaluate. Like this :

if {$1==0} op="+" else op = "-"
f "x "$op" y"

That’s what I’ve been doing (and you’ve mentioned it to me before, beyond this issue it works a treat!); it doesn’t work when it’s in some highly-nested operation. It didn’t work in the specified example I gave, which occurred when I was updating the cascading self-glitch filter earlier (I’ve found a workaround but I’ve had to duplicate some code).

Now that I think about it, will there be an option to set single parameters back to their defaults? I think there already is but I’m not sure.

Hi David,
there is an interesting change of “thinning” from 2.3.6 to 2.4.0
See with gmic version 2.3.6
gmic version follic_ k. +not. thinning. m .config/gmic/update240.gmic +not… thinning.

May be the influence of the image borders should be avoided.

That’s the exact reason of the difference indeed. In previous thinning, the bounday conditions was set to Neumann (meaning the first/last image row/column repeats itself indefinitely outside the known image domain), and the new one was using Dirichlet (meaning pixel outside are considered to be 0).
Both results are then correct.

So, what the boundary condition to keep ? I guess adding a boundary_conditions parameter to the thinning command is probably the best way to do.

EDIT : Should be fixed now. Reverted by default to same boundary conditions as before, but you can still specify the other one if needed.

I would recommend as default the Neumann condition. Skeletons are typically done for isolated non-border touching objects, meaning independent on Neumann or Dirichlet, still exo-skeltons should not reflect the image border, hence Neumann.

boundary condition parameter is a good idea!

EDIT: Hmm, I am obviously a bit slow…

EDIT 2: Possibly the condition parameter could be hidden? Actually this new thinning breaks old code, the parameter is necessary!

gmic follic_ k. +not. thinning.

[gmic]-2./ *** Error *** Command ‘thinning’: Undefined argument ‘$1’, in expression ‘$1’ (for 0 arguments specified).

EDIT 3: Nice new skeleton! Seems a bit more reliable (medial line like) compared to thinning
gmic follic_ k. negate. +thinning +skeleton… negate… a c
Blue skeleton, green thinning, Perhaps some minor glitches on the far positions?

Will edge offsets, skeleton and thinning have anti-aliasing? I’m making a fingerprint texture generation filter. Meanwhile, I’ve added some features to deform:

#@cli deform : _amplitude>=0,_interpolation,_matrix_size[%]>=0,_matrix_interpolation
#@cli : Apply random smooth deformation on selected images.
#@cli : 'interpolation' can be { 0=none | 1=linear | 2=bicubic }.
#@cli : 'matrix_interpolation' can be { 0=linear | 1=bicubic }.
#@cli : Default value: 'amplitude=10'.
#@cli : $ image.jpg +deform[0] 10 +deform[0] 20
deform : skip ${1=10},${2=1},${3=2%},${4=1}
e[^-1] "Apply random smooth deformation on image$?, with amplitude $1."
v - repeat $! l[$>]
S={${"is_percent $3"}?max(w,h,d)*$3:$3}
P={$4==0?3:5}
$3,$3,1,2 noise. $1 r. ..,..,1,2,$P warp.. .,1,$2,1 rm.
endl done v +

Here’s what it can now do:

image

image

Another new filter while I try to sort out the network and configure GitHub (which I might just give up on): a fingerprint-like pattern generator. It requires the upgraded deform filter.

image

.

2 Likes

If you’d like to connect via jitisi meet, I can help you set up github.

Made a breakthrough so I’m good for now. In the meantime I want to make a more realistic fingerprint filter but that will require heavily-warping straight lines rather than the concentric circles that the filter generates. I’ve renamed the updated filter to ‘Crazy Texture’:

Here it is with an updated deform filter.

And now that I think of it, can it be possible to have channels in warping maps which are used to twist portions of images?

Got carried away and forgot about GitHub while making some new filters. I’ve made two new ones and modified an existing one slightly.

Neon:

image

Dreamy Abstraction and then Neon:

image

3 Likes

My GitHub account is set up properly now. I want to be able to use my browser to do it since I’m slow with command lines. Do I create a pull request to update the files?

Meanwhile, Neon has been updated (fixed). Two glows, a better negative mode and some more adjustments besides that.

image

image

The issue is that large circles sometimes disappear when the smoothness is within a certain range (this is a bug with the gradient norm filter as well as the difference of gaussians one).

Edit: made a pull request on GitHub.

2 Likes