Cool java conformal map widget


(Lyle Kroll) #1

My bet is the output options that this cool java jar does can be done in G’MIC as well. Got the link from Günter Bachelier. :slight_smile:

https://karczmarczuk.users.greyc.fr/TEACH/InfoGeo/Work/ComplexMapStill.jar


(Lyle Kroll) #2

Just as a side note, the java app renders these type of outputs faster and better than mathmap. Pretty impressed. :slight_smile:


(Lyle Kroll) #3

I did post a parallel thread at GIMPChat with some of the results from this cool applet. :slight_smile:

http://gimpchat.com/viewtopic.php?f=22&t=14868&start=0&sid=c82dedeec59aabcb7913ed2013961902


(Günter Bachelier) #4

Have you compared the quality of CMs from different systems? I am very
interested in this. No idea if ComplexMapStill is using
antialiasing/supersampling. Some of my image experiments show pixel
blocks when zoomed in so I am skeptical but your examples are looking
good. It seems that CMs are not included in gmic at least I found
nothing in gmicol.greyc.fr but there is the Droste effect so gmic could
in principle do CMs.

On a not unrelated topic: Thanks for the link to to program Pointcare in your album
https://www.flickr.com/photos/34520999@N05/albums/72157626810239888. It
is OS and C++ so I am wondering if it could be ported/reengineered in
gmic.


(Lyle Kroll) #5

I would really like to see Poincare ability ported to GIMP (so I can actually have a GUI to create the result). Have to sort of eyeball the triangular selection to feed it into the Poincare program (do have a mask that I use though). Haven’t played with Poincare in a long time now though. G’MIC can do everything these stand-a-lone programs can. Just takes someone with programming talent to do so (and have none; just an end user). :slight_smile:


(Günter Bachelier) #6

Just takes someone with programming talent to do so

I have the serious intention to look in freelancer.com for someone to
clone/re-engineer a FilterForge filter [1] that is able to do regular
hyperbolic tilings [2]. As I see it, Pointcare is only a special case
were the prototile has triangular shape. This is planed after I find a
reliable solution for batch processing with conformal maps. At the
moment I prefer a Matlab solution [3] or building a command line version
of the Java applet.

[1] link to the filter is somewhere buried in the discussion
https://www.filterforge.com/forum/read.php?FID=10&TID=10269

[2] https://en.wikipedia.org/wiki/Uniform_tilings_in_hyperbolic_plane

[3] http://de.mathworks.com/help/images/examples/exploring-a-conformal-mapping.html


(Lyle Kroll) #7

Cool to see you post here, Günter. Didn’t know you could even do this in Filterforge (wish I would have invested in this cool program with it was still cheap; lol). :slight_smile:


(Günter Bachelier) #8

at the moment FF has a special offer https://www.filterforge.com/buy/ (79$) like 1-2 times a year


(David Tschumperlé) #9

I’d be interested to have this in G’MIC by the way.
Writing a G’MIC filter is not that hard, and I believe the embedded math parser is powerful enough to allow implementing this :slight_smile: I’m not an expert in such deformations, but if anyone wants to try, I can help for solving G’MIC-specific issues.


(Lyle Kroll) #10

Here’s a site for some more inspiration. It’s been a while since I visited this site and I’m still in awe with the results posted there. :slight_smile:

http://www.bugman123.com/index.html


(Lyle Kroll) #11

Also, for what it’s worth, I started the thread below (dated now; 5 years ago) that some here might be interested in. :slight_smile:

http://gimpchat.com/viewtopic.php?f=22&t=1825&start=0&hilit=poincare


(David Tschumperlé) #12

Conformal maps filter available in the G’MIC plugin :


(Lyle Kroll) #13

Cool stuff, David. Now what is the formula for a Poincare’ result. :slight_smile:


(David Tschumperlé) #14

I’m a bit worried about the timings folks at GimpChat get (3 minutes for a 3000x3000 image).
Could someone try the filter on Linux. Even on my laptop, it takes like 8 seconds for a 3000x3000 color image, so I can’t understand why it should take 3x60 = 180 seconds on another machine, even on Windows ! There must be something wrong that should be fixed.
Anyone on Linux who could run the filter on a 3000x3000 color image and tell me how much time it took ?
Thanks!


(Lyle Kroll) #15

That includes me; a very much smaller image took 3 minutes on my 3 year old PC with 12Gs of Ram and 8 core AMD. Not sure why it’s so slow. You aren’t obviously seeing the speed problem. Not sure what the issue is. Even the default z takes the same amount of time (3 minutes). Don’t think it’s a processing issue; some other issue is slowing it down. Pretty much have to disable preview too since it just hangs. Hopefully it’s something simple. :slight_smile:


(Ingo Weyrich) #16

Are you on Windows?
Then an explanation could be the 4-way L1 cache of AMD in combination with memory allocation on Windows.
I also have an 8-core AMD and often ran into that problem wile optimizing RawTherapee.
If so, there are solutions to work around this problem.
I can explain it more detailed if needed.


(Lyle Kroll) #17

Yes; running WIn10 64-bit. Would be interested in hearing those solutions, heckflosse. :slight_smile:


(Ingo Weyrich) #18

Ok, I’ll make an example. Assume the following code:

// on windows (at least on windows 7) buffers a,b,c,d and e will have an address
// which has the same offset to 4096 which means they will use the same cache set
// AMD has only 4 lines per cache set

float *a = (float*)malloc(10000 * sizeof(float));
float *b = (float*)malloc(10000 * sizeof(float));
float *c = (float*)malloc(10000 * sizeof(float));
float *d = (float*)malloc(10000 * sizeof(float));
float *e = (float*)malloc(10000 * sizeof(float));
float *buffer = (float*)malloc(10032 * sizeof(float));
float *f = buffer + 32;    // let start f at a different offset
// some code to fill a,b,c,d and e

// Calculate f
for(int i=0;i<10000;i++) {
    f[i] = a[i] + b[i] + c[i] + d[i] + e[i];
}

// what happens now:
// a[0] will be read and the a[0] .. a[15] will go into line 0 of the corresponding set in the L1 cache
// b[0] will be read and the b[0] .. b[15] will go into line 1 of the corresponding set in the L1 cache
// c[0] will be read and the c[0] .. c[15] will go into line 2 of the corresponding set in the L1 cache
// d[0] will be read and the d[0] .. d[15] will go into line 3 of the corresponding set in the L1 cache
// e[0] will be read and the e[0] .. e[15] will go into line 0 of the corresponding set in the L1 cache
// because AMD has only 4 lines per cache set that will throw a out of L1 cache
// f[0] will be written
// a[1] will be read and throw b out of L1 cache
// b[1] will be read and throw c out of L1 cache and so on..........
// the solution is to do what I made for f (let it start at a different offset)


(Lyle Kroll) #19

How do you edit the registry to optimize? lol

Way too over my head at the moment. :slight_smile:


(Lyle Kroll) #20

This is parallel to what I just posted at GIMPChat. Since I didn’t post here, this is what I did. I installed GIMP in my Ubuntu VM and then the text below will make sense. :slight_smile:

OK; took me a bit to figure out Ubuntu. Man; first GIMP launches like near instantaneously. As for G’MIC (after I figured out the hidden directory structure; lol), is like lightening faster. Took around 5 seconds to run (preview fast too). Yup; there’s a problem with the Windows build. Not sure what the solution to it will be though. :slight_smile: