# reportfmt

title: All Tickets
cols:
  #ffffff Key:
  #f2dcdc Active
  #e8e8e8 Review
  #cfe8bd Fixed
  #bde5d6 Tested
  #cacae5 Deferred
  #c8c8c8 Closed

sqlcode:
  SELECT
    CASE WHEN status IN ('Open','Verified') THEN '#f2dcdc'
         WHEN status='Review' THEN '#e8e8e8'
         WHEN status='Fixed' THEN '#cfe8bd'
         WHEN status='Tested' THEN '#bde5d6'
         WHEN status='Deferred' THEN '#cacae5'
         ELSE '#c8c8c8' END AS 'bgcolor',
    substr(tkt_uuid,1,10) AS '#',
    datetime(tkt_mtime) AS 'mtime',
    type,
    status,
    subsystem,
    title
  FROM ticket


# event

type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Separate demo from package. Using 8.5+img::png for the PNG handling. A local critcl v2 is used. Crash in <crimp matrix>.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  <verbatim>
  Added critcl code to enable debugging.

  Stacktrace for crash is

  #0  0x008fb8ac in memcpy () from /lib/libc.so.6
  #1  0x001dd959 in Tcl_SetByteArrayObj () from /home/andreask/Abuild/lib/libtcl8.5.so
  #2  0x001dd8b1 in Tcl_NewByteArrayObj () from /home/andreask/Abuild/lib/libtcl8.5.so
  #3  0x001dd8e4 in Tcl_DbNewByteArrayObj () from /home/andreask/Abuild/lib/libtcl8.5.so
  #4  0x007ed427 in c__crimp_matrix (interp=0x856e790, imageObj=0x88f9330, matrixObj=0x88d2e18) at matrix.crimp:59
  #5  0x007ed8b6 in tcl__crimp_matrix (cd=0x0, ip=0x856e790, oc=3, ov=0x8732648) at matrix.crimp:112

  Relevant code is:
  Tcl_Obj *dataObj = Tcl_NewByteArrayObj(NULL, 4 * w * h);
  in matrix.crimp.

  This doesn't work with Tcl 8.5.7.
  Has this changed in 8.6 ?
  </verbatim>

comment:
  Added critcl code to enable debugging.

  Stacktrace for crash is

  #0  0x008fb8ac in memcpy () from /lib/libc.so.6
  #1  0x001dd959 in Tcl_SetByteArrayObj () from /home/andreask/Abuild/lib/libtcl8.5.so
  #2  0x001dd8b1 in Tcl_NewByteArrayObj () from /home/andreask/Abuild/lib/libtcl8.5.so
  #3  0x001dd8e4 in Tcl_DbNewByteArrayObj () from /home/andreask/Abuild/lib/libtcl8.5.so
  #4  0x007ed427 in c__crimp_matrix (interp=0x856e790, imageObj=0x88f9330, matrixObj=0x88d2e18) at matrix.crimp:59
  #5  0x007ed8b6 in tcl__crimp_matrix (cd=0x0, ip=0x856e790, oc=3, ov=0x8732648) at matrix.crimp:112

  Relevant code is:
  Tcl_Obj *dataObj = Tcl_NewByteArrayObj(NULL, 4 * w * h);
  in matrix.crimp.

  This doesn't work with Tcl 8.5.7.
  Has this changed in 8.6 ?


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Started on my framework. Bottom: image types, and Tcl_ObjType for them (type tag strings at Tcl level)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added protections against multiple inclusion, and constified the use of image type structures to better match image_type.h APIs


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Implemented the string rep for crimp_images, with borrowing from tclBinary (UpdateStringOfByteArray)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Bugfixes in the ObjTypes. StringOfImage completeley redone, was missing list-quoting of the bytearray


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Extended the groups of write and invert commands. Added first conversions. Added notes on design, and overview of commands considered and done. Brought naming of file for the split command into line with the others


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added convenience macros for creation of images of specific types, and updated the .crimps where sensible


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Another macro of convience, to declare input images, and their types. Updated the .crimp files where possible. Further made the code of commands more similar by using a consistent name for single-image results.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Moved the image type initialization out of find into an exported
  function, and changed the critcl setup to call it at the proper place
  in the package initialization sequence.

  Extended the image type structure with information about the number of
  'color' channels in an image of that type, and the names of these
  channels. Added accessor returning the names of the channels in an
  image as a list, and implicitly their number as well, in the length of
  said list.

  Renamed type field in image structure and updated all users. Had some
  weird clash in gdb, preventing the latter from working with the field.

  Removed some older macros from the main .tcl, they are in util.h
  already.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Dropped the old flip and mirror methods, and added full set of
  mirroring along the axes and diagonals. Extended the demo to show them
  off.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Moved the Tcl layer into a separate file (crimp_tcl.tcl). Reworked the
  main file to source this file, immediately, and declared for when
  building a -pkg.

  Reworked the Tcl layer itself, provide aggregate functions with
  automatic selection of the proper C level primitive command, based on
  image type, where possible (inver_* ==> invert).

  Where decisions on type are not automatic the primitive is made a sub
  method of a higher method (read_tk => read 2tk, etc.)

  Combinations of this are possible as well, i.e. partially sub-methods,
  partially automatic (convert, write).

  Updated the akdemo to use the new Tcl layer, this simplifies quite a
  bit as the typeof checking is now hidden in the new commands.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Extended the set of operators with a general per-pixel re-map.  This
  operation takes an arbitrary map from pixel values to pixel values,
  subsuming inversion, threshold based changes (for example partial
  inversion (solarization)), histogram equalization, and many more.

  Extended demo to show use for partial inversion on threshold
  (solarization), with user selectable threshold via scale widget.

