some tinkering

still not very quick
This commit is contained in:
John Cupitt 2016-01-28 09:33:32 +00:00
parent 4b2349323c
commit 3bb24f2567
5 changed files with 58 additions and 11 deletions

27
TODO
View File

@ -1,5 +1,3 @@
- look for FCLIP / FABS use ... VIPS_ABS() on float type
- write a shrinker that does two 1D shrinks, vertical and horizontal, with
bicubic interpolation
@ -7,6 +5,31 @@
vips_resize() can use this, for the default path at least
try with affine vs. reduce in vips_resize ... on the laptop we see
affine
$ time vipsthumbnail wtc.tif -o x.tif -s 7000
real 0m2.325s
user 0m8.316s
sys 0m0.256s
reduce
$ time vipsthumbnail wtc.tif -o x.tif -s 7000
real 0m2.388s
user 0m8.544s
sys 0m0.244s
argh
reducev could be faster with the interpolator inlined ... we could pick a
set of masks and just run them along a set of input lines to make an output
line
reduceh ... not so clear, need to pick new masks every output pixel, might
not make much difference
- get some brightly coloured spots with nohalo / vsqbs on wobble.ws ... very
odd, the interpolation shouldn't change between bands

View File

@ -75,6 +75,32 @@ vips_reduce_build( VipsObject *object )
if( VIPS_OBJECT_CLASS( vips_reduce_parent_class )->build( object ) )
return( -1 );
/*
if( vips_reduceh( resample->in, &t[0], reduce->xshrink,
"interpolate", reduce->interpolateh, NULL ) ||
vips_linecache( t[0], &t[1],
"tile_height", 4,
NULL ) ||
vips_reducev( t[1], &t[2], reduce->yshrink,
"interpolate", reduce->interpolatev, NULL ) ||
vips_image_write( t[2], resample->out ) )
return( -1 );
*/
/*
if( vips_reducev( resample->in, &t[0], reduce->yshrink,
"interpolate", reduce->interpolatev,
NULL ) ||
vips_linecache( t[0], &t[1],
"tile_height", 4,
NULL ) ||
vips_reduceh( t[1], &t[2], reduce->xshrink,
"interpolate", reduce->interpolateh,
NULL ) ||
vips_image_write( t[2], resample->out ) )
return( -1 );
*/
if( vips_reducev( resample->in, &t[0], reduce->yshrink,
"interpolate", reduce->interpolatev, NULL ) ||
vips_reduceh( t[0], &t[1], reduce->xshrink,

View File

@ -184,10 +184,6 @@ vips_reduceh_build( VipsObject *object )
return( -1 );
in = t[1];
/* THINSTRIP will work, anything else will break seq mode. If you
* combine reduce with conv you'll need to use a line cache to maintain
* sequentiality.
*/
if( vips_image_pipelinev( resample->out,
VIPS_DEMAND_STYLE_THINSTRIP, in, NULL ) )
return( -1 );

View File

@ -184,12 +184,8 @@ vips_reducev_build( VipsObject *object )
return( -1 );
in = t[1];
/* THINSTRIP will work, anything else will break seq mode. If you
* combine reduce with conv you'll need to use a line cache to maintain
* sequentiality.
*/
if( vips_image_pipelinev( resample->out,
VIPS_DEMAND_STYLE_THINSTRIP, in, NULL ) )
VIPS_DEMAND_STYLE_SMALLTILE, in, NULL ) )
return( -1 );
/* Size output. Note: we round the output width down!

View File

@ -230,12 +230,18 @@ vips_resize_build( VipsObject *object )
vips_info( class->nickname, "%s interpolation", nickname );
}
/*
if( vips_affine( in, &t[3], hresidual, 0, 0, vresidual,
"interpolate", resize->interpolate,
"idx", resize->idx,
"idy", resize->idy,
NULL ) )
return( -1 );
*/
if( vips_reduce( in, &t[3], 1.0 / hresidual, 1.0 / vresidual, NULL ) )
return( -1 );
in = t[3];
/* If we are upsampling, don't sharpen. Also don't sharpen if we