hist hacking
This commit is contained in:
parent
7d170f4ab9
commit
63742489e2
@ -1,22 +1,4 @@
|
|||||||
/* @(#) im_histplot: plot a 1xany or anyx1 image file as a max x any or
|
/* draw a histogram
|
||||||
* @(#) any x max graph using these rules:
|
|
||||||
* @(#)
|
|
||||||
* @(#) - unsigned char
|
|
||||||
* @(#) always output 256
|
|
||||||
* @(#) - other unsigned integer types
|
|
||||||
* @(#) output 0 - max
|
|
||||||
* @(#) - signed int types
|
|
||||||
* @(#) min moved to 0, max moved to max + min.
|
|
||||||
* @(#) - float types
|
|
||||||
* @(#) min moved to 0, max moved to any (square output)
|
|
||||||
* @(#)
|
|
||||||
* @(#) usage:
|
|
||||||
* @(#)
|
|
||||||
* @(#) int
|
|
||||||
* @(#) im_histplot( hist, histplot )
|
|
||||||
* @(#) IMAGE *hist, *histplot;
|
|
||||||
* @(#)
|
|
||||||
* @(#) Returns non-zero on error
|
|
||||||
*
|
*
|
||||||
* Copyright: 1990, N. Dessipris.
|
* Copyright: 1990, N. Dessipris.
|
||||||
*
|
*
|
||||||
|
@ -1,22 +1,17 @@
|
|||||||
/* @(#) Creates a lut for transforming imagein (with histin) according to
|
/* match PDFs
|
||||||
* @(#) the pdf of imageref (with histref). The lut should have been set
|
|
||||||
* @(#) by a call to im_setbuf() or im_openout(). histin and histref
|
|
||||||
* @(#) should have been set by a call to im_mmapin() or they are buffer images
|
|
||||||
* @(#)
|
|
||||||
* @(#) Usage: int im_histspec(in, ref, out)
|
|
||||||
* @(#) IMAGE *histin, *histref, *out;
|
|
||||||
* @(#)
|
|
||||||
* @(#) Returns 0 on success and -1 on error
|
|
||||||
* @(#)
|
|
||||||
*
|
*
|
||||||
* Copyright: 1991, N. Dessipris.
|
* Copyright: 1991, N. Dessipris.
|
||||||
*
|
*
|
||||||
* Author: Nicos Dessipris
|
* Author: Nicos Dessipris
|
||||||
* Written on: 19/07/1990
|
* Written on: 19/07/1990
|
||||||
* Modified on: 26/03/1991
|
* Modified on: 26/03/1991
|
||||||
|
*
|
||||||
* 1/3/01 JC
|
* 1/3/01 JC
|
||||||
* - bleurg! rewritten, now does 16 bits as well, bugs removed, faster,
|
* - bleurg! rewritten, now does 16 bits as well, bugs removed, faster,
|
||||||
* smaller
|
* smaller
|
||||||
|
* 24/3/10
|
||||||
|
* - gtkdoc
|
||||||
|
* - small cleanups
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -86,22 +81,16 @@ match( IMAGE *in, IMAGE *ref, IMAGE *out )
|
|||||||
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
if( im_iocheck( in, out ) || im_iocheck( ref, out ) )
|
if( im_iocheck( in, out ) ||
|
||||||
return( -1 );
|
im_iocheck( ref, out ) ||
|
||||||
if( in->Coding != IM_CODING_NONE || ref->Coding != IM_CODING_NONE ) {
|
im_check_uncoded( "im_histspec", in ) ||
|
||||||
im_error( "im_histspec", "%s", _( "not uncoded" ) );
|
im_check_format( "im_histspec", in, IM_BANDFMT_UINT ) ||
|
||||||
|
im_check_coding_same( "im_histspec", in, ref ) ||
|
||||||
|
im_check_format_same( "im_histspec", in, ref ) ||
|
||||||
|
im_check_bands_same( "im_histspec", in, ref ) ||
|
||||||
|
im_check_hist( "im_histspec", in ) ||
|
||||||
|
im_check_hist( "im_histspec", ref ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
|
||||||
if( in->BandFmt != IM_BANDFMT_UINT ||
|
|
||||||
ref->BandFmt != IM_BANDFMT_UINT ) {
|
|
||||||
im_error( "im_histspec", "%s", _( "bad band format" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
if( in->Bands != ref->Bands ) {
|
|
||||||
im_error( "im_histspec", "%s",
|
|
||||||
_( "input histograms differ in number of bands" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* How big?
|
/* How big?
|
||||||
*/
|
*/
|
||||||
@ -109,13 +98,9 @@ match( IMAGE *in, IMAGE *ref, IMAGE *out )
|
|||||||
px = 256;
|
px = 256;
|
||||||
else if( inpx <= 65536 && refpx <= 65536 )
|
else if( inpx <= 65536 && refpx <= 65536 )
|
||||||
px = 65536;
|
px = 65536;
|
||||||
else {
|
|
||||||
im_error( "im_histspec", "%s", _( "luts too large" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
max = px * bands;
|
max = px * bands;
|
||||||
|
|
||||||
/* Unpack to equal sized buffers.
|
/* Unpack to equal-sized buffers.
|
||||||
*/
|
*/
|
||||||
inbuf = IM_ARRAY( out, max, unsigned int );
|
inbuf = IM_ARRAY( out, max, unsigned int );
|
||||||
refbuf = IM_ARRAY( out, max, unsigned int );
|
refbuf = IM_ARRAY( out, max, unsigned int );
|
||||||
@ -165,13 +150,29 @@ match( IMAGE *in, IMAGE *ref, IMAGE *out )
|
|||||||
out->Xsize = px;
|
out->Xsize = px;
|
||||||
out->Ysize = 1;
|
out->Ysize = 1;
|
||||||
out->Type = IM_TYPE_HISTOGRAM;
|
out->Type = IM_TYPE_HISTOGRAM;
|
||||||
|
if( im_setupout( out ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
if( im_setupout( out ) || im_writeline( 0, out, (PEL *) outbuf ) )
|
if( im_writeline( 0, out, (PEL *) outbuf ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* im_histspec:
|
||||||
|
* @in: input image
|
||||||
|
* @ref: reference histogram
|
||||||
|
* @out: output image
|
||||||
|
*
|
||||||
|
* Creates a lut which, when applied to the image from which histogram @in was
|
||||||
|
* formed, will produce an image whose PDF matches that of the image from
|
||||||
|
* which @ref was formed.
|
||||||
|
*
|
||||||
|
* See also: im_histgr(), im_maplut().
|
||||||
|
*
|
||||||
|
* Returns: 0 on success, -1 on error
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
im_histspec( IMAGE *in, IMAGE *ref, IMAGE *out )
|
im_histspec( IMAGE *in, IMAGE *ref, IMAGE *out )
|
||||||
{
|
{
|
||||||
@ -179,18 +180,14 @@ im_histspec( IMAGE *in, IMAGE *ref, IMAGE *out )
|
|||||||
int px;
|
int px;
|
||||||
int fmt;
|
int fmt;
|
||||||
|
|
||||||
if( im_open_local_array( out, t, 5, "im_histspec", "p" ) )
|
if( im_check_uint( "im_histspec", in ) ||
|
||||||
|
im_check_uint( "im_histspec", ref ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
if( !vips_bandfmt_isuint( in->BandFmt ) ||
|
|
||||||
!vips_bandfmt_isuint( ref->BandFmt ) ) {
|
|
||||||
im_error( "im_histspec", "%s",
|
|
||||||
_( "input luts are not some unsigned integer type" ) );
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Match hists.
|
/* Match hists.
|
||||||
*/
|
*/
|
||||||
if( im_histeq( in, t[0] ) ||
|
if( im_open_local_array( out, t, 5, "im_histspec", "p" ) ||
|
||||||
|
im_histeq( in, t[0] ) ||
|
||||||
im_clip2fmt( t[0], t[1], IM_BANDFMT_UINT ) ||
|
im_clip2fmt( t[0], t[1], IM_BANDFMT_UINT ) ||
|
||||||
im_histeq( ref, t[2] ) ||
|
im_histeq( ref, t[2] ) ||
|
||||||
im_clip2fmt( t[2], t[3], IM_BANDFMT_UINT ) ||
|
im_clip2fmt( t[2], t[3], IM_BANDFMT_UINT ) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user