comment:
  Extended the set of operators with a general per-pixel re-map.  This
  operation takes an aribtrary map from pixel values to pixel values,
  subsuming inversion, threshold based changes (for example partial
  inversion (solarization)), histogram equalization, and many more.

  Extended demo to show use fror partial inversion on threshold
  (solarization), with user selectable threshold via scale widget.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Rewrote the image pipelines in akdemo as nested commands, now that the
  type checks are hidden. Also made the command names more readable,
  going from prefix 's' to 'show_'.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added functions to compare image dimensions, and extended the join
  operators to check that the input images are equal in all their
  dimensions.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed solarize demo (boundary conditions).

  Gave up on the Tcl layer reorg for the moment. Neither of the two
  alternatives in the leaves [a20a604b8e] and [5b8699e126] feel properly
  baked yet. Easier to keep the current hack and go forward with more
  functionality I can later use to drive generalizations. Part of the
  problem seems to be the implicit wish to auto-generate the higher API
  from the low-level primitives.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Renamed 'map' API to 'remap' (The names of the underlying primitives
  were not changed).

  Added code generating various types of tables (identity, invers,
  solarization, (de)gamma), and maps from them. The latter now takes the
  name 'map'. The table creation commands are organized under the 'crimp
  table' ensemble.

  The 'invert' command is now implemented on top of 'remap' using the
  'invers' table and map. The primitives for that can be removed in the
  future.

  Extended the demo to show gamma manipulation.

  The demo is becoming crowded, GUI and code wise. The various demos
  should be moved into separate files, each having their own gui (if
  needed), and hooks for and into the main demo. Another GUI issue
  coming up, we should have a widget able to show a map/table in
  graphical form (plotchart ?). First users would be solarization and
  (de)gamma demos, and also HSV-based operations.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Added table and map for linear gain/bias functions.

  Extended demo to control the saturation of the shown image,
  i.e. convert to HSV colorspace, remap the saturation via global
  gain/bias controlled by the scale, then convert the result back to RGB
  and display.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Converted merge over to my framework, with changes. No demo for it either, needs additional images, or operators as support


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>

  Created a new demo application which is properly modular.

  I.e. this application pulls in the demo definitions from a directory,
  automatically extending the GUI (toolbar), and also allowing each demo
  to extend the GUI in a limited way.

  Started to port the demos in akdemo over to this system.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Changed the naming schemes of join, convert, write commands. The input-image type-dependent part goes last


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  New operators:
  * blend (2 images per user chosen alpha value)
  * over (blend two images per the alpha of the foreground)
  * setalpha (replace/add alpha channel in image from 2nd image)
  * blank (generate image of uniform color/grey level)

  Additional demos for these ops.
  Additional images for use by the demos.

  The blend demo currently does a single image against uniform
  black. Blending two independent natural images has psychedelic
  results, doesn't look good. This in RGB space. Needs more thought.
  Should maybe convert both to HSV and result back ?


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Doh. When implementing the blending for HSV to understand the weird
  colors generated by the RGB I noticed the reason why. I am a person of
  no brain at all. Forgot to initialize the 'ralpha' value, i.e. instead
  of mixing alpha versus 1-alpha it was alpha versus some random value.

  This is now fixed.

  All blenders have now also been converted to the MIX macro and ralpha.
  Two demos now, RGB and HSV blending. Both work and look ok. They are
  different however in the path they take through the color space while
  interpolating, with HSV looking a bit more unnatural.

  Added a second over demo as well, reversing the roles of fore- and
  background images.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Fixed another doh, this time in the (de)gamma tables.

  I failed to scale the pixel values into the range where gamma
  operates, i.e. [0..1] before doing the (de)gamma. Now that I do this,
  and scale back after the application the operation behaves as expected
  and proper.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed bucket access in histogram operator, and extended to grey16. 64K possible values still allow allocation of full counter array


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Added plot widget to display the various 256x256 functions we have.
  This is still a bit buggy.
  When a change is made the old series is still shown in the display.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>

  Changed demos GUI to use grid over pack, and changed the API to the
  GUI extensibility.

  Updated all demos to the new extensibility API. Changed several demos
  to use plot widgets to show the curves they are using.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Reworked the plot widget.

  Added the ability to have a free-wheeling y-axis, i.e. auto-adapting
  to the contents of the shown series.

  Trouble with reconfiguring the axis after the creation of the plot
  made me change things, i.e. now the plot is completely recreated on
  every change of the series. This also fixes the problems I had with
  keeping old data in the display.

  Last change, the update of the display after changes is now properly
  defered until the GUI is idle.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Fixed missing intialization of the pixel counters in the histogram C code.
  Added histogram command to the API.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Added a demo for the histograms.

  It shows the RGB, HSV, and luma histograms for the selected image.

  They contain a hack (setting to 0) for the pure black/white values as
  these seem to be the most usual outliers, compressing the y-axis to much.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  <verbatim>
  Extended the histogram demo.

  (1) Compute cumulative density functions for RGB, luma, and SV of HSV.
  (2) Show the various CDF in plots.
  (3) Added histogram equalization (stretching) in RGB and HSV spaces (SV actually).
      Playing around shows that it might be sensible to have only S or V
      stretching in HSV.

  The equalization in RGB shows how this naive operation (i.e. the
  separate handling of the color channels) causes shifts in hue.
  Equalization of the V generally makes the picture darker.

  Oh, right, I seem to remember reading that for this stuff we have to
  take out the gamma first, then equalize, and at last put the gamma
  back in. I might try that as another demo.


  Side problems with the plots, talk to Arjen:

  	No control over the size of plotcharts. The histogram demo has
  	so many plots now that the toplevel doesn't fit completely on
  	the screen. Either the plots get smaller, or I (have to) split
  	the demo by color space.

  	After equalization we seem to have lots of zero counts around
  	for intermediate values. The nature of the xyplot (linear
  	lines between values) causes a moire which repeats the main
  	plot at about half height. That looks ugly. Might have to use
  	a different plot type to get rid of this. Barchart should
  	work, except that it fills the area under the curve, which I
  	don't want.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Reorganized the documentation, moved into their own directory, and keeping the derived nroff/html files in the repository as well, beside the master .man file


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Continued work on the documentation. Documented the conversion methods, plus tweaks in the math images.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Continued work on the documentation. Documented the I/O methods. Brought the derived files up-to-date. Documentation for the current state of the package as a whole is done.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Tweaked the demo app to auto-select between pre-compiled and dyn. compiled crimp. Added output showing the choices made in case of trouble


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Fixed the problem with the geometry not updating when changing demos. Reset shown image when changing demos.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Extended framework with API allowing a demo to check its viability. Modified the blending demos to be activate iff two images are selected. Default check is for single images being selected.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Moved execution of demo code into a namespace. Updated demos negatively affected by this back to working order.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos.

  The demos are now handled like they are in a matrix, with the choice
  of images and actions as the two axes.

  Choose an action and it applies to the current image.
  Choose an image and the current action is applied.

  So, choose an image and walk the toolbar to see the various actions.
  Or, choose an action, maybe parameterize it, and then walk the images.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  7 seven new binary operators (max, min, multiply, screen, add, subtract, difference) Added to C level (rgba/rgba only so far), Tcl level, and demos. No documentation yet.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Moved the support code for the binary operators to their own directory.

  Added template code for all the missing directions between rgb, rgba, and grey8.

  Added the missing operator implementations. For the commutative operators we are leaving out half of the missing, and handle them through commutation in the Tcl level.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Factored kernel translation out of the convolve method, added kernel transposition. Updated demo for API change, caching the translated kernel. Added demo, box blur, demonstrating speed advantage for separable kernels.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added a new set of primitives and method. Expand an image, i.e. add a border. This can be done in various ways. Currently implemented are expansion by

  * Adding a constant pixel.
  * Cyclically (toroidal) wrap around the borders.
  * Reflection/mirroring at the borders.

  Not yet done are:

  * Replication of the border pixels.
  * Subtract reflection from the border pixel.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Border expansion. Added

  * Replication of the border pixels.

  Not yet done are:

  * Subtract reflection from the border pixel.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Reworked demo gui, list of demos is now shown in a listbox. The toolbar became too wide with the increasing number of demos. It shows only the active demos, per the selected images.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Renamed the border handling to 'expand'. Reworked the higher-level
  implementation to make the border type a sub-method instead of an
  option.

  Reworked the handling of border-type specific arguments for const:
  auto-extend missing data per number of color channels in the image),
  ignore superfluous values.

  Renamed 'extend' to 'replicate', so that we can use 'extend' for the
  last border type to be implemented.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Completed the 'expand' implementation by adding the border type
  'extend', where the edge pixels are subtracted from the mirrored
  pixels to get the pixels in the border.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Completed the documentation for border types.

  Added keywords to the documentation of various methods.

  Moved the figures into their directory, and the math figures again in
  a subdirectory of that.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Convolution.

  Simplified the primitive, ripped out the special case code handling of
  image borders. This means that to avoid accessing pixels outside of
  the input image we scan only the inner pixels of the input, and
  consequently get a result shrunken by the kernel dimensions minus one.

  To compensate for that we use the expand primitives implemented in the
  last revisions to make the input appropriately larger before applying
  the convolution.

  The convolve method now accepts an option -border enabling the caller
  to specify what type of border to use, with the default zero const
  border. This shares the border type processing with 'expand',
  therefore the code for that was moved into its own internal helper
  command.

  The method was further extended to accept more than one kernel, and
  apply them in sequence.

  The methods to make and transpose kernels have been reorganized into
  an ensemble.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Added resampling primitives.  Up- and downsampling, interpolation and
  decimation.  The latter two are done at the Tcl level for the moment.
  That is inefficient and future work should replace them with C level
  primitives which integrate the up/down sampling with the proper
  filtering. Added associated demos.

