[magick-users] -level and getting proper values for it

Fred Weinhaus fmw at alink.net
Mon Apr 28 11:24:17 PDT 2008


P.S.

I am not sure you need to do these by channel for min and max as I 
think you get that naturally from the simpler formula,

__________________________________________




Prior to IM 6.3.9:

data=`convert image -verbose info:`
min=`echo "$data" | sed -n '/^.*[Mm]in:.*[(]\([0-9.]*\).*$/{ s//\1/; p; q; }'`
max=`echo "$data" | sed -n '/^.*[Mm]ax:.*[(]\([0-9.]*\).*$/{ s//\1/; p; q; }'`
mean=`echo "$data" | sed -n '/^.*[Mm]ean:.*[(]\([0-9.]*\).*$/{ 
s//\1/; p; q; }'`
std=`echo "$data" | sed -n '/^.*[Ss]tandard.*[(]\([0-9.]*\).*$/{ 
s//\1/; p; q; }'`

reports values in range 0 to 1



String Formats:  Min, Max, Mean, Standard Deviation Introduced in IM 6.3.9-1

convert image -format "%[min]" info:
convert image -format "%[max]" info:
convert image -format "%[mean]" info:
convert image -format "%[standard-deviation]" info:

reports values in range 0 to QuantumRange


Above deprecated (but still supported) in IM 6.4.0-11 but now

convert image -format "%[fx:image.minima]" info:
convert image -format "%[fx:image.maxima]" info:
convert image -format "%[fx:image.mean]" info:
convert image -format "%[fx:standard_deviation]" info:

reports values in range 0 to 1. But you can now do math calculations 
within these.


To get them by channel, you need to do the following:

minred=`convert image -channel Red -separate "%[fx:100*image.minima]" info:`

reports percent values (i.e. 0 to 100)

or

minred=`convert image -channel Red -separate 
"%[fx:QuantumRange*image.minima]" info:`

reports values in range 0 to QuantumRange (8-bit: 0 to 255; 16-bit 0 to 65535)


Then you can substitute the variables into:

min=`convert xc: -format "%[fx:min($minred,$mingreen,$minblue)]" info:`
max=...

Then you can substitute these variables into:

convert image.jpg
   -level $min,$max image2.jpg

Note: if using percent values then you need to add the percent sign %

convert image.jpg
   -level $min%,$max% image2.jpg




>Hello,
>
>For proper color transformation with -level you have to check min,max
>color values for each image separately. Is there a way to do it more or
>less automatically with IM or other cross platform tool (Windows and
>Linux)?
>
>identify -verbose gives histogram values but 1) it takes ages to get
>that info for big files 2) isn't easy to parse.
>
>Correct info for level is something like:
>
>convert image.jpg
>   -level (min(min r, min g, min b)),(max(max r, max g, max b)) image2.jpg
>
>TIA


More information about the Magick-users mailing list