libvips/TODO
2013-09-24 11:38:17 +01:00

371 lines
8.5 KiB
Plaintext

- finish hist_ismonotonic()
needs im_conv()
- try:
$ vips extract_band 50310.svs x.tif[pyramid,tile,compression=jpeg,tile-width=256,tile-height=256] 0 --n 3
** VIPS:ERROR:buffer.c:216:vips_buffer_undone: assertion failed: (cache->thread == g_thread_self())
Aborted (core dumped)
not showing in 7.34, perhaps because asserts are off?
- with VIPS_ARRAY() etc., we could note the mem use on the object we alloc
local to, might make for interesting stats
does vips_malloc() used the tracked mem system?
- use the webp advanced encoding api to set a write function for webp save to
file
- is vips_hist_local() correct? it seems to leave white dots everywhere
- use g_log() instead of vips_info()
- do we always call copy_fields and demand_hint with ALL input images? what
about the operators in conversion?
could we add something to check that the two calls agree on the image lists?
I think they should
- need a new uncached mode for open via disc
currently we have a huge linecache for "vips copy x.png x.v", in
effect what vips does for open-via-disc, and therefore see >100mb ram
use even in open-via-disc mode
add SEQUENTIAL_UNBUFFERED?
could we spot from the demand style? they do almost the same thing,
though one is static and one dynamic, I guess
- support multiscan jpeg write? see
https://github.com/jcupitt/ruby-vips/issues/41
- could VipsConversion now have an @in member?
we've moved all the no-input ones of to create now, I think
- object construction is threadsafe, but class construction is not
https://github.com/jcupitt/libvips/issues/64
we worked around this by adding vips_class_ping_all() to dsave build, but
this is not a good fix
find out why vips class construct fails, test on seurat, kirk's 24-core
monster
- 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
- quadratic doesn't work for order 3
start to get jaggies on lines --- the 3rd differential isn't being
initialised correctly for the sub-region?
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
- test with interpolators, do we add margins correctly?
- the operation cache needs to detect invalidate
tricky!
perhaps have operations always watching all of their inputs and resignalling
"invalidate" themselves
cache then just needs to watch for "invalidate" on operations it tracks
need to add an "invalidate" signal to operation
- 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?
blocking bugs
=============
- none!
mosaic
======
- balance should use new meta stuff
- histogram balance option?
resample
========
- 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
foreign
=======
- magick2vips should spot ICC profiles and attach them as meta
- interlaced jpg needs massive memory, we should have two jpg read modes, like
png
- add more sequential mode readers
$ grep -l write_line *.c
csv.c
matlab.c
openexr2vips.c
ppm.c
radiance.c
- foreign docs come up as "VipsForeignSave", annoying, why?
- add nifti support
http://niftilib.sourceforge.net/
- support planar tiff
- add matlab write
- 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
- im_csv2vips() could use "-" for filename to mean stdin
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
packaging
=========
- test _O_TEMPORARY thing on Windows
- do we bundle "convert" in the OS X / win32 builds? if we don't we
should
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
arithmetic
==========
- avg/dev etc. should uncode images? eg. labq2lab etc.
how about ifthenelse?
- bandalike: consider RGB + RGBA ... we should bandup by adding a black band
(or white?? unclear)
not clear if this is a good idea ... eg. when we upband a 1 band to a 2
band, should we duplicate the 1 band or add black?
- 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
=======
- we have VipsArrayObject and also vips_object_local_array()
can we make one use the other?
- need vips_image_invalidate_area()
- look at libpeas for plugin support
http://live.gnome.org/Libpeas
- how about
vips max add[babe.jpg,babe2.jpg]
does that make any sense?
vips copy add[babe.jpg,add[babe2.jpg,babe3.jpg]] sum.v
perhaps use curly brackets for code?
vips max add{babe.jpg,babe2.jpg}
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
should boxed get freed in finalise rather than dispose?
vipsobject has few docs atm :(
- vips_object_set_argument_from_string() needs more arg types
must be some way to make this more automatic
- generate the code for vips_add() etc. automatically? it might be
nice to have them all in one place at least
- what does G_UNLIKELY() do? can we use it?
- look into G_GNUC_DEPRECATED for back compat in vips8
- should im_rwcheck() copy to disc?
maybe im_rwcheck_disc() copies to im->filename and maps that
rather awkward to do atm with the way check.c is structured
swig
====
- swig is not wrapping im_project() correctly ... returns an extra VImage via
a param
- 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?
- add __add__ etc overloads
freq_filt
=========
- fft with odd width or height is broken ... DC ends up in the wrong place
libvipsCC
=========
- need new C++ API
- need an im_init_world() for C++ which does cmd-line args too, so C++ progs
can get --vips-progress and stuff automatically
tools
=====
- could spot "copy" and turn on seq mode automatically?
perhaps there should be something on operations to indicate seq-ability
- 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
- rename header, edvips as vipsheader, vipsedit
maybe have back compat links?
new operations
==============
- bilateral filtering, see:
http://en.wikipedia.org/wiki/Bilateral_filter
http://www.shellandslate.com/fastmedian.html
http://people.csail.mit.edu/sparis/bf_course/
also a mail from Martin Breidt has links to several fast free C
implementations
- http://en.wikipedia.org/wiki/Otsu%27s_method
- non-linear sharpen: replace each pixel by the lightest or darkest neighbour
depending on which is closer in value