comment:
  Added resampling primitives.  Up- and downsampling, interpolation and
  decimation.  The latter two are down at Tcl level for the moment.
  That is inefficient and future work should replace them with C level
  primitives which integrate the up/down sampling with the proper
  filtering. Added associated demos.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added map tables for thesholding and (sampled) gaussian.
  Thresholding also got convenience commands for direct access.
  Added appropriate demos.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed bugs in the pyramid code and demos. Two additional demos which
  scale pyramid results back to original size for better comparison.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed the issue with the median filter. The initialization step I was
  incorrect. Put the whole column into the column histograms, not just
  the first 2*radius_1 rows. At that point SHIFT_DOWN was essentially a
  null-op, returning the same value for all rows, giving rise to the
  vertical stripes I saw.

  Added the RGB and HSV variants.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. For the demos cycling through images, moved a lot of image-independent code out of the per-image setup into the proper section for global setup.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Extended the framework with the ability to show slide
  shows. Enough of the newer demos rolled their own code to make this
  worthwhile. Extended beyond the original code to allow changes of
  speed, pause/continue, forward/backward, and single stepping.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Updates the demos performing their slideshows to use the new
  support in the framework instead. This simplified them substantially.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  API reorganization. Bundled all methods related to manipulating the
  alpha of an image, i.e. blend, over, and setalpha under the new 'crimp
  alpha' namespace and ensemble. 'setalpha' further renamed to 'alpha
  set'. Added a convenience method 'alpha opaque' using 'alpha set'.

  Updated demos and documentation.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  API reorganization. Bundled all methods related to filtering,
  i.e. 'convolve' and 'rankfilter' under the new 'crimp filter'
  namespace and ensemble. 'rankfilter' further renamed to 'filter
  rank'.

  Updated demos and documentation. Plus more demos for rank filtering
  (min, and max).


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Documentation. Helper script added to generate the images and embedded docs. The helper requires mimetex, ImageMagick's convert, and tklib's dia application with attendant packages, especially img::png and its dependencies


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Documentation.
  Added notes on solarization == sabattier effect.
  thresholding (as is) == binarization.
  Tweaked the math formulas for the thresholding.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New functionality: Image statistics.
  They are done per channel.
  Added draft demo, and documentation.

  Pulled the helper code for cumulation and scaling from the equalization demos.
  Found and fixed a bug in the cumulation.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Equalization. Modified to use the package internal helper commands instead of having their own separate copies of CUMULATE and FIT.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Functionality. Reworked setup of read/write ensembles to encapsulate variables better, using lambdas. Further extended to allow read/write commands written in Tcl.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added PPM format specification, image reader, sample image, and demo. Incomplete, a primitive for makingi mages from rgb tuples is not yet done (an rgb analogue of "read tcl", or extension of same command)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Completed the ppm reader without extending the C level, i.e. 'read tcl'. Fixed bad image name in the ppm reader demo.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Reorganized the high-level API to the write primitives to support
  writing to strings, channels, and files with common code. Further
  reorganized the PPM and PGM support to provide primitives as expected
  by the new highlevel API. Updated demos. Documentation written.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added read support for Richard Suchenwirth's strimj'es.
  See http://wiki.tcl.tk/_/search?S=strimj
  Plus demo (image) and docs.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed bug left behind by [a526962f88]. Updated the decimation and
  interpolation commands to invoke the convolution step by the new name
  of the command.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added documentation for the binary operators (add, subtract, difference, multiply, screen, min, max), and regenerated the embedded docs


type: t
user: andreask
brief: Ticket [7dea5be1bf]: 3 changes
comment:
  Ticket [7dea5be1bf] <i>Extend table method with general sub-method taking a function</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [a52909fa0c]: 2 changes
comment:
  Ticket [a52909fa0c] <i>Expand image value with a slot for meta-data</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [d50ca57334]: 3 changes
comment:
  Ticket [d50ca57334] <i>IO. Add support for reading/writing PNG (Portable Network Graphics)</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [ad1d29a400]: 3 changes
comment:
  Ticket [ad1d29a400] <i>IO. Add support for reading/writing XBM (X Bitmap)</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [d5e196a8e2]: 3 changes
comment:
  Ticket [d5e196a8e2] <i>IO. Add support for reading/writing XPM (X Pixmap)</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [d50ca57334]: 1 change
comment:
  Ticket [d50ca57334] <i>IO. Add support for reading/writing PNG (Portable Network Graphics)</i> status still Open with 1 other change


