12
$\begingroup$

I was wondering which is the best language for image processing? I know MATLAB has a good library and user community for it. I havent checked it out, its there for python as well.

What is the most efficient language for this?

$\endgroup$
12
$\begingroup$

It's not only about programming language but library you are using. I can think of the following:

MATLAB - image processing capabilities are quite ok, but for more advanced and real time processing you would need some low-level stuff. Additionally, it does not offer very good portability.

Mathematica - good for prototyping and quick visualization, but that is all in my humble opinion.

OpenCV - I think this is the most popular library in IP community. Great capabilities (GPU computing, Machine Learning module, GUI - what else do you need?), fast, and still under development (so minor bugs are being removed very quickly). Regarding community - it's big! Mainly for C/C++ programming, but also Python (probably suits you).

JAI - Java Advanced Imaging - only if you like Java. Personally, I do not like it.

ImageMagick - you can use it with many programming languages, check the API.

CxImage - good if you want to create something better than MS Paint and with some functionality of the Photoshop.

CImg - obviously to be used with C++, but OpenCV is still better.

PIL - Python specific library with lots of functionality. If you like it then you can take a closer look.

SimpleCV - basically it is OpenCV python binding with some tweaks. Very easy to use and quite efficient.

scikit-image - also Python library, but in my opinion worse than SimpleCV (although my friend would not agree to that). One advantage is that they included DAISY features extractor - quite useful if you need dense features.

GIL - part of Boost, but less functional that OpenCV. Although if you like and use Boost then for some basic functionality it should be ok.

ResIL - continuation of DevIL project. A major advantage is operating on many file formats, including some game files.

PINK - originally written in C++. I recently tried it out and it was very pleasant to work with. Great integration with Python and fast in embedded C. Apart from that they do have plenty of nice algorithms.

Obviously, there is plenty more Image Processing libraries, but these are ones I had contact with. So if you want to start with something, then choose OpenCV (preferably with C++ framework) - you will not regret! On the other hand, if your programming skills are not strong, then you might want to think about using Python-based libraries - really easy to learn and set-up.

$\endgroup$
2
$\begingroup$

MATLAB is the best language for learning image processing. (it is my opinion)

It is simple to learn, hardware independent, more flexible than any compiled language, possibly more efficient than script languages (due to its inherent dlls optimized for signal processing at the machine level), it has good academic and engineering support.

C/C++ is the best language for creating standalone applications of image processing. Under your suite of IDEs you may generate native code which is the most efficient. And IDEs for C++ provide better machine level debugging features.

Some script languages are being also used. They are indeed flexible, portable, even considerably efficient, however debugging may not be easy at low levels.

Also new GPU processing capabilities of CUDA, OpenCL etc. make dramatic increases in computational throughputs. (However they are more difficult to learn since you should be aware of the underlying GPU pipeline hardware architecture to make use of any efficiency gains)

$\endgroup$
-1
$\begingroup$

If you want to roll your own algorithms or code, then include OpenCL, as many image processing kernels are "embarrassingly parallel".

Or, on Big Iron, Fortran still beats most other languages at numeric vector performance.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.