I use Gimp on Windows since very long and I learned by trial and error what many tools do. For some of them, like ‘rotate’, ‘crop’, or selection tools, the technical meaning is obvious. One can also imagine how they can be implemented.
But in the case of other tools, like ‘shadows and highlight’, ‘levels’, ‘curves’, the very same meaning is for me obscure.
Concerning yet other tools, whose meaning is quite clear, like ‘exposure’, ‘saturation’, ‘lightness’ and others, I would be interested in which way are they implemented.
Whence the question: where could I find thees information?
For some of them one can maybe find definitions in Wikipedia (what do photographers mean through ‘saturation’? What mean in image treatment programs terms like ‘shadows and highlights’. Dose anybody know if there is a some other lexicon that one could consult?
Concerning the implementation, this is a total mystery for somebody who is not (yet) involved in development. And probably the corresponding papers are scattered and very technical. But one can always legitimately hope… Is there a way to find this kind of information? Should one read something like a book on “An introduction to the digital treatment of images”? If yes, which would be a good starting point?
I presume that not many people have the necessary competence to answer this question, which probably doesen’t interest many Gimp-involved-guys. But if anybody can help - I’d be grateful.
I also recommend the book “Computer Graphics Through Key Mathematics” by Huw Jones. The focus is on vector graphics, but there are chapters that address raster methods as well. If you want to understand curves, you’ll need to know about vector methods.
There are quite a few other books about computer graphics, many of which are new since I bought the ones I own.
Highlights and shadows are topics in the field of “rendering”. Traditionally, shadows were drawn using the rules of “linear perspective”. However, that’s not the way they are implemented in any computer graphics package I know of. Two methods of rendering are “ray-tracing” and “radiosity”. Basically, the idea is to determine the color of each pixel in an image. An image is normally represented as a rectangular grid of pixels.
“Saturation” is a term from the field of color theory. Colors are described using “models”. One model is “red, green, blue” (RGB), where colors are determined by the levels of intensity of three LEDs, a red one, a green one and a blue one. The smallest possible pixel will consist of three such LEDs. If each color is represented by 8 bits, then you can have levels from 0 to 255 for each pixel. That is, (10, 110, 2) would be a color with values for red, green and blue of 10, 110, and 2, respectively.
Hue, saturation, value (HSV) is another “color model”, but I’d have to look up how it works.
Saturation is how “strong” a color is, in this image, in the HSV model, the Hue and Level are the same in all squares, and the Saturation goes 100/75/50/25/00:
Thank you - I think you gave me a good input with the book on computer graphics. I’l try to find some more recent ones. As for Gimp-Documentation, I laboured those pages, but most of the texts I found are recipes for how to use the tools that Gimp offers, and this is something I more or less can do. But I’d like to go beyond recipes.
Thank you again.
You’re welcome. I don’t think very much has changed since I started working on computer graphics, except in detail. The advantage of the book by Huw Jones is that he explains the concepts without getting too much into detail (and mathematical proofs), so that you can get an overview of the subject.
What GIMP does is usually at the end or close to the end of the “graphics pipeline”. Most books on computer graphics focus on what happens before you start manipulating images at the raster level. GIMP is probably most often used for retouching and manipulating photos, whereas most books on computer graphics handle how images are created using the computer.
I don’t know whether you’re interested in computer graphics in general or only image manipulation. For computer graphics in general, the basis is “homogeneous coordinates”, i.e., 4 coordinates to represent points, conventionally called x, y, z and w, and “transformations”, represented as 4 by 4 matrices. Points are moved by means of “matrix multiplication” and the field of mathematics that this topic belongs to is called “matrix algebra”. “Vector” is also an important concept and computer graphics programs implement “vector operations”.
Another important concept is “spline curves”. In 3D graphics programs, NURBs, that is, “non-uniform rational B-splines” are the standard way of representing curves.
These concepts relate to “vector graphics”. To represent an image on a screen or to print it, a “vector image” must be converted to a “raster image”. “Raster” is another word for “grid”, i.e., a grid of pixels. The process of converting a vector image to a raster image is called “scan conversion”.
Thank you again. I asked myself if the word “vector” had its usual algebraic meaning. It has, and it is logic. I’m actually interested in the algorithms used in retouching photos and why they are used. I don’t know if this way of expressing me is correct, but perhaps it is.
“Vector” unfortunately has several different meanings in the context of computer graphics. First, its mathematical meaning, i.e., an object in with magnitude and direction but no position. Then, in programming, the term “vector” is used for a one-dimensional array. In addition, the Standard Template Library for C++ implements a type called “vector” which can be used similarly to a one-dimensional array, but with added functionality. “Vector graphics” refers to programs that store information about objects and generate their representations when needed. This makes it possible to scale them without loss of resolution, unlike “raster graphics”.
Points and (mathematical) vectors are distinct, but both can be represented as sets of 4 coordinates, so that, in practice, the same object type can be used for points and vectors and a single object may be interpreted as a point or a vector, depending on circumstances.
I’m afraid I don’t know very much about raster methods, although I could make an educated guess about how some of them could be implemented. I imagine many of them involve examining every pixel in an image and applying an operation to some or all of them. I rather think there’s no way around picking one to start with, reading the source code and trying to understand what it does.