type: t
user: andreask
brief: New ticket [e1af7aab2d].
comment:
  New ticket [e1af7aab2d] <i>Geometry. Shift image by x/y-offsets (translation with wrap-around).</i>.


type: t
user: andreask
brief: Ticket [7dea5be1bf]: 1 change
comment:
  Ticket [7dea5be1bf] <i>Extend 'table' creation ensemble with a method taking a command prefix for the function.</i> status still Open with 1 other change


type: t
user: andreask
brief: New ticket [233e0d0b5a].
comment:
  New ticket [233e0d0b5a] <i>Geometry. Implement general deformation through quadrilateral mapping</i>.


type: t
user: andreask
brief: Ticket [a1a501aea0]: 4 changes
comment:
  Ticket [a1a501aea0] <i>Colors: Add quantization through median cut</i> status still Open with 4 other changes


type: t
user: andreask
brief: Ticket [d50ca57334]: 2 changes
comment:
  Ticket [d50ca57334] <i>IO. Add support for reading/writing PNG (Portable Network Graphics)</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [ad1d29a400]: 1 change
comment:
  Ticket [ad1d29a400] <i>IO. Add support for reading/writing XBM (X Bitmap)</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [549b063e5b]: 3 changes
comment:
  Ticket [549b063e5b] <i>Implement the black/white image type (1 bit/pixel).</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [60254f4954]: 3 changes
comment:
  Ticket [60254f4954] <i>Geometry. Implement arbitrary affine transformations.</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [a1a501aea0]: 2 changes
comment:
  Ticket [a1a501aea0] <i>Colors: Add quantization through median cut</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [126d0ace8f]: 4 changes
comment:
  Ticket [126d0ace8f] <i>Implement bilinear/bicubic interpolation</i> status still Open with 4 other changes


type: t
user: andreask
brief: Ticket [f17efe0938]: 2 changes
comment:
  Ticket [f17efe0938] <i>arbitrary projective transformations.</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [d21517816d]: 3 changes
comment:
  Ticket [d21517816d] <i>polar coordinate transform + other cartographic mappings</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [29c692653c]: 2 changes
comment:
  Ticket [29c692653c] <i>Make the Tk dependent parts a separate package</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [40f2bed670]: 3 changes
comment:
  Ticket [40f2bed670] <i>M/C + DCT (Discrete Cosine Transform)</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [723f624229]: 3 changes
comment:
  Ticket [723f624229] <i>M/C + FFT (Fast Fourier Transform)</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [d50ca57334]: 1 change
comment:
  Ticket [d50ca57334] <i>r/w PNG (Portable Network Graphics)</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [a52909fa0c]: 1 change
comment:
  Ticket [a52909fa0c] <i>expand image value with a slot for meta-data</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [839d20d7c3]: 2 changes
comment:
  Ticket [839d20d7c3] <i>Performance through parallelization / threading</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [29c692653c]: 1 change
comment:
  Ticket [29c692653c] <i>make the Tk dependent parts a separate package</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [d50ca57334]: 2 changes
comment:
  Ticket [d50ca57334] <i>+ r/w PNG (Portable Network Graphics)</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [7dea5be1bf]: 2 changes
comment:
  Ticket [7dea5be1bf] <i>(table/map creation ensembles) + method taking a command prefix for the function</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [233e0d0b5a]: 2 changes
comment:
  Ticket [233e0d0b5a] <i>Geometry. Implement general deformation through quadrilateral mapping</i> status still Open with 2 other changes


type: t
user: andreask
brief: New ticket [7c34b19455].
comment:
  New ticket [7c34b19455] <i>Document the commands upsample, interpolation, downsample and decimate</i>.


type: t
user: andreask
brief: Ticket [7dea5be1bf]: 1 change
comment:
  Ticket [7dea5be1bf] <i>S  ('table' creation ensemble) + method taking a command prefix for the function</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [7c34b19455]: 3 changes
comment:
  Ticket [7c34b19455] <i>Document the commands upsample, interpolation, downsample and decimate</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [839d20d7c3]: 1 change
comment:
  Ticket [839d20d7c3] <i>performance through parallelization / threading</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [549b063e5b]: 1 change
comment:
  Ticket [549b063e5b] <i>implement the black/white image type (1 bit/pixel).</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [e1af7aab2d]: 1 change
comment:
  Ticket [e1af7aab2d] <i>shift image by x/y-offsets (translation with wrap-around).</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [bbeae152b2]: 1 change
comment:
  Ticket [bbeae152b2] <i>M/C + grayscale morphology operations.</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [f17efe0938]: 2 changes
comment:
  Ticket [f17efe0938] <i>Geometry. Implement arbitrary projective transformations.</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [9609380b72]: 2 changes
comment:
  Ticket [9609380b72] <i>+ Interactive manipulation of a function in a plotchart</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [549b063e5b]: 1 change
comment:
  Ticket [549b063e5b] <i>Implement the black/white image type (1 bit/pixel).</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [233e0d0b5a]: 1 change
comment:
  Ticket [233e0d0b5a] <i>M/G + general deformation through quadrilateral mapping</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [e1af7aab2d]: 2 changes
comment:
  Ticket [e1af7aab2d] <i>Shift image by x/y-offsets (translation with wrap-around).</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [e1af7aab2d]: 1 change
comment:
  Ticket [e1af7aab2d] <i>M/G + Shift image by x/y-offsets (translation with wrap-around).</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [a1a501aea0]: 1 change
comment:
  Ticket [a1a501aea0] <i>M/C + quantization through median cut</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [7068afa5f5]: 2 changes
comment:
  Ticket [7068afa5f5] <i>Geometry. Implement rotation through arbitrary angles and center.</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [7068afa5f5]: 2 changes
comment:
  Ticket [7068afa5f5] <i>rotation through arbitrary angles and center.</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [60254f4954]: 2 changes
comment:
  Ticket [60254f4954] <i>+ arbitrary affine transformations.</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [e1af7aab2d]: 2 changes
comment:
  Ticket [e1af7aab2d] <i>Geometry. Shift image by x/y-offsets (translation with wrap-around).</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [9609380b72]: 1 change
comment:
  Ticket [9609380b72] <i>S + Interactive manipulation of a function in a plotchart</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [bbeae152b2]: 3 changes
comment:
  Ticket [bbeae152b2] <i>Implement grayscale morphology operations.</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [7dea5be1bf]: 1 change
comment:
  Ticket [7dea5be1bf] <i>(table/map creation) method taking a command prefix for the function</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [7068afa5f5]: 1 change
