169 comments

[ 1.9 ms ] story [ 233 ms ] thread
It is in late beta stage. Any comments and help is highly appreciated.
Which can of help are you looking for?
The usual kinds of help (like any help! (-, ):

- Providing new ideas

- Bug finding

- Bug fixing (https://github.com/cpvrlab/ImagePlay/issues)

- Documentation (improvements)

- Website (improvements)

Sounds good... I will check the repo later to see if I can help with some bugs :)
ImagePlay is a rapid prototyping tool for building and testing image processing algorithms. It comes with a variety of over 70 so called processes which can be combined into complex process chains. ImagePlay is completely open source and can be built for Windows, Mac and Linux.
i couldn't find any way of adding images to it as a start. (OSX)
Okay this might be a use full hint to show in the beginning: To load an image simply use the "Load Image" process in the "Input/Output" category.

You can also directly access the WebCam this way if that is your style (-,

How it compares to Gimp? I use this tool to do various processing (mainly photomontages), and there is a lot of filters, so, what is added by imageplay?
Gimp is user friendly image editing software. It hides away as many as possible of the gory details.

Imageplay on the other hand is there to prototype and learn about image processing. You can build complex pipelines with basic image manipulation algorithms. As all code is available you can later on use your own design algorithm in your projects.

Also you can directly stream from the WebCam to this pipeline, something Gimp can not. (-,

If you want gory details, try G'MIC[1]. It has plugins for GIMP and Krita, an online version[2], a ridiculous number of filters[3] and features, and a command language. On the other hand, it makes things like imagemagick look simple and user friendly. My favorite quote from the "Beginner's Cookbook":

> The image of a finger or a brush pushing along paint immediately brings to mind tensor fields, produced by -diffusiontensors, which directs asymmetrical smoothing kernels in the -smooth command to diffuse noise parallel to detected edges

[1] http://gmic.eu/ [2] https://gmicol.greyc.fr/ [3] http://gmic.eu/gimp_filters.txt

I was not aware of G'MIC. We could try to implement a G'MIC process which gives access to this filters.

Does G'MIC also provide a ImagePlay like interface?

Reminds me of Khoros[1] and Cantata[2] that I used back in the early 90's. Sadly neither seem to exist anymore.

[1] http://www.hpl.hp.com/techreports/92/HPL-92-96.pdf

[2] http://www.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html and http://www.cs.ioc.ee/~khoros2/k2tools/cantata/basics-cantata...

Nice! Thanks for these references. We, the current developers, did not know about these papers. Actually the idea of Imageplay was created by a professor now in retreat.

I definitely need to ask him if he know about these.

Definitely worth having a look at them as they will have faced and (maybe) solved quite a few of the same issues you'll be facing.
Seems to have a couple of issues on the mac - the image viewer doesn't seem to show anything (zoomed in view works, but no image in main display).

Hough line detection seems to be complaining about some opencv issue.

Other than that it's pretty good.

This reminds me of the mathmap GIMP plugin [1]. I played around with it a long time ago.

[1] http://www.complang.tuwien.ac.at/schani/mathmap/

Wow, this looks nice. You can search for hours on yourself and than HN tells you in minutes what is all around. Amazing!

Yes I think ImagePlay is quite comparable. I have too look into the details to see where it differs. I imagine you can also really simple add new own plug-ins?

> I imagine you can also really simple add new own plug-ins?

You could write your own filters in its custom language and save them, of course you could easily download existing filters from others and save them too. I don't remember if you could save composed filters, last time I used it was in 2007 and I was still in high school. I found my abandoned flickr profile, I really liked writing geometry filters [1]. The two spheres and the two spiral patterns were made using mathmap. Right now I can't find an easily installable version for Linux though. As far as I remember it could compile its filters to c then binary if gcc was available.

One other interesting property of mathmap: It didn't cache intermediate results between filters and handled images as if they were infinite and had infinite resolution. It works, because if you only care about one given pixel of the resulting image you can calculate the previous image pixels lazily. It allowed really convenient compositions, like composing a Mandelbrot-set generator and a zoom filter then zooming into the set indefinitely only adjusting the zoom filter.

I didn't try ImagePlay yet. Can you write your own filters in it or you can "only" compose from the existing filters? Writing your own filters was a killer feature of mathmap for me, especially for custom geometry filters.

[1] https://www.flickr.com/photos/10529466@N02/

We provide a C++ API: https://github.com/cpvrlab/ImagePlay/wiki/Plugins:-01-Tutori...

You basically get access to pixel values and can then do whatever you want. Might not be comparable to what mathmap does though.

Yeah, this is more than enough, I'm definitely going to build this.
Cool, absolutely looking forward to this.
A question, would you personally prefer to host this Plug-In once written:

- on your own GitHub account?

- a ImagePlay Plug-In Repo?

- or integrated directly in the main Build?

Well, I guess I would prefer GitHub and license it GPL3, then you can use it any way you want. It would be flattering if it was integrated into the main build.
Okay, looking forward for a main build contribution!
Can I just say that I for one am incredibly glad you made this program, regardless of whether the GIMP plugin exists?

Thanks so much@

We are happy you like it. Thanks for the support.
I am so ecstatic that I would even pay for this program. (I'm not a person who is usually willing to pay for computer applications).
Okay then please keep your excitement, we are looking into a solution. Most probably PayPal Donation button. ok?
Uhmmm, okay. I guess have multiple ways to receive money -- e.g., some folks like to give "anonymously" via Bitcoin, some folks are okay with Paypal, some are not, etc. etc.
I see, we provide for now a PayPal button at http://imageplay.io/#feedback
Thanks. By the way, I suggest making a dedicated 'donate' page, as linked by a 'Donate' button in the navigation bar (to the right of '[...] - Download - Github - Twitter')
Wow! The screen shots on the site revealed something pretty cool. The exact center of the 512 x 512 Lena test image is the middle of her right eye's pupil.
Hehe good observer skills! I did not realize that yet.
You should look up the original, you will see it's not so centered on the eye. wink wink. know what I mean. nudge nudge.
Cool stuff!

If I can give some feedback about website, scroll is behaving in a weird way. It's not a good idea to alter this behaviour, it should be what user wants and is used to, no what author thinks is good :)

Finally we are C++ developers not Webwizards. (-,

But we love to have pull request for the website. https://github.com/cpvrlab/ImagePlay/tree/gh-pages

Thanks!

Would you be open to Wavelet Transform implementation for images? Features does not have that and I think I will love to do it. I guess it will come handy for someone trying to fiddle with BM3D image denoising.
We currently allow to convert images to Fourier space using FFT. We might add wavelets later on, thanks for the feedback.
Pretty cool for an open source project. Reminders me very much of Filterforge (http://filterforge.com/) just missing the photoshop filter part.
Looks nice! Though ImagePlay does have a quite different public I guess. It was build mainly for education and prototyping.
Is there some similar (but a higher level) tool for computer vision ? one that you don't need much computer vision knowledge to build useful things ?
What is this using to do the actual processing? (i.e. is this using OpenCV behind the scenes or ITK or it's own code)?

Can this handle:

1. int16 and float data

2. 3D datasets

The algorithms are either our own or OpenCV. Images are currently converted to 8-bit when loaded. But all processing is done internally as float. We plan to support int16 and float images soon.
What colorspace does it use? I suspect it is sRGB. Can a user change it? There could be filters that makes more sense in a linear colorspace. Anyway any sane colorspace handling would be awesome.
When loaded, images are converted to sRGB. Internally, all algorithms use float values so we might add additional color spaces and color depths.
Nice, it run on Mac Yosemite but has problems on 10.8 probably because of OpenCV ...
We tested with Mavericks 10.9, 10.8 we never tried. We might investigate this. Should not be a biggy.
Looks like a nice tool to prototype for OpenCV.

Question: What made you choose the classical QT gui over QML ?

The project was started quite some time ago. Today we mainly use QML in our projects.
This is cool.... Would be nice to be able to use more processing algorithms such as SIFT[1]. Or would the SIFT patent get in the way of this?

[1] https://en.wikipedia.org/wiki/Scale-invariant_feature_transf...

This is totally feasible, ImagePlay allows to add your own Plug-Ins. Like this you can also add algorithms which are patented (which I don't know if and how and where SIFT is.)

https://github.com/cpvrlab/ImagePlay/wiki/Plugins:-01-Tutori...

Very cool. I would love to be able to programmatically interact with this through python bindings, though, rather than the GUI.
Yes this might be a future option to open the Plug-Ins to other programming languages.

You might also look into the from rer0tsaz proposed (https://news.ycombinator.com/item?id=10009228) G'MIC. Not sure if there are Python bindings though.

Further is there already tons of good Python Image Processing libraries around, mostly build around PIL.

Yes, or with programs that I could use on the command line, like ImageMagick's convert.
I'm not so sure that blue background image used is without copyright..
What makes you think so? (Honest question, I don't recognize it from anywhere.)
Awesome project, I can't wait until there is a section on the website talking about "use this chain if you want X".
Yes, you are not by any chance a full web stack developer looking for a open source project to invest some time? (-,
No but I would be flattered to contribute what I find and organize it for you guys!
Absolutely awesome. I am about to embark on a large image processing / ML project for work. This is just what I need!
That is what is was mainly build for. From a prof for students. (-,
Awesome project, can this compete somehow with photoshop in the future? Project has almost everything, custom plug-ins, custom filters, open source, devs can develop bindings and etc,.
I don't think so, Photoshop (and GIMP too) are oriented to the photographic community: the UI, the tools, most plugins, etc. This seems to be more aimed to students and researchers. Though in theory, if the processing engine in the back is as good (and there's no reason to think it isn't), it could, the UI would get in the way to perform the same tasks that you would on PS.
I read somewhere Gimp is more web base and Photoshop can be both print and web.

Since they did away with version for Cloud base, I think Gimp have an advantage.

I have used GIMP a little, GIMP is great, but my experience with it, was not enjoying. only advantage I could see using GIMP over photoshop is probably because it is free.
Try Krita.org then. It’s free, too, and a bit more focused on creative work, but it supports all the colorspaces, all the vector layers and everything. A lot more usable than GIMP, too.
First thing I thought about when I saw this was "can my wife, a photographer, use this instead of creating Actions in Photoshop to automated certain enhancements?" She does a lot of manual tweaking, but I'm going to show this to her tonight and see what she thinks.
Uhh, please just let us remind you that it is in beta, late beta but still beta. So be careful in a professional setup.
Excellent answer, I can't add more (except that we don't know about the processing engine of Photoshop (-, )!
>It comes with a variety of over 70 so called processes

Minor nitpick, that reads like you are mocking your own product.

Thanks for this hint from non-nativ speakers.. Better alternative?
"ImagePlay comes with 70 built-in processes." And then you could provide a one sentence description of what processes do.
I removed the "so called" for now. Thanks
I'd call that 'processors'. Something like 'load image' could be called 'source' and 'save image' a 'sink'. Of course I'm biased since I have been using such naming schemes for years in signal processing software
We will discuss this internally. We have not given to much though on nomenclature. It is mostly historical use.

Under the hood we have here ImagePlay 6.0 which is a rewrite of good old trusty Borland C++ code.

"Tools" or "functions" probably work and fit in well with descriptions of processing in graphics packages; "processes" seems fine to me (like the suite from http://processing.org ).
Yes. Functions or methods or procedures is preferable to processes. "Processes" implies threads or independently executing activities, like multiprocessing.
For what I know, "processes" is an established term in component-based paradigms like flow-based programming, which this system seems to have many similarities with.
I guess it's what you are used to. Back in the days I toyed with music production and actual hardware units usually had names like synthesizer/flanger/phaser/equalizer/mixer/processor (so not the verbs like synthesize/flange/phase/equalize/mix/process) and I just took over those. There might be counter examples of course but I cannot come up with one atm.
(comment deleted)
Great project! Would be nice to have something like an "export as code" feature.
Oh, we were waiting for this one: Sure that is what we got quite often as feedback! And it is somewhat planned.

Though it is not straight forward to create performant code at the end. But we might investigate to export a list of snippets in a first step.

I think the 'performant code' is not so much as a must have for those - like me - that are more interested in the logic rather than the code itself.

Also, IMHO a high level abstraction would be preferred when porting/coding said logic to another programming language.

Also, how do you connect processes in Mac?
CTRL, do you think CMD would be more intuitive?
Ah yes CMD would be better! Thanks!

It was not in the tutorial as well. The tutorial says "Drag with the right mouse button..."

Yep. I got stuck on this.

On many laptops right-dragging can be tricky.

I've thought about something similar, with the ability to generate sprite sheets.

Is this possible with this tool?

I am not sure what features you exactly want for your sprites. But in general you could create a Plug-In which saves sprites yes!