libvips/TODO

494 lines
11 KiB
Plaintext
Raw Normal View History

2015-11-20 15:45:51 +01:00
- we need to be able to run .polar() on xyz images ... argh
- could special-case vips_complex() to work for multi-band int images as
well as complex
would need to output as multi-band float
what about other cases though? cast real to complex?
- could add new ops for polar/rect of real images with two bands
- could add a thing to Vips.py to do this
- could add full support for complex arithmetic ... linear would need an
extra arg for complex constants
- could abandon complex images and just use 2*bands instead, have complex
as a flag you set? or just rely on FOURIER
2015-11-19 10:55:03 +01:00
- easy to get a segv with Nicolas's interpolators, argh
2015-11-19 14:25:52 +01:00
just with float images?
try to_polar, set LBB, zoom in and scroll around a bit
2015-11-12 10:15:31 +01:00
- still not happy about float->int mask conversion in im_vips2mask.c
2015-11-11 16:00:15 +01:00
2015-11-05 13:40:03 +01:00
- looks like we have a race in tiled threadcache? see
https://github.com/jcupitt/libvips/issues/347
oh argh out of order reads ... but why would they add a few black tiles?
2015-11-11 09:33:41 +01:00
trying new shrinker
2015-07-25 05:52:26 +02:00
also try resize change
- colour needs to split _build() into preprocess / process / postprocess
phases
in icc_import, for example, we want to check that the supplied profile is
compatible with the input image as it will be when unpacked and ready for
process_line
2015-06-22 07:52:02 +02:00
2015-07-21 17:06:18 +02:00
see vips_image_expected_bands() in icc_transform.c for the current hacky
solution
- does ruby need to unpack RefString as well? what about C++?
2015-03-02 09:57:02 +01:00
- are the mosaic functions calling vips_fastcor()? it must be very slow
add vips_fastcor_direct()
2015-03-02 12:30:29 +01:00
nope .. it's im_chkpair.c:im_correl()
im_extract_area(main)
im_extract_area(sub)
im_extract_band(main)
im_extract_band(sub)
im_spcor(sub)
im_maxpos(sub)
then im__chkpair() runs that 20 times, then loops ... oh dear
2015-03-02 09:57:02 +01:00
- perhaps im_maxpos_subpel() / im_minpos_subpel() should be undeprecated,
useful with vips_fastcor()
2015-02-24 15:04:04 +01:00
- support orientation tag in tiff images
see
http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html
seems to be the same values used for exif
jpg uses "exif-ifd0-Orientation", see conversion/autorot.c
instead, standardize on "orientation" and give it an int value
jpg load and save need to use this in preference to the exif value
tiff load and save need to set and recover this value
tiff load needs an autorot flag
don't touch parse_header()
on header-only read, just swap width/height and delete the tag
on full image read, use read_jpeg_rotate(), broken out into a separate
func
see https://github.com/jcupitt/libvips/issues/243
- why can't we do
2015-02-10 11:17:01 +01:00
im = Vips.Image.new_from_file(sys.argv[1], access = "sequential")
2015-02-10 11:17:01 +01:00
ValueError: invalid literal for int() with base 10: 'sequential'
2015-02-10 11:17:01 +01:00
2015-02-10 15:44:35 +01:00
no idea ... this works fine:
im.embed(10, 10, 100, 100, extend = "copy")
2015-02-11 18:01:02 +01:00
what about
2015-02-10 15:44:35 +01:00
2015-02-11 18:01:02 +01:00
im = Vips.Image.jpegload(sys.argv[1], access = "sequential")
2015-02-10 11:17:01 +01:00
nope, fails too ... mysterious!
- test other cpp arg types
2014-10-27 19:17:49 +01:00
input int works
input double
input enum works
input image works
input doublevec
input imagevec
input blob
2014-10-27 19:17:49 +01:00
output int
output double works
output enum
output image works
output doublevec
output imagevec
output blob
2014-10-27 19:17:49 +01:00
2014-10-16 20:16:45 +02:00
- fix up aconv
2014-10-13 15:21:05 +02:00
2014-10-16 12:22:03 +02:00
- rewrite im_conv() etc. as vips_conv(), also the mosaicing functions
2014-07-04 15:46:28 +02:00
2014-10-16 12:22:03 +02:00
finally finish --disable-deprecated option
2014-08-12 14:45:03 +02:00
2014-06-16 15:28:00 +02:00
- can we use postbuild elsewhere? look at use of "preclose" / "written", etc.
- test draw_mask on labq images
we probably need to unpack the ink back to double before blending
2014-02-22 17:08:46 +01:00
- ink to vec etc must have a way to give a complex constant
2014-02-11 14:28:13 +01:00
2014-02-22 17:08:46 +01:00
eg. drawink needs a --ink_imag option with the imaginary components of the
ink
2014-02-11 14:28:13 +01:00
2014-02-22 17:08:46 +01:00
look for uses of vips__vector_to_ink() and add extra params to other places
too, eg. vips_embed(), vips_insert() etc.
2014-02-20 15:31:23 +01:00
- vips__ink_to_vector() needs an optional imag return
- vips_getpoint() needs an optional imag return
- add porter-duff compositing, see
2014-02-11 14:28:13 +01:00
https://github.com/jcupitt/ruby-vips/issues/28
2014-02-11 15:55:31 +01:00
2014-01-14 20:31:19 +01:00
- now vips_linear() has uchar output, can we do something with orc?
2014-01-04 14:00:43 +01:00
- do restrict on some more packages, we've just done arithmetic so far
2013-12-03 15:25:22 +01:00
also resample, colour, some of conversion, create,
2013-12-03 15:25:22 +01:00
- maybe avg?
2013-12-03 15:25:22 +01:00
but avg doesn't subclass arithmetic, so we can't
- for interpolate, we'd need to be able to unroll the vector, so the
interpolator would need to be built for the bands / stride / type of the
image
2014-02-03 12:26:15 +01:00
need new API For this since interpolators currently work for any image
2013-11-15 13:42:44 +01:00
- vips_gaussblur() should switch to float prec if given a float image?
same for vips_conv()?
maybe precision is a dumb thing
- support --strip for other writers
- vipsthumbnail could shrink-on-load openslide and pyr tiff as well?
2013-11-11 12:32:47 +01:00
2014-01-21 20:34:40 +01:00
we have "shrink" for jpegload, move this into the base loader
support it for tiff and openslide as well
use it from nip2 for zooming? only if the partial flag is set though, we
don't want to use it on jpg files
2013-08-06 22:59:35 +02:00
- use the webp advanced encoding api to set a write function for webp save to
file
2014-01-17 19:17:25 +01:00
- use g_log() instead of vips_info()?
2013-07-31 23:00:36 +02:00
2013-06-16 13:26:27 +02:00
2014-06-12 15:35:38 +02:00
- quadratic doesn't work for order 3
2012-11-08 14:34:37 +01:00
start to get jaggies on lines --- the 3rd differential isn't being
initialised correctly for the sub-region?
2012-11-08 14:34:37 +01:00
2012-11-09 15:53:32 +01:00
seems fine vertically, only get errors on horizontal tile boundaries
because we step across tiles left to right: y doesn't change, only x does
2012-11-08 14:34:37 +01:00
2015-10-08 18:40:37 +02:00
not sure it works for order 2 either, we are seeing interpolation errors
on image edges
2012-12-03 15:53:10 +01:00
mosaic
======
2012-01-16 15:54:29 +01:00
- balance should use new meta stuff
2012-01-16 15:54:29 +01:00
- histogram balance option?
2011-08-15 19:27:43 +02:00
resample
========
2012-01-02 12:06:04 +01:00
- check mosaic1, global_balance, similarity etc. use of im__affine
how can we move them to im_affinei ?
- perspective transform with a matrix ... base it on the Lenz transformer, but
partial
2011-12-31 19:22:42 +01:00
foreign
=======
2011-12-31 19:22:42 +01:00
2012-03-13 15:22:13 +01:00
- magick2vips should spot ICC profiles and attach them as meta
- interlaced jpg needs massive memory, we should have two jpg read modes, like
png
2011-12-31 19:22:42 +01:00
- add more sequential mode readers
2011-06-20 19:00:01 +02:00
$ grep -l write_line *.c
csv.c
matlab.c
openexr2vips.c
ppm.c
radiance.c
2011-12-23 16:20:54 +01:00
- foreign docs come up as "VipsForeignSave", annoying, why?
2011-12-22 18:48:50 +01:00
- add nifti support
2011-12-21 13:08:29 +01:00
http://niftilib.sourceforge.net/
2011-12-12 12:58:36 +01:00
- add matlab write
2011-12-12 12:58:36 +01:00
- im_exr2vips can now use c++ api
see TODO notes in openexr read (though they all need more openexr C API)
consider openexr write
- magick should set some header field for n_frames and frame_height? see also
analyze
2011-12-12 12:58:36 +01:00
- im_csv2vips() could use "-" for filename to mean stdin
2011-12-12 12:58:36 +01:00
but then we'd have to read to a malloced buffer of some sort rather than an
image, since we might need to grow it during the read, since we couldn't
then seek
2012-01-13 14:15:56 +01:00
2011-12-12 12:58:36 +01:00
packaging
=========
- test _O_TEMPORARY thing on Windows
convolution
===========
- revisit orc conv
use an 8.8 accumulator ... build the scale into the 8.8 coeffs ... no div at
the end, just a shift
need 8 x 8.8 -> 8.8 for each coeff though
- im_conv()/im_morph() could have more than 10 programs? try 20 and see if we
still have a speedup
make a base class for vector area operations with a matrix with three vfuncs
for init / generate code for one element / end and a gslist of programs, use
that as the base for morph and conv
wait for vipsobject for this
2013-10-28 16:59:25 +01:00
- we have aconv and aconvsep
test timing, make sure it;s worth having a separate aconvsep version
if it is, make im_aconvsep an optimisation: call im_aconvsep_raw() from
vips_conv() if mask width or height == 1 and prec == APPROX
now we can get rid of im_aconvsep() since it's just vips_convsep() with prec
set to approx
aconv needs some more work, get it going at least with gaussian
arithmetic
==========
- HAVE_HYPOT could define a hypot() macro?
- fix a better NaN policy
should we not generate images containing NaN (eg. divide tries to avoid /0),
or should vips_max() etc. try to avoid NaN in images (eg. vips_max() takes a
lot a care to skip NaN, though vips_stats() does not)?
iofuncs
=======
2011-10-25 16:44:54 +02:00
- need vips_image_invalidate_area()
- look at libpeas for plugin support
2011-09-20 15:52:02 +02:00
http://live.gnome.org/Libpeas
- how about
2011-10-11 15:30:44 +02:00
vips max add[babe.jpg,babe2.jpg]
2011-10-11 15:30:44 +02:00
does that make any sense?
2011-10-11 15:30:44 +02:00
vips copy add[babe.jpg,add[babe2.jpg,babe3.jpg]] sum.v
2011-10-11 15:30:44 +02:00
perhaps use curly brackets for code?
2011-10-11 15:30:44 +02:00
vips max add{babe.jpg,babe2.jpg}
2011-10-11 15:30:44 +02:00
no brackets or square brackets for options
- transform_g_string_array_image() can't handle quoted strings, so filenames
with spaces will break
is there an easy fix? can we reuse code from the csv parser?
the csv parser just parses FILE* streams, we'd need to break it out
- note member free stuff in vipsobject docs
2011-11-06 12:54:52 +01:00
should boxed get freed in finalise rather than dispose?
2011-11-06 12:54:52 +01:00
vipsobject has few docs atm :(
- vips_object_set_argument_from_string() needs more arg types
must be some way to make this more automatic
2011-08-26 11:15:39 +02:00
- generate the code for vips_add() etc. automatically? it might be
nice to have them all in one place at least
2011-08-26 11:15:39 +02:00
- what does G_UNLIKELY() do? can we use it?
2011-08-26 11:15:39 +02:00
- look into G_GNUC_DEPRECATED for back compat in vips8
2011-08-26 11:15:39 +02:00
- should im_rwcheck() copy to disc?
2011-08-26 11:15:39 +02:00
maybe im_rwcheck_disc() copies to im->filename and maps that
2011-05-25 09:51:19 +02:00
rather awkward to do atm with the way check.c is structured
2011-05-25 09:51:19 +02:00
2011-05-16 18:34:00 +02:00
swig
====
2011-05-16 18:34:00 +02:00
- swig is not wrapping im_project() correctly ... returns an extra VImage via
a param
2011-05-23 22:27:33 +02:00
- doc strings would be nice, read the SWIG notes on this
new bindings
============
- new binding is still missing constants
how do boxed types work? confusing
we need to be able to make a VipsArrayDouble
- Vips.Image has members like chain, __subclasshook__ etc etc, are we
really subclassing it correctly?
2011-05-09 19:28:21 +02:00
- add __add__ etc overloads
2011-05-09 19:28:21 +02:00
freq_filt
=========
2011-05-09 19:28:21 +02:00
- fft with odd width or height is broken ... DC ends up in the wrong place
2011-05-09 19:28:21 +02:00
libvipsCC
=========
2011-05-09 19:28:21 +02:00
- need new C++ API
2011-05-09 19:28:21 +02:00
- need an im_init_world() for C++ which does cmd-line args too, so C++ progs
can get --vips-progress and stuff automatically
2011-05-09 19:28:21 +02:00
tools
=====
2011-02-03 13:52:14 +01:00
- need a way to make the vips.1 etc. man pages
gtk has things like docs/reference/gtk/gtk-update-icon-cache.xml and man
pages are made from that with xslt
- get rid of a lot of the command-line programs, who wants to write a man page
for batch_image_convert etc yuk
- can we make man pages for the API as well? probably not from googling a bit
2011-02-03 13:52:14 +01:00
2010-01-25 15:23:30 +01:00
- rename header, edvips as vipsheader, vipsedit
maybe have back compat links?
2008-12-19 13:32:46 +01:00
new operations
==============
2009-01-05 17:45:39 +01:00
- bilateral filtering, see:
http://en.wikipedia.org/wiki/Bilateral_filter
http://www.shellandslate.com/fastmedian.html
2010-09-28 18:20:24 +02:00
http://people.csail.mit.edu/sparis/bf_course/
2009-03-20 00:43:52 +01:00
also a mail from Martin Breidt has links to several fast free C
implementations
- http://en.wikipedia.org/wiki/Otsu%27s_method
2007-08-29 18:23:50 +02:00
- non-linear sharpen: replace each pixel by the lightest or darkest neighbour
depending on which is closer in value
2013-10-03 09:59:46 +02:00
- look at
There is an order 1 algorithm for doing medians over boxes (truly O(1)
per pixel: I checked it carefully; it's like doing means over boxes in
order 1 per pixel) in OpenCV since February 2012 I think, due to
Perreault (and Hebert).
It appears to be well respected, at least for 8-bit medians. Very
memory intensive. Simple and elegant. No clue if it fits VIPS well
(probably not?).
Article: nomis80.org/ctmf.pdf
- check CMC equations against web
http://en.wikipedia.org/wiki/Color_difference#CMC_l:c_.281984.29
- see
http://www.dentistry.bham.ac.uk/landinig/software/cdeconv/cdeconv.html
sounds useful for BM?