comment:
  Ticket [7068afa5f5] <i>M/G + rotation through arbitrary angles and center.</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [60254f4954]: 1 change
comment:
  Ticket [60254f4954] <i>M/G + arbitrary affine transformations.</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [a52909fa0c]: 1 change
comment:
  Ticket [a52909fa0c] <i>Expand image value with a slot for meta-data</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [d50ca57334]: 1 change
comment:
  Ticket [d50ca57334] <i>IO + r/w PNG (Portable Network Graphics)</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [bbeae152b2]: 2 changes
comment:
  Ticket [bbeae152b2] <i>+ grayscale morphology operations.</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [9609380b72]: 2 changes
comment:
  Ticket [9609380b72] <i>Support: Interactive manipulation of a function in a plotchart</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [f17efe0938]: 1 change
comment:
  Ticket [f17efe0938] <i>M/G + arbitrary projective transformations.</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [233e0d0b5a]: 2 changes
comment:
  Ticket [233e0d0b5a] <i>general deformation through quadrilateral mapping</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [29c692653c]: 2 changes
comment:
  Ticket [29c692653c] <i>Split the Tk dependent parts into their own package</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [9609380b72]: 1 change
comment:
  Ticket [9609380b72] <i>interactive manipulation of a function in a plotchart</i> status still Open with 1 other change


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Documented decimate, downsample, interpolate, and upsample command.
  Fixed ticket [7c34b19455dffca13c13d674be3223eaa99ce857].


type: t
user: andreask
brief: Fixed ticket [7c34b19455].
comment:
  Fixed ticket [7c34b19455]: <i>Document the commands upsample, interpolation, downsample and decimate</i> plus 2 other changes


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Added 'table eval' method converting a function (command prefix) into
  a table for remapping. Additionally added method to compose tables,
  i.e. compute the result of chaining their application into a single
  table.

  Fixed ticket [7dea5be1bf9f099bfa46614ba5992c51245a8805].

comment:
  Added 'table eval' method converting a function (command prefix) into
  a table for remapping. Additionally added method to compose tables,
  i.e. compute the result of chaining their application into a single
  table.

  Fixed ticket [7dea5be1bf9f099bfa46614ba5992c51245a8805 ].


type: t
user: andreask
brief: Fixed ticket [7dea5be1bf].
comment:
  Fixed ticket [7dea5be1bf]: <i>(table/map creation) method taking a command prefix for the function</i> plus 2 other changes


type: t
user: andreask
brief: Ticket [f17efe0938]: 1 change
comment:
  Ticket [f17efe0938] <i>arbitrary projective transformations.</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [7068afa5f5]: 1 change
comment:
  Ticket [7068afa5f5] <i>rotation through arbitrary angles and center.</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [233e0d0b5a]: 1 change
comment:
  Ticket [233e0d0b5a] <i>general deformation through quadrilateral mapping</i> status still Open with 1 other change


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Changed the convolution primitives to access the kernel pixels as
  signed numbers with proper clamping of results, and modified the
  'kernel make' method to properly convert the input to unsigned two's
  complement for that.

  Extended the demos with laplace operators, embossing, and basic edge
  detectors (simple and sobel).


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  More changes to the convolution.
  Extended the primitives with an 'offset' argument.
  Updated the kernel make method with an optional offset, and an
  auto-offset heuristic which does the right thing for zero-sum kernels
  like the various edge detectors, i.e. +128 for zero-sum, and 0 else.
  Removed the 'o'ffset demos. Added more edge/sobel demos operating in
  greyscale.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed bug introduced with change [f0341e8f0a06d039310d61a3b8c104efea61a222].
  "kernel transpose" had to know about the new offset.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed bug in description of laplace pyramid, gaussian at the end is decimated compared to predecessor


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added the primitives for vertical montage. Now only the high-level image expansion and alignment processing is needed to complete the functionality


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Demo of pyramid blending now working, except that the example images I have currently do not lend themselves to this type blending, they are too disparate. Added cut blending for comparison.

comment:
  Demo of pyramid blending now working, except that the example image currently do not lend themselves to this type blending, they are to disparate. Added cut blending for comparison.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Fix for ticket [bbeae152b2eaf659f13bc927b86182a6cfa3531f]: Basic set of (grayscale) morphology commands for a single structuring element: flat 3x3 brick; plus attendant demos. Note: morph_gradient_grey <==> charcoal effect.

comment:
  New functionality: Basic set of (grayscale) morphology commands for a single structuring element: flat 3x3 brick; plus attendant demos. Note: morph_gradient_grey <==> charcoal effect


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Extend type conversion to accept image of the destination type as input and pass them through unchanged.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New primitives for per-pixel (local) thresholding, using another image
  as the map holding the thresholds.  Reorganized the high-level
  threshold code to be an ensemble, properly separating global from
  local methods.  Updated the existing demos to use the new command
  names, and added two demos to show the local thresholding.  Updated
  the documentation.


type: t
user: andreask
brief: Ticket [c689b9f08f]: 3 changes
comment:
  Ticket [c689b9f08f] <i>Check http://wiki.tcl.tk/24409 for for functionality I do not have ...</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [9375bd8354]: 3 changes
comment:
  Ticket [9375bd8354] <i>Implement de-speckling algorithms.</i> status still Open with 3 other changes


type: t
user: andreask
brief: New ticket [a9b3cb9b74].
comment:
  New ticket [a9b3cb9b74] <i>Explore dynamic code generation for optimized morphology and convolution in spatial domain</i>.


type: t
user: andreask
brief: New ticket [7c635bd7a9].
comment:
  New ticket [7c635bd7a9] <i>Review the API for bad argument ordering preventing use as partial function application</i>.


type: t
user: andreask
brief: New ticket [c689b9f08f].
comment:
  New ticket [c689b9f08f] <i>Check http://wiki.tcl.tk/24409 for for functionality I do not have ...</i>.


type: t
user: andreask
brief: Ticket [7c635bd7a9]: 3 changes
comment:
  Ticket [7c635bd7a9] <i>Review the API for bad argument ordering preventing use as partial function application</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [a9b3cb9b74]: 3 changes
comment:
  Ticket [a9b3cb9b74] <i>Explore dynamic code generation for optimized morphology and convolution in spatial domain</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [c689b9f08f]: 1 change
comment:
  Ticket [c689b9f08f] <i>Check http://wiki.tcl.tk/24409 for for functionality I do not have ...</i> status still Open with 1 other change


