From: Tamas L. <lit...@gm...> - 2023-06-19 20:30:57
|
Thank you for your fast reply! It took me a few days to find the bug in the "reverse interpolation" part, and you are right, I was lost in details. Probably I can fine-tune the interpolation somehow, but the printed results - especially the "BullsEye" gradients are very beautiful now. Thanks again! Tamas On Thu, 15 Jun 2023 at 08:41, <mar...@li...> wrote: > Hello, > > > > When doing this kind of things, it is important to keep in mind the real > goals of the process because sometimes is very easy to get lost in details. > > > > “Linearization” is a term that I’ve seen used to a multitude of scenarios. > > > > > A valid approach when profiling a printer is to do it on two steps. The > first step would be to bring the particular printer to a generic well-known > state. For example, by using C, M Y and K tone curves, one per output > channel. Then profile this generic printer. The first step is known as > “linearization”. The obvious advantage of this approach is you have not to > reprofile your printer often but just recompute the curves, which is by far > cheaper and faster. > > > > Another situation when the term linearization is used is when you want a > profile to “match” the characteristics of a given metric. Examples of this > are to create an RGB device space that behaves linearly on Luma. Some of > the linearization goal metrics are intuitive, others are not. For example, > when linearizing CMYK, you can use L* on all channels but on Yellow. > Reason is yellow contributes poorly to L*, and is better to use b* in this > case. Other metrics can be optical density or its derivatives. > > > > So, assuming you want a tone curve to make a gray device space to behave > linearly with L*, you could print a scale of 10-20 patches and then measure > it. With the obtained values perform reverse interpolation. For each L* you > will obtain which device gray value to print. With those values build a > tone curve and you got the linearization. As a test, your tone curve should > match the printed values. > > > > When doing multidimensional, things go more complex though. > > > > Hope that helps > > Regards > > > > Marti Maria > > The LittleCMS Project > > https://www.littlecms.com > > > > > > > > > > > > > > *From:* Tamas Littmann <lit...@gm...> > *Sent:* Wednesday, June 14, 2023 1:39 PM > *To:* lcm...@li... > *Subject:* [Lcms-user] Linearization > > > > Hello, > > > > I have used LCMS for image color space transforms for lots of years, but I > am relatively new in creating my own profiles. > > Using C# and .NET, I can do most of the creating process successfully. > > However, it seems that I cannot move on from some of the easiest steps (I > think I understand the process, but the results are not satisfactory). > > > > Here, I try to minimize the problem, and use 1D transforms (linearization > curve) and Grayscale space (only 1 color). > > > > In this case, how can I linearize a black&white grayscale image/printer? > > > > Here is what I tried to do: > > 1. Print an equal step grayscale ramp (in grayscale mode, using 8-bit 0 - > 255 values. E.g: for six steps it's 0/51/102/153/204/255). 52 steps seems > to be a good starting point (steps are 0 - 5 - 10 - 15 - 20 - etc..) > > > > 2. I have an X-Rite i1 / Datacolor Spyder, so I can read the values in LAB > format (saved CGATS files). > > > > 3. White Point LAB L* is usually around 94, black point LAB L* is usually > from 3 - 15, depends the type of media, so i need to slice this range to > equal steps to find the linear values (if i want something else, not like a > linear line, but a special curve, i need to slice this range according to > that curves). > > > > 4. Normalize both LAB L* data arrays to a 0.0 - 100.0 range. > > > > 5. Find the difference between the measured ones and the linear ones. > > > > 6. Used those differences to calculate LAB L* -> Grayscale values. (This > is the point where I think I misunderstand something). Normally I added > these difference values to the original source Gray -> LAB L* values. > > > > I can use the corrected LAB L* values to create normal output profiles, or > can use the Grayscale values to create a simple DeviceLink profile. The > easiest method is to use the cmsBuildTabulatedToneCurve16 with the > resulting values converted to the 0 - 65535 range. (But also got advice to > use an 1D LUT table, but the ToneCurves are needs to be enough) > > > > Everything seems right and works flawlessly, except the results are not > (very) linear and the classic 'bullseye' images are wrong.... > > > > > > From anyone who tried to do similar linearizations in the past or any hint > or help would be very helpful for me. > > > > Many thanks, > > Tamas > > > > > |