brightness curve

Questions and postings pertaining to the usage of ImageMagick regardless of the interface. This includes the command-line utilities, as well as the C and C++ APIs. Usage questions are like "How do I use ImageMagick to create drop shadows?".
Post Reply
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

brightness curve

Post by cedricb »

Hi,

I'm just wondering how can I apply a brightness curve to an image? ...something like that:

Image

I'm bit lost after this step:

Code: Select all

im_fx_curves -c 0,0 0.125,0.375 0.25,0.625 0.5,0.875 1,1

Regards,
Ced.
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: brightness curve

Post by fmw42 »

If you have the data as x,y points, you can draw a filled curve in an image with -draw such that it is white below and black above. Then average the rows down to one row. That becomes a look up table that can be applied to any image using -clut.

see my tidbits example at: http://www.fmwconcepts.com/imagemagick/ ... raph2image

see my plm script at: http://www.fmwconcepts.com/imagemagick/plm/index.php

see my curves script at: http://www.fmwconcepts.com/imagemagick/curves/index.php

see -clut at http://www.imagemagick.org/script/comma ... s.php#clut and
http://www.imagemagick.org/Usage/color/#clut
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

I'm resurrecting this post... ;-)

I can apply my brightness curve using your "curves" script like this:

Code: Select all

./curves "0,0 12.5,37.5 25,62.5 50,87.5 100,100" image.tiff image_b.tiff
If I want to produce a layer mask for this brightness curve (like in Photoshop). How can I do that?

Then, I'll overlay the mask to the original image to get the final brightened image. I would like to create a mask so I can apply further manipulation (like a gaussian blur) before overlaying to the original image.
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

a bit of brainy illumination...

Code: Select all

composite -compose CopyOpacity \( image.tiff -negate \) image_b.tiff mask.tiff
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

I would like to achieve the same effect than this http://translate.google.com/translate?u ... N&ie=UTF-8; BRIGHTNESS ADJUSTMENT LAYER (4 additional steps)

At the moment I've done step 1... ;-)
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: brightness curve

Post by fmw42 »

I don't follow that all, but this may be of interest in using the same curve for many images. See -hald-clut at
http://www.imagemagick.org/script/comma ... #hald-clut
http://www.imagemagick.org/Usage/color/#hald-clut
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

I don't understand how the hald-cut will perform my different Photoshop like layering masks? ;-)
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: brightness curve

Post by fmw42 »

As far as I know, IM does not have any special types of photoshop-like layers, other than just masking and merging of images. The hald-cut simply allows you to create a special lut that can be used for many images to process them the same way, i.e. with the same curve. But you could in principle also just save the normal lut from the curves and reuse it.
User avatar
anthony
Posts: 8883
Joined: 2004-05-31T19:27:03-07:00
Authentication code: 8675308
Location: Brisbane, Australia

Re: brightness curve

Post by anthony »

cedricb wrote:I'm bit lost after this step:

Code: Select all

im_fx_curves -c 0,0 0.125,0.375 0.25,0.625 0.5,0.875 1,1
This outputs a set of numbers, which are the coefficients of a polynomial equation that was fitted to the control points you specified. The output of the above program was

Code: Select all

  -0.762,3.333,-5.167,3.595,-0.000
Meaning

Code: Select all

    -0.762 * x^4   + 3.333 * x^3   +  -5.167 * x^2  + 3.595 * x  + 0
It is applied to an image using the -function polynomial

Code: Select all

  convert image  -function polynomial '-0.762,3.333,-5.167,3.595,-0.000' result
A very bright image.
IM curves...
http://www.imagemagick.org/Usage/
Polynomial Math Function
http://www.imagemagick.org/Usage/transf ... polynomial



Fred developed his own scripts for handling control-point curve functions. Rather than fitting a polynomial to the control points he uses either linear or cubic interpolation. This can produce a better curve. Also he applys the fitted curve as a Color Lookup Table rather than as a mathematical function.

Basically they are just different method of applying a freeform curve to an image.
Anthony Thyssen -- Webmaster for ImageMagick Example Pages
https://imagemagick.org/Usage/
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

Thanks for the details, I'm fine with the maths. I was wondering how can I re-produce the different layering masks from that tone mapping tutorial.
I'm not looking to add different layers to an image like Photoshop. I just want to reproduce the same final effect by producing masks which I can overlay to the original image.
User avatar
anthony
Posts: 8883
Joined: 2004-05-31T19:27:03-07:00
Authentication code: 8675308
Location: Brisbane, Australia

Re: brightness curve

Post by anthony »

You generate the different layers and then use -composite (for two images) or -flatten (for multiple images. Of course the -compose setting is important to set how the images should be combined.

Composiion Methods
http://www.imagemagick.org/Usage/compose/

Layering
http://www.imagemagick.org/Usage/layers/#flatten
Anthony Thyssen -- Webmaster for ImageMagick Example Pages
https://imagemagick.org/Usage/
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

I'm fine to perform a mask, the only thing I have is the difficulty to replicate the actual mask from this tutorial... :?

I think I've been able to replicate step 1 and step 2.

Code: Select all

./curves "0,0 12.5,37.5 25,62.5 50,87.5 100,100" img_orig.tiff img_bright.tiff
composite -compose CopyOpacity img_bright.tiff img_orig.tiff mask.tiff
To resolve step 3/4, I'm just wondering if I can do the following:
1 - convert the mask.tiff to HSL and extract the luminance channel (I'm fine with this)
2 - apply a threshold value to the luminance image, so for example I'll keep the 20% of the most illuminated pixels and make the rest transparent
3 - replace the pixels from the mask to the transparent pixels from the luminance image (which I've applied the threshold ratio)
4 - apply a Gaussian-blur to that mask (I'm fine with this I think)
5 - merge the mask with img_bright.tiff (I'm fine with this)

So how I do number 2 and 3 with IM ?
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: brightness curve

Post by fmw42 »

1 - convert the mask.tiff to HSL and extract the luminance channel (I'm fine with this)
2 - apply a threshold value to the luminance image, so for example I'll keep the 20% of the most illuminated pixels and make the rest transparent
3 - replace the pixels from the mask to the transparent pixels from the luminance image (which I've applied the threshold ratio)
1) you can get the luminance directly (note the L in HSL in lightness and not luminance)

convert image -colorspace Rec601Luma result

(or Rec709Luma)

see http://www.imagemagick.org/script/comma ... colorspace

2) you can threshold the image (luminance) using -threshold. If you want the brightest 20% white and the rest black

convert image -threshold 80% result

see http://www.imagemagick.org/script/comma ... #threshold
see also -black-threshold and -white-threshold


3) Not sure what you want here. If you want to put the thresholded luminance into the alpha channel of the image

convert image luminanceimage -alpha off -compose copy_opacity -composite result

see http://www.imagemagick.org/Usage/compose/#copyopacity


General reading:

http://www.imagemagick.org/script/comma ... ptions.php
http://www.imagemagick.org/Usage/
cedricb
Posts: 28
Joined: 2008-06-06T01:33:22-07:00

Re: brightness curve

Post by cedricb »

the colorspace Rec601Luma and the threshold value produce the correct black and white mask... ;-)

I'm getting the correct result with the Copy Opacity operator, but ultimately I would like to replace the transparent pixel to opaque white? ...how can I do that after the last convert?
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: brightness curve

Post by fmw42 »

add

-fill white -opaque none

or

-background white -flatten
Post Reply