type: t
user: andreask
brief: Ticket [14d3092191]: 3 changes
comment:
  Ticket [14d3092191] <i>Extend grayscale morphology to arbitrary structuring elements</i> status still Open with 3 other changes


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Changed psychdelia demo to be active when nothing is selected.

  Fixed problems in demo shutdown exposed by that (writing of demo
  times, and the defered compile+loading of C-level primitives).

  Modified the demo startup to begin with no images selected.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed critcl::tsources not taking glob pattern, and separated the reader/writer files by name to allow use in single directory, as is done when the package is prebuilt


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Revamped the table commands for thresholding (le/ge => above, below,
  plus 2 new inside/outside), and linear ramps. Added tables for log-
  and sqrt-compression. Updated the associated documentation and demos.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Continued work on supporting a floating-point image type.

  (1) Modified the read-tcl primitive to expose the destination type in
      its name.

  (2a) New read-tcl primitive with the new float type as destination
       format.

  (3) Updated the 'read' API initialization to handle the expansion of
      destination types for 'read tcl'.

  (4) Updated all users of 'read tcl' to be 'read tcl grey8', code and
      demos, i.e. properly announce the destination type.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Continued work on supporting a floating-point image type.

  Created the whole suite of flip primitives for it. This implicitly
  provides us with the quarter and half rotations as well.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New work on the spatial convolution primitives and API.

  (1) The primitives now expose the expected image-type of their kernel
      through their name.

  (1a) Updated the 'filter convolve' implementation to select the
       primitive based on kernel type, and throw errors if no primitives are
       available for image and kernel types.

  (2) Extended the existing set of primitives (using a grey8 signed
      kernel) to grey16, grey32, and float image types.

  (3) Created a whole new set of primitives which use kernels specified
      in the new floating-point image-type.

  (4) Extended the kernel ensemble with commands to make FP-kernels.

  (5) New demo, family of gaussian kernels, sampled and discrete.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Extended the image intrep with a Tcl_Obj* slot to pass around.
  Implemented [a52909fa0c88de970ee33795ff07b211d546f35e].

  Still have to go through the primitives and decide how each handles
  this meta data from input to output.

  Still have to implement some nice handling of the data on top of the
  meta primitives (i.e. treat as a dictionary).


type: t
user: andreas_kupries
brief: Ticket [a52909fa0c]: 2 changes
comment:
  Ticket [a52909fa0c] <i>decide the image meta data handling by the primitives, per primitive</i> status still Open with 2 other changes


type: t
user: andreask
brief: Ticket [b402648576]: 3 changes
comment:
  Ticket [b402648576] <i>Create Proper Buildsystem (TEA compatible).</i> status still Open with 3 other changes


type: t
user: andreask
brief: Ticket [c689b9f08f]: 2 changes
comment:
  Ticket [c689b9f08f] <i>Check http://wiki.tcl.tk/24409 for functionality I do not have ...</i> status still Open with 2 other changes


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fix shutdown issue with demos using frame elements. A continuation of [dd85ca0fc4a811f72ad1dfcc013cc0f2d78b1bfc]


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Primitives for blank, crop, downsample, expand, threshold, and upsample extended to handle the image types grey16, grey32, and float


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Extended the reader demos with 8x magnification (pixel replication) to better see the read image contents


# ticket

tkt_uuid: 08531dafd020ad54a802ad669556973e9d3f1b09
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Immediate
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: quantization in general
comment:
  Not median cut, but user specifies number of steps for each axis of the color cube (RGB, or HSV), and system automatically determines good boundaries and mapping functions through the image histograms. The basic stuff for that part is done (see 'table quantize histogram'). What we need now is a sensible API on top.

  Actually ... Median cut might be a way to automatically determine the number of boundaries needed to get the image down to a specific set of colors.


tkt_uuid: 29c692653cbfdb543f48ee56f0304b964dcf2622
type: Feature_Request
status: Open
subsystem: General
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: make the Tk dependent parts a separate package
comment:
  CRIMP is currently tied to Tk, due to the import/export from and to Tk photo images. Like all image processing packages for Tcl. The coupling is loose however, just cutting this part of the IO support and the package is independent.

  To not loose the functionality move it into a separate package. This is more difficult because now we have to give the new package access to the C API of the main CRIMP. Stub tables, export, and import. Which is not really supported by critcl yet. -- side note, I have some Tcl code which is essentially a package'ization of the genStubs code. This needs some cleanup, extension, and then could be used in critcl to auto-generate the C code needed, just from .decls files, on both import and export sides.


tkt_uuid: 40f2bed6708f99755c840235143096f8f4232e80
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: DCT (Discrete Cosine Transform)
comment:
  The Discrete Cosine Transform is an important building block for lossy image compression algorithms,


tkt_uuid: ad1d29a400cb4be2727ff4032d447876de856ec3
type: Feature_Request
status: Open
subsystem: I/O
priority: Medium
severity: Important
resolution: Open
title: r/w XBM (X Bitmap)
comment:
  Add X Bitmap (XBM) as a format which we can import and export images from and to.

  <hr><i>andreask added on 2010-08-20 05:29:27:</i><br>
  This item depends on completion of [549b063e5b], the bw image type.


tkt_uuid: a1a501aea005228e1a056ae81ea8e6609a986d66
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Immediate
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: quantization through median cut
comment:
  <hr><i>andreask added on 2010-08-19 17:46:24:</i><br>
  This likely requires a color histogram, i.e. not separate histograms per color channel, but a single histogram over the color triples.

  It might also be a frontend to a basic quantization method which is told into how many pieces to slice the color cube for each axis.


tkt_uuid: d50ca57334afa183a455ce6232c4614c5711e492
type: Feature_Request
status: Open
subsystem: I/O
priority: High
severity: Important
resolution: Open
title: r/w PNG (Portable Network Graphics)
comment:
  Add PNG (portable network graphics) as a format which we can import and export images from and to.

  <hr><i>andreask added on 2010-08-19 17:09:34:</i><br>
  This is also difficult, because it goes into the realm of interfacing an external library. See tkImg for an implementation.

  It is a bit better with the generalized loading of libraries by the tcl core (TclLoadFile -- TIP 357 -- http://tip.tcl.tk/357.html). This however is Tcl 8.6+. So far CRIMP is 8.5+.


tkt_uuid: d33e3ed3f441701fbad39a6939cce32d62ccaefa
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: matrix transform of colors
comment:
  Implement pixelwise color transformation, where are all color channels (RGB, or HSV) are put into a vector and converted by multiplying that vector with a 3x3 matrix.

  This is how may color-space transformations are done, like into and out of CIE XYZ, etc. It is also a prequisite for doing things like whitepoint correction, color balancing, etc.


tkt_uuid: 126d0ace8fbf8f7fb8f2ebc10c74d05aadbaeede
type: Feature_Request
status: Open
subsystem: General
priority: Medium
severity: Important
resolution: Open
title: bilinear/bicubic interpolation
comment:
  A number of places (like arbitrary rescaling) have different interpolation methods, two of which are bilinear and bicubic interpolation.

  Implement them.


tkt_uuid: 549b063e5bd59e981d4a88f2a7e7579274bcaab2
type: Feature_Request
status: Open
subsystem: General
priority: Medium
severity: Severe
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: implement the black/white image type (1 bit/pixel).
comment:
  Having this type is a prequisite for binary morphology operations.
  Note that just having the type is not enough, it also needs a basic set of supporting operators (conversion, io, ...) to be semi-useful.

  <hr><i>andreask added on 2010-08-20 06:20:34:</i><br>
  Dependent tickets
    *  [a5b6545e8a] - binary morphology
    *  [ad1d29a400] - X Bitmap I/O


tkt_uuid: 9609380b72de8277a8770cba5d4796f70b7026d7
type: Feature_Request
status: Open
subsystem: Support
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: interactive manipulation of a function in a plotchart
comment:
  Background: For the 'map2' primitives I need a way to specify a 2d function. This can be reduced to 1d where we use a function in one parameter and then edit a function of the parameter over a domain.

  For this we need a plotchart derivative where it is possible to edit the shown function/series graphically.

  I have a vague notion of using splines. The big problem is that I have no real idea how capture this in the interactive behavior of the editor (i.e. which buttons/keys to use, the exact actions).

  I saw recently a video where a spline grid was edited and it looked very easy and natural with points getting dragged and added. The problem, nothing in the video showed how it was done to be this easy looking.

  Side note: Thinking that a separate general spline editor would be best, which can be attached to a canvas. And overlaid on a specific region, like a plotchart.


tkt_uuid: 7c34b19455dffca13c13d674be3223eaa99ce857
type: Documentation
status: Fixed
subsystem: Manipulate geometry
priority: Immediate
severity: Critical
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
title: Document the commands upsample, interpolation, downsample and decimate
comment:
  <hr><i>andreask added on 2010-08-24 18:53:58:</i><br>
  Fixed with commit [03c737922c2c182207865d1ca0fa305739eda7e8].


tkt_uuid: 7dea5be1bf9f099bfa46614ba5992c51245a8805
type: Feature_Request
status: Fixed
subsystem: Support
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
title: (table/map creation) method taking a command prefix for the function
comment:
  Currently all table methods create specific function tables, with hardwired formulas. Create a sub-method which takes a user-specified command prefix to build the table.

  <hr><i>andreask added on 2010-08-26 20:08:55:</i><br>
  Fixed with commit [882ebaeb7adaa79d5eddc6de2853685b7ddcd902].

  Additionally added method to compose tables, i.e. compute the result of chaining their application into a single table.


tkt_uuid: f17efe0938e5db08047fc84eb3983b946c8df36b
type: Feature_Request
status: Open
subsystem: Manipulate geometry
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: arbitrary projective transformations.
comment:
  While we have this already, through the 'matrix' method the name doesn't feel right yet, and the matrix code could be nicer, refactored too.

  <hr><i>andreask added on 2010-08-26 20:14:29:</i><br>
  We have this through the 'matrix' method, however there are a few things off with it.

  First, it is not clear how the pixel interpolation is done. It looks to be a gauss weighted thing (area map ?). We might wish to have bilinear and bicubic as well, for when accuracy can be traded against speed.

  Secondly, pixels are constrained to the image area, anything which is moved outside of that rectangle is gone in the result. Here we might wish to expand the result image to contain all of the input, regardless of how it was transformed and warped.

  <hr><i>andreask added on 2010-08-26 20:22:23:</i><br>
  Related tickets
    *  [60254f4954b306cc9c99cafbbf17fb9db4df2c56].
    *  [7068afa5f5275ae7daa82c2593a4a20a68a0f292].
    *  [233e0d0b5a40ba4f4be350722e5e9bd38d32963b].


tkt_uuid: 60254f4954b306cc9c99cafbbf17fb9db4df2c56
type: Feature_Request
status: Open
subsystem: Manipulate geometry
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: arbitrary affine transformations.
comment:
  <hr><i>andreask added on 2010-08-26 20:22:34:</i><br>
  Related tickets
    *  [7068afa5f5275ae7daa82c2593a4a20a68a0f292].
    *  [233e0d0b5a40ba4f4be350722e5e9bd38d32963b].
    *  [f17efe0938e5db08047fc84eb3983b946c8df36b].


tkt_uuid: 7068afa5f5275ae7daa82c2593a4a20a68a0f292
type: Feature_Request
status: Open
subsystem: Manipulate geometry
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: rotation through arbitrary angles and center.
comment:
  <hr><i>andreask added on 2010-08-26 20:22:42:</i><br>
  Related tickets
    *  [60254f4954b306cc9c99cafbbf17fb9db4df2c56].
    *  [233e0d0b5a40ba4f4be350722e5e9bd38d32963b].
    *  [f17efe0938e5db08047fc84eb3983b946c8df36b].


tkt_uuid: 233e0d0b5a40ba4f4be350722e5e9bd38d32963b
type: Feature_Request
status: Open
subsystem: Manipulate geometry
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: general deformation through quadrilateral mapping
comment:
  <hr><i>andreask added on 2010-08-26 20:22:51:</i><br>
  Related tickets
    *  [60254f4954b306cc9c99cafbbf17fb9db4df2c56].
    *  [7068afa5f5275ae7daa82c2593a4a20a68a0f292].
    *  [f17efe0938e5db08047fc84eb3983b946c8df36b].


tkt_uuid: bbeae152b2eaf659f13bc927b86182a6cfa3531f
type: Feature_Request
status: Closed
subsystem: Manipulate color/intensity
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
title: grayscale morphology operations.
comment:
  <hr><i>andreask added on 2010-09-08 22:29:30:</i><br>
  Fixed by [fd288503732e466f926f607ac652b94afa22b571].
  Restriction: flat 3x3 brick is the only structuring element used.


tkt_uuid: 81ec9cc4c0df7b513675d0b91c8213979267ee95
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Medium
severity: Minor
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: tcl.gd-like drawing commands
comment:
  I.e. add command which add lines, circles, boxes, text, etc. to an image. This would allow crimp to become a backend for canvas or other canvas-like packages. Example would be the tklib diagram package, vector drawing to canvas, which could go into a tk-independent raster image instead via a facade to translate. Similarly, plotchart.

  Note: Drawing text is likely the biggest hassle, because it will require font handling, and that again ties us to X11.

  <hr><i>andreask added on 2010-09-10 22:26:34:</i><br>
  Reference (Circle) = [http://www.cs.unc.edu/~mcmillan/comp136/Lecture7/circle.html]


tkt_uuid: a9b3cb9b748e1cb88565cdbbd6e1b26e354e0f60
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Low
severity: Minor
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Explore dynamic code generation for optimized morphology and convolution in spatial domain
comment:
  Currently we have generic convolution primitives which accept any kernel.
  Explore the performance implications of generating C code specialized for specific kernels. A base step would be generation of primitives for specific kernels at compile time. A future step would be the generation and compilation at runtime, with caching of results.


tkt_uuid: 7c635bd7a96f79a9a85439018035b087a6a756e0
type: Code_Defect
status: Open
subsystem: General
priority: Immediate
severity: Severe
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Review the API for bad argument ordering preventing use as partial function application
comment:
  A number of methods with multiple arguments use the image as first argument, with additional operation parameters following. That makes the use as partial functions (method + some or all parameters, PFA) impossible. This is bad, as PFA is useful technique to create 'pre-configured' functions which need only an image to be processed. This should be enabled.

     *  Review the methods to determine which have this type of bad signature.
     *  Review if/how the affected methods can be rewritten to allow the definition of partial functions.


tkt_uuid: 14d30921910d78c1e1fb7223f231318953eb8201
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Extend grayscale morphology to arbitrary structuring elements
comment:
  An extension of [bbeae152b2eaf659f13bc927b86182a6cfa3531f].
  The main issue with this is that with arbitrary SE's implementation as rank-order filter goes out of the window. New primitives will be needed. This is also one of the places where dynamic code generation has benefits, partial evaluation, specialized on the SE, for common SE's.


tkt_uuid: 839d20d7c3c080f1d36aa558b873e5f7acccbfe1
type: Feature_Request
status: Open
subsystem: General
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: performance through parallelization / threading
comment:
  Look into working up a C-level thread pool support and then using this to parallelize the various image operations by tiling or striping them and then each parcel handled by a separate thread.

  This likely requires us to refactor the operators into the core function and API, so that we can slide the thread management between them.

  Question: What C level API does Tcl (and Thread package) provide here which would be useful ?

  Note that this assumes that the threads are at the C-level, and invisible to the user. Not image processing by moving them to a wholly separate thread to keep them out of the GUIs way. That is a separate thing CRIMP doesn't have to think about. Except maybe in providing ways of transfering images between Tcl threads without having to convert them between representations, using lots of memory.

  <hr><i>andreask added on 2010-09-13 18:48:10:</i><br>
  Note [http://wiki.tcl.tk/25977].
  One concern: Is there a portable way to determine the number of CPUs on a system ?
  Because this seems to me to be the most suitable size for the threadpool used by the crimp internals.


  <hr><i>andreask added on 2010-09-13 18:58:29:</i><br>
  Google: sysconf, _SC_NPROCESSORS_{CONF,ONLN}

  <hr><i>andreask added on 2010-09-13 19:10:18:</i><br>
  http://www.listware.net/201003/gtk-devel-list/42075-gthread-how-many-cores-do-i-have.html

  Snarfing relevant parts of the discussion ...

  ... SYSTEM-INFO.dwNumberOfProcessors on Windows.

  ... http://git.gnome.org/browse/gimp/tree/app/base/base-utils.c#n54

  ... See also:
    http://qt.gitorious.org/qt/qt/blobs/4.7/src/corelib/thread/qthread-unix.cpp
    http://qt.gitorious.org/qt/qt/blobs/4.7/src/corelib/thread/qthread-win.cpp
  the QThread::idealThreadCount() function.

  On Windows, that's:
    SYSTEM-INFO sysinfo;
    GetSystemInfo(&sysinfo);
    return sysinfo.dwNumberOfProcessors;

  MacOS X:
    MPProcessorsScheduled();

  HPUX:
    struct pst-dynamic psd;
    if (pstat-getdynamic(&psd, sizeof(psd), 1, 0) == -1) {
      perror("pstat-getdynamic");
      cores = -1;
    } else {
      cores = (int)psd.psd-proc-cnt;
    }

  {Free,Net,Open}BSD:
    size-t len = sizeof(cores);
    int mib[2];
    mib[0] = CTL-HW;
    mib[1] = HW-NCPU;
    if (sysctl(mib, 2, &cores, &len, NULL, 0) != 0) {
      perror("sysctl");
      cores = -1;
    }

  "integrity" OS, symbian: hard-coded to one core.

  VXWorks: a loop to check if CPU #n exists until it fails (see link)

  IRIX:
    cores = (int)sysconf(_SC_NPROC_ONLN);

  all other Unix (including Linux):
    cores = (int)sysconf(_SC_NPROCESSORS_ONLN);

  Cheers

  <hr><i>andreask added on 2010-09-13 19:12:03:</i><br>
  And
  http://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine


  <hr><i>andreask added on 2010-09-20 17:55:49:</i><br>
  Thanks to Joe English for the link to the portable 'hardware locality' project.

  [http://www.open-mpi.org/projects/hwloc/]

  BSD licensed!
  This looks to be all I want and much more.


tkt_uuid: a52909fa0c88de970ee33795ff07b211d546f35e
type: Feature_Request
status: Open
subsystem: General
priority: Immediate
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: decide the image meta data handling by the primitives, per primitive
comment:
  Current CRIMP image values are (string representation) a Tcl list holding type name, dimensions, and the raw pixel information (bytearray).

  This request asks for the list to be extended with an additional element which will pass through most operations without change, to hold meta data, be it general, or format specific. Newly-made accessor commands would treat this element as a dictionary.

  <hr><i>andreas_kupries added on 2010-09-25 04:37:58:</i><br>
  Implemented the basics in [48ba89921501c634b6b14155379cb5b958c2eb3e].

  To decide: MD handling by each primitive.

  To design/write: Good script level API to the data.


tkt_uuid: b4026485769330b02305dd179ef7daf1b24e139d
type: Build_Problem
status: Open
subsystem: General
priority: High
severity: Severe
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Create Proper Buildsystem (TEA compatible).
comment:
  Create a buildsystem which is near-TEA. (Calling on critcl, proper platform flags, especially universality on OS X).


tkt_uuid: c689b9f08f5ef6ba13e0bebd31d88db3ce7915de
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Low
severity: Minor
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Check http://wiki.tcl.tk/24409 for functionality I do not have ...
comment:
  ... From a quick look most of the functionality is in crimp already, albeit under different names, or can be constructed from the primitives and basics present.

  <hr><i>andreask added on 2010-09-09 18:03:39:</i><br>
  See also the newer code and tarball in the half-bakery,
  [http://wiki.tcl.tk/_repo/iprocess/]


