# config

name: ticket-common
value:
  set type_choices {
     Code_Defect
     Build_Problem
     Documentation
     Feature_Request
     Incident
     Note
  }
  set priority_choices {
    Immediate
    High
    Medium
    Low
    Zero
  }
  set severity_choices {
    Critical
    Severe
    Important
    Minor
    Cosmetic
  }
  set resolution_choices {
    Open
    Fixed
    Rejected
    Workaround
    Unable_To_Reproduce
    Works_As_Designed
    External_Bug
    Not_A_Bug
    Duplicate
    Overcome_By_Events
    Drive_By_Patch
    Misconfiguration
  }
  set status_choices {
    Open
    Verified
    Review
    Deferred
    Fixed
    Tested
    Closed
  }
  set subsystem_choices {
    I/O
    Converter
    {Manipulate geometry}
    {Manipulate color/intensity}
    Accessors
    Support
    General
  }


# 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


title: All Tickets By Priority
cols:
  #ffffff Key:
  #f2dcdc Immediate
  #e8e8e8 High
  #cfe8bd Medium
  #cacae5 Low
  #c8c8c8 Zero

sqlcode:
  SELECT
    CASE priority
         WHEN 'Immediate' THEN '#f2dcdc'
         WHEN 'High'      THEN '#e8e8bd'
         WHEN 'Medium'    THEN '#cfe8bd'
         WHEN 'Low'       THEN '#cacae5'
         ELSE                  '#c8c8c8'
         END as 'bgcolor',
    substr(tkt_uuid,1,10) AS '#',
    datetime(tkt_mtime) AS 'mtime',
    type,
    status,
    subsystem,
    priority, severity,
    title
  FROM ticket
  ORDER BY ( CASE priority
         WHEN 'Immediate' THEN 1
         WHEN 'High'      THEN 2
         WHEN 'Medium'    THEN 3
         WHEN 'Low'       THEN 4
         ELSE                  5
         END ) ASC, ( CASE severity
         WHEN 'Critical'  THEN 1
         WHEN 'Severe'    THEN 2
         WHEN 'Important' THEN 3
         WHEN 'Minor'     THEN 4
         ELSE                  5
         END ) ASC


title: Open Tickets By Priority
cols:
  #ffffff Key:
  #f2dcdc Immediate
  #e8e8e8 High
  #cfe8bd Medium
  #cacae5 Low
  #c8c8c8 Zero

sqlcode:
  SELECT
    CASE priority
         WHEN 'Immediate' THEN '#f2dcdc'
         WHEN 'High'      THEN '#e8e8bd'
         WHEN 'Medium'    THEN '#cfe8bd'
         WHEN 'Low'       THEN '#cacae5'
         ELSE                  '#c8c8c8'
         END as 'bgcolor',
    substr(tkt_uuid,1,10) AS '#',
    datetime(tkt_mtime) AS 'mtime',
    type,
    status,
    subsystem,
    priority, severity,
    title
  FROM ticket
  WHERE status = 'Open'
  ORDER BY ( CASE priority
         WHEN 'Immediate' THEN 1
         WHEN 'High'      THEN 2
         WHEN 'Medium'    THEN 3
         WHEN 'Low'       THEN 4
         ELSE                  5
         END ) ASC, ( CASE severity
         WHEN 'Critical'  THEN 1
         WHEN 'Severe'    THEN 2
         WHEN 'Important' THEN 3
         WHEN 'Minor'     THEN 4
         ELSE                  5
         END ) ASC


title: Ticket Counts By Status
cols:
  #ffffff Key:
  #f2dcdc Active
  #e8e8e8 Review
  #cfe8bd Fixed
  #bde5d6 Tested
  #cacae5 Deferred
  #c8c8c8 Closed

sqlcode:
  SELECT
    status AS 'Status',
    count(*) AS 'Number of Tickets'
  FROM ticket
  GROUP BY 1 ORDER BY 1


# 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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=bc65f83b3e457ef9&n=4 | bc65f83b3e457ef9]: Add propagating bgcolor=#c0f0ff. Add date=2010-06-25 21:52:24.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=bc65f83b3e457ef9&n=4 | bc65f83b3e457ef9]: Add bgcolor=#f0ffc0. Add date=2010-06-25 21:52:24.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=bc65f83b3e457ef9&n=4 | bc65f83b3e457ef9]: Add date=2010-06-25 21:52:24.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=bc65f83b3e457ef9&n=4 | bc65f83b3e457ef9]: Add propagating bgcolor=#fff0c0. Add date=2010-06-25 21:52:24.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=1b0884511e365f6f&n=4 | 1b0884511e365f6f]: Add comment. Add date=2010-06-25 22:47:08.


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 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
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:
  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
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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=d53b05b15c3d36e8&n=4 | d53b05b15c3d36e8]: Add comment. Add date=2010-07-03 20:03:10.


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 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:
  <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:
  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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=5b8699e1263f29bf&n=4 | 5b8699e1263f29bf]: Add closed. Add date=2010-07-05 23:20:59.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=a20a604b8e6340fe&n=4 | a20a604b8e6340fe]: Add closed. Add date=2010-07-05 18:52:32.


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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=97dd176de77ab5d9&n=4 | 97dd176de77ab5d9]: Add comment. Add date=2010-07-27 05:23:24.


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 [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 [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 [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 [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>Support: Interactive manipulation of a function in a plotchart</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: 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 [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 [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 [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]: 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 [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 [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 [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 [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]: 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]: 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 [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 [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 [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 [60254f4954]: 2 changes
comment:
  Ticket [60254f4954] <i>+ arbitrary affine transformations.</i> status still Open with 2 other changes


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 [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 [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 [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 [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]: 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 [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 [f17efe0938]: 2 changes
comment:
  Ticket [f17efe0938] <i>arbitrary projective transformations.</i> status still Open with 2 other changes


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 [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 [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 [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 [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 [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 [9609380b72]: 1 change
comment:
  Ticket [9609380b72] <i>interactive manipulation of a function in a plotchart</i> status still Open with 1 other change


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 [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: New ticket [7c34b19455].
comment:
  New ticket [7c34b19455] <i>Document the commands upsample, interpolation, downsample and decimate</i>.


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: ci
bgcolor: #fff0c0
user: andreask
comment:
  Documented decimate, downsample, interpolate, and upsample command.
  Fixed ticket [7c34b19455dffca13c13d674be3223eaa99ce857].


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 [7c34b19455].
comment:
  Fixed ticket [7c34b19455]: <i>Document the commands upsample, interpolation, downsample and decimate</i> plus 2 other changes


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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=882ebaeb7adaa79d&n=4 | 882ebaeb7adaa79d]: Add comment. Add date=2010-08-26 20:07:21.


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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=0d82b34a5d23a5b3&n=4 | 0d82b34a5d23a5b3]: Add comment. Add date=2010-09-03 22:49:12.


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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=fd288503732e466f&n=4 | fd288503732e466f]: Add comment. Add date=2010-09-08 21:31:11.


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: 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: 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 [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 [14d3092191]: 3 changes
comment:
  Ticket [14d3092191] <i>Extend grayscale morphology to arbitrary structuring elements</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: 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: 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 [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: 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: 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: g
user: andreask
comment:
  Tag changes on [/timeline?dp=fc8a97226111e1d8&n=4 | fc8a97226111e1d8]: Add closed. Add date=2010-09-21 22:45:25.


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:
  Extended the reader demos with 8x magnification (pixel replication) to better see the read image contents


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 montage methods to expand and align images of unequal height/width, with user options to control the process (-align, and -border)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Three effects committed and documented, namely sharpen, emboss and charcoal. Based on convolution and morphology.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Demos. Threshold. Started experimentation on methods for the automatic calculation of a global threshold


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Lots of work in the area of global thresholding, and automatically
  computing the necessary threshold from the image itself in various
  ways.

  <ol>
  <li>
      Reworked the statistics method to be an ensemble. The original
      statistics command now is 'statistics basic'. Extended this
      command to compute the mid-grey (middle) value (1/2(min+max)).
  </li>
  <li>
      Changed the dictionary a bit, use a single 'channel'
      sub-dictionary to hold the per-channel statistics, instead of a
      flat hierarchy, with the hierarchy in long keys. Updated the
      statistics demo to take this into account for printing. Ditto the
      threshold-le demo.
  </li>
  <li>
      Added an otsu subcommand to compute the binarization threshold of
      each channel in a statistics dictionary via
      <a href="http://en.wikipedia.org/wiki/Otsu%27s_method">Otsu's method.</a>
  </li>
  <li>
      Added global thresholding commands which compute the threshold to
      use on their own, in various ways (mean/average, median, middle,
      otsu).
  </li>
  <li>
      Added a separate demo for the global thresholding commands with
      automatic threshold.
  </li>
  <li>
      Updated the documentation for the statistics and global
      thresholding commands.
  </li>
  </ol>


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added border to existing gradient demo. Added second demo showing use in image conversion (grey -> rgb). Extended converter method API to allow additional argument (like a gradient map)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added primitives for conversion from float images to the various grey-ranges. Mapping is identity within the destination range, and saturated to min and max respectively, outside. More complex mappings can come later.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fixed the 2rgb(a) conversion to make the gradient optional, using a std greyscale if not present, and separated its implementation from the other conversions which do not take additional arguments.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New functionality: Fast Fourier Transform. Based on netlib's fftpack (FORTRAN code, converted to C via f2c). Plus demo


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Documented the FFT methods.

  This completes the implementation of ticket
  [723f624229854bf48c120a238ffc23f3cf4f96eb].


type: ci
bgcolor: #fff0c0
user: andreask
ecomment: Extended all the binary operators except for 'screen' to work with float images.
comment:
  crimp_image*     result;
  crimp_image*     imageA;
  crimp_image*     imageB;
  int x, y;

  crimp_input (imageAObj, imageA, float);
  crimp_input (imageBObj, imageB, float);

  if (!crimp_eq_dim (imageA, imageB)) {
      Tcl_SetResult(interp, "image dimensions do not match", TCL_STATIC);
      return TCL_ERROR;
  }

  result = crimp_new_like (imageA);

  for (y = 0; y < result->h; y++) {
      for (x = 0; x < result->w; x++) {

  	FLOATP (result, x, y) = BINOP (FLOATP (imageA, x, y), FLOATP (imageB, x, y));
      }
  }

  Tcl_SetObjResult(interp, crimp_new_image_obj (result));
  return TCL_OK;


  /* vim: set sts=4 sw=4 tw=80 et ft=c: */
  /*
   * Local Variables:
   * mode: c
   * c-basic-offset: 4
   * fill-column: 78
   * End:
   */


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New image format, writing only. Analogous to portable greymaps a portable float map (PFM). The typecodes used are made up, i.e. fake.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New functionality, creation of summed area tables, aka integral images. Input has to be single-channel. Result is always float


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  New functionality, a mean filter. Like a median filter, except each
  pixel is replaced by the mean value of its window.

  The implementation uses summed area tables, i.e. integral images, to
  calculate the sum of pixels in all windows, making it very fast as the
  summation is independent of the filter radius, i.e. window size.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=59fb93c6c744f8e4&n=4 | 59fb93c6c744f8e4]: Add comment. Add date=2010-10-30 19:03:38.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=600e76c39846824a&n=4 | 600e76c39846824a]: Add comment. Add date=2010-10-30 21:54:47.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Added a filter computing the stddev of a pixel, for a square region
  around it. New and extended demos, plus documentation. For the latter
  added notes on the tradeoffs in the mean and stddev filters regarding
  precision and multi-channel images. Created a 'square I' method, for
  convenience, it is a wrapper for 'multiply I I'.

comment:
  Added a filter computing the stddev of a pixel, for a squre region
  around it. New and extended demos, plus documentation. For the latter
  added notes on the tradeoffs in the mean and stddev filters regarding
  precision and multi-channel images. Created a 'square I' method, for
  convenience, it is a wrapper for 'multiply I I'.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Extended the demo for local adaptive thresholding to showcase niblack's and sauvola's methods (based on local mean/stddev, as provided in the recent commits), and just using local 'mean'. Added the global otsu for comparison too.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=1b9fb1d8849345ef&n=4 | 1b9fb1d8849345ef]: Add comment. Add date=2010-10-31 02:21:27.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Modified the threshold primitives for local thresholding to expose the
  type of their maps through their name. Extended the set of primitives
  to allow many more combinations of image- and map-types.  Modifed to
  the threshold::local method to now check the maps for type consistency
  and usability with the image-type.


type: t
user: andreask
brief: New ticket [7caa8aa775].
comment:
  New ticket [7caa8aa775] <i>Idea: Look into C code generation from Tcl as way of templating simple cases.</i>.


type: t
user: andreask
brief: Ticket [7caa8aa775]: 3 changes
comment:
  Ticket [7caa8aa775] <i>Idea: Look into C code generation from Tcl as way of templating simple cases.</i> status still Open with 3 other changes


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Implemented k-means threshold selection in the demos for global threshold, possibly with bad sets for the observations (just unique pixels values, not taking the histogram into account for weighting)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Undoing [0ac4353750], dropping the current 'resize' implementation.

  Even with the gcd to reduce sample factors it is to easy to run into
  large upsampling factors and massive memory consumption by the
  transient intermediate images. Just need new/old width/height which
  are relative prime (gcd == 1).

  We need something which has all the three phases (upsample, convolve,
  downsample) integrated, avoiding intermediate full images.

  Starting to look towards the 'matrix' primitive and command now. More
  general (projective transform), and having the resampling integrated
  into the output loop. It needs some fixing tough, as is it is not
  usable for the intended purpose.

  When that is working however we can make resize and related commands
  simple wrappers around it, for convenience.


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Changed wm -> transform, names of helper commands. Reordered to fix namespace import issue. Extended rotation to allow arbitrary center point.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Tinkered with the gui for demos. Added panedwindows for interactive adjustment of the relative size for image display, log window and the listboxes.


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Factored core matrix code into a plain C module, updated the affected operators. Extended the new C file with functions to transform a vector, and perform setup for warping (result dimensions, and origin placement)


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Finalized the public API to access image meta data.
  Documented this API and updated the derived documentation.
  Added a demo for the basics.


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Fixed name resolution issues in warp and transform commands. Decided on API to the projective warp primitives regarding transform matrices (one only, forward)


type: ci
bgcolor: #bde5d6
user: andreask
ecomment:
  Completed the nearest neighbour primitives (projective warp) with all image types using single bytes in their channel handled by a single primitive. Additional demos, for color, and scaling. Fixed bug in handling of -interpolate option, was a no-op.

comment:
  Completed the nearest neighbour warp primitives with all image types using single bytes in their channel handled by a single primitive. Additional demos, for color, and scaling. Fixed bug in handling of -interpolate option, was a no-op.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=f4c266208fe4a73a&n=4 | f4c266208fe4a73a]: Add comment. Add date=2010-11-13 23:58:54.


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Staring at the code and then instrumenting it and looking at the
  generated log I came to the conclusion that the code for the 'bicubic'
  interpolation is actually the 'bilinear' one. Oops. Renamed and
  updated all comments. Added wikipedia reference link.


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Actually implemented the bicubic interpolation now.  The edge cases,
  i.e. border pixels however do not look very nice yet, but fuzzy. This
  requires a bit more research.


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Tweaked the names for transform inversion and chaining, and extended the latter to take an arbitrary number of transform instead of just two.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Bringing the warp branch back into the main development line.
  With this the following tickets are fixed/implemented:

  <ul>
  <li> [60254f4954] arbitrary affine transformations.
  <li> [7068afa5f5] rotation through arbitrary angles and center.
  <li> [f17efe0938] arbitrary projective transformations.
  <li> [233e0d0b5a] general deformation through quadrilateral mapping.
  <li> [126d0ace8f] bilinear/bicubic interpolation.
  </ul>


type: ci
bgcolor: #bde5d6
user: andreask
comment:
  Default interpolation switched from nearest neighbour to bilinear.

  Re-added a resize method, now based on projective warp.

  Renamed the 'crimp warp warp' to 'crimp warp field', in deference to
  the vector fields providing the sampling coordinates. And yes, it is a
  bit tongue-in-cheek re StarTrek.

  Implemented the primitives for 'warp field'.

  Demo for 'warp field', a blur mode like light scattering through milky
  acryl.

  Documented 'resize, 'warp field' and the 'transform' methods.

  New demos for quadrilateral mapping.


type: t
user: andreas_kupries
brief: Fixed ticket [7068afa5f5].
comment:
  Fixed ticket [7068afa5f5]: <i>rotation through arbitrary angles and center.</i> plus 2 other changes


type: t
user: andreas_kupries
brief: Fixed ticket [233e0d0b5a].
comment:
  Fixed ticket [233e0d0b5a]: <i>general deformation through quadrilateral mapping</i> plus 2 other changes


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Back to the hough transform, this implementation needs the background (non-line) color, to represent empty buckets.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added primitives to compute the basic statistics for the
  single-channel types going beyond a single byte of data for their
  channel, and integrated them into 'crimp statistics basic'.  No
  histogram for these, nor median (which is computed from the
  histogram). Plus demo.

  Added the extended statistics to the hough demo.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Separated the geometry support code into core linear algebra and
  actual geometry functions.  Updated all users.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Added matrix based color transformations (mix, and combine), reusing
  the machinery for linear algebra. See ticket [d33e3ed3f441701fbad39a6939cce32d62ccaefa].

  Applications of these are whitepoint correction, conversion between
  various colorspaces (CIE *, LMS, ...), etc.

  Added convenience commands for various colorspace conversion matrices
  (RGB -> CIE XYZ,
   CIE XYZ -> LMS,
   RGB -> LMS (analogous to previous)).

  Still need the inverse conversions.

  Started on the CIE spaces, this is very incomplete, and the value
  ranges (domains) especially are not known, so the scaling is very
  likely very off.

  Plus demos.

comment:
  Added matrix based color transformations (mix, and combine), reusing
  the machinery for linear algebra.

  Applications of these are whitepoint correction, conversion between
  various colorspaces (CIE *, LMS, ...), etc.

  Added convenience commands for various colorspace conversion matrices
  (RGB -> CIE XYZ,
   CIE XYZ -> LMS,
   RGB -> LMS (analogous to previous)).

  Still need the inverse conversions.

  Started on the CIE spaces, this is very incomplete, and the value
  ranges (domains) especially are not known, so the scaling is very
  likely very off.

  Plus demos.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Added whole slew of methods for manipulation of contrast (global, local histogram equalization, normalization aka stretching). The latter, applied to color images can be considered a very primitive form of changing the color balance.

comment:
  Added matrix based color transformations (mix, and combine), reusing
  the machinery for linear algebra.

  Applications of these are whitepoint correction, conversion between
  various colorspaces (CIE *, LMS, ...), etc.

  Added convenience commands for various colorspace conversion matrices
  (RGB -> CIE XYZ,
   CIE XYZ -> LMS,
   RGB -> LMS (analogous to previous)).

  Still need the inverse conversions.

  Started on the CIE spaces, this is very incomplete, and the value
  ranges (domains) especially are not known, so the scaling is very
  likely very off.

  Plus demos.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Reworked the locally adaptive equalization to also work only the
  value/luma channel of color images.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=315bb6c0e6bb0843&n=4 | 315bb6c0e6bb0843]: Add comment. Add date=2010-11-20 00:49:08.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Replaced the Tcl implementation of the reader for PGM files with C code.

  This was done because usage of the PGM format for the greyscale page
  images in the bookflow project showed that the conversion of the read
  PGM data to a crimp image was a big bottleneck, dominating the time to
  calculate the global brightness of the pages.

  Using one the images as example (IMG_2291.pgm, 3264x2448) let us
  compare the before and after times for all the steps, for both the raw
  and plain sub-formats of PGM:

  <br>
  <table border=1>
  <tr>
  <th>28 MB plain PGM</th>
  <th colspan=2>Tcl read pgm</th>
  <th colspan=2>C read pgm</th>
  <th>Speedup C/Tcl</th>
  </tr>
  <tr>
  <td>fileutil::cat</td>
  <td>0.304102 s</td>
  <td>0.010526 &mu;s/byte</td>
  <td>0.293129 s</td>
  <td>0.010146 &mu;s/byte</td>
  <td>n/a</td>
  </tr>
  <tr>
  <td>crimp read pgm</td>
  <td>21.683829 s</td>
  <td>2.713779 &mu;s/pixel</td>
  <td>0.915391 s</td>
  <td>0.114563 &mu;s/pixel</td>
  <td>23.69</td>
  </tr>
  <tr>
  <td>crimp statistics basic</td>
  <td>0.200785 s</td>
  <td>0.025129 &mu;s/pixel</td>
  <td>0.193059 s</td>
  <td>0.024162 &mu;s/pixel</td>
  <td>n/a</td>
  </tr>
  <tr>
  <td>Total</td>
  <td>22.188716 s</td>
  <td></td>
  <td>1.401579 s</td>
  <td></td>
  <td>15.83</td>
  </tr>
  </table>
  <br>
  <table border=1>
  <tr>
  <th>8 MB raw PGM</th>
  <th colspan=2>Tcl read pgm</th>
  <th colspan=2>C read pgm</th>
  <th>Speedup C/Tcl</th>
  </tr>
  <tr>
  <td>fileutil::cat</td>
  <td>0.159231 s</td>
  <td>0.010526 &mu;s/byte</td>
  <td>0.199514 s</td>
  <td>0.024970 &mu;s/byte</td>
  <td>n/a</td>
  </tr>
  <tr>
  <td>crimp read pgm</td>
  <td>12.948204 s</td>
  <td> 5.707877 &mu;s/pixel</td>
  <td>0.333799 s</td>
  <td>0.041776 &mu;s/pixel</td>
  <td>38.79</td>
  </tr>
  <tr>
  <td>crimp statistics basic</td>
  <td>0.060432 s</td>
  <td>0.026640 &mu;s/pixel</td>
  <td>0.193233 s</td>
  <td>0.024184 &mu;s/pixel</td>
  <td>n/a</td>
  </tr>
  <tr>
  <td>Total</td>
  <td>13.167867 s</td>
  <td></td>
  <td>0.726546 s</td>
  <td></td>
  <td>18.12</td>
  </tr>
  </table>

  <br>
  Much better. The time spent on calculating the statistics and reading
  the bytes is essentially the same, within error margins, and the
  parsing of the PGM format is an order of magnitude faster.

comment:
  Replaced the Tcl implementation of the reader for PGM files with C code.

  This was done because usage of the PGM format for the greyscale page
  images in the bookflow project showed that the conversion of the read
  PGM data to a crimp image was a big bottleneck, dominating the time to
  calculate the global brightness of the pages.

  Using one the images as example (IMG_2291.pgm, 3264x2448) let us
  compare the before and after times for all the steps, for both the raw
  and plain sub-formats of PGM:

  <br><br>
  <table border=1><!-- ------------- plain PGM -->
  <tr><!-- Heading -->
  <th>28 MB plain PGM</th>
  <th colspan=2>Tcl read pgm</th>
  <th colspan=2>C read pgm</th>
  <th>Speedup C/Tcl</th>
  </tr>
  <tr><!-- Reading file into memory -->
  <td>fileutil::cat</td>
  <td>0.304102 s</td>
  <td>0.010526 &mu;s/byte</td>
  <td>0.293129 s</td>
  <td>0.010146 &mu;s/byte</td>
  <td>n/a</td>
  </tr>
  <tr><!-- Conversion of pgm string to crimp image -->
  <td>crimp read pgm</td>
  <td>21.683829 s</td>
  <td>2.713779 &mu;s/pixel</td>
  <td>0.915391 s</td>
  <td>0.114563 &mu;s/pixel</td>
  <td>23.69</td>
  </tr>
  <tr><!-- Calculating the statistics of the crimp image -->
  <td>crimp statistics basic</td>
  <td>0.200785 s</td>
  <td>0.025129 &mu;s/pixel</td>
  <td>0.193059 s</td>
  <td>0.024162 &mu;s/pixel</td>
  <td>n/a</td>
  </tr>
  <tr><!-- Total time for all steps -->
  <td>Total</td>
  <td>22.188716 s</td>
  <td></td>
  <td>1.401579 s</td>
  <td></td>
  <td>15.83</td>
  </tr>
  </table>
  <br>
  <table border=1><!-- ------------- raw PGM -->
  <tr><!-- Heading -->
  <th>8 MB raw PGM</th>
  <th colspan=2>Tcl read pgm</th>
  <th colspan=2>C read pgm</th>
  <th>Speedup C/Tcl</th>
  </tr>
  <tr><!-- Reading file into memory -->
  <td>fileutil::cat</td>
  <td>0.159231 s</td>
  <td>0.010526 &mu;s/byte</td>
  <td>0.199514 s</td>
  <td>0.024970 &mu;s/byte</td>
  <td>n/a</td>
  </tr>
  <tr><!-- Conversion of pgm string to crimp image -->
  <td>crimp read pgm</td>
  <td>12.948204 s</td>
  <td> 5.707877 &mu;s/pixel</td>
  <td>0.333799 s</td>
  <td>0.041776 &mu;s/pixel</td>
  <td>38.79</td>
  </tr>
  <tr><!-- Calculating the statistics of the crimp image -->
  <td>crimp statistics basic</td>
  <td>0.060432 s</td>
  <td>0.026640 &mu;s/pixel</td>
  <td>0.193233 s</td>
  <td>0.024184 &mu;s/pixel</td>
  <td>n/a</td>
  </tr>
  <tr><!-- Total time for all steps -->
  <td>Total</td>
  <td>13.167867 s</td>
  <td></td>
  <td>0.726546 s</td>
  <td></td>
  <td>18.12</td>
  </tr>
  </table>

  <br>
  Much better. The time spent on calculating the statistics and reading
  the bytes is essentially the same, within error margins, and the
  parsing of the PGM format is an order of magnitude faster.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=1cc2e4740f1740f9&n=4 | 1cc2e4740f1740f9]: Add comment. Add date=2010-11-19 22:24:01.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Close a plain PGM image written to a channel with a newline. Apparently expected by the pgm* commands of netpbm.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=186b7b5109aba32d&n=4 | 186b7b5109aba32d]: Add comment. Add date=2010-11-28 20:35:18.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Replaced the Tcl implementation of the reader for PPM files with C
  code, structured like the C-based PGM reader committed with
  [186b7b5109]. It simply was stuck in my craw to have a slow PPM reader
  while knowing that it can be fast too, as demonstrated by the PGM
  rewrite, and pretty trivial to implement to boot.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Changed convolution on float image to not clamp the result to grey8 range. Bad. Float is present to allow us the use of large dynamic ranges.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added more convenience methods for affine transforms: shear, and reflection along lines through the origin.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Finally bit the apple and remodified the API of the table eval/linear methods, replacing their option '-wrap' with a deeper submethod, i.e wrap/clamp. The option processing needed to handle -wrap simply forces use of -- always, because of the need to protect negative numbers, and it simply doesn't look nice. Updated implementation, demos, and docs.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Added methods computing the kernel of a gaussian blur, discrete, or sampled, and filters based on these kernels. Updated demos and docs.

comment:
  Added methods computing the kernel of a guassian blur, discrete, or sampled, and filters based on these kernels. Updated demos and docs.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=a8b237cf020b8aac&n=4 | a8b237cf020b8aac]: Add comment. Add date=2010-12-08 06:17:49.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  API for the hypot and atan2 operators, see [4dadc8d0a7] and [b2cab740d3] for the underlying primitives.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Fix bugs in the signature and implementation of the sobel, prewitt, scharr y filters.

  Modified the symmetric binary operators to not try argument reversal when the argument image types are identical, as then the second try is identical to the first, thus superfluous.

  Filled the conversion of gradients from cartesian to polar representation, and added a method to generate a visualization of the gradient.

comment:
  Fix bugs in the signature and implementation of the sobel, prewitt, scharr y filters.
  Modified the symmetric binary operators to not try argument reversal when the image types are identical, making the second try identical to the first.
  Filled the conversion of gradients from cartesian to polar representation, and added a method to generate a visualization of the gradient.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=1d969fb0c36442d8&n=4 | 1d969fb0c36442d8]: Add comment. Add date=2010-12-09 08:44:11.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Base documentation for the gradient methods and the underlying edge-detecting filters, see [d5d2f1a6f6].


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Additional primitives, the last two steps of canny edge-detection (non-max suppression, and edge-tracing with hysteresis)

comment:
  Additrional primitives, the last two steps of canny edge-detection (non-max suppression, and edge-tracing with hysteresis)


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Fixed bug in local contrast equalization, added the missing propagation of AHE radius for the rgb/a branches.

comment:
  Fixed bug in local contrast equalication, added the missing propagation of AHE radius for the rgb/a branches.


type: g
user: andreas_kupries
comment:
  Tag changes on [/timeline?dp=4d11f5d4c99f069e&n=4 | 4d11f5d4c99f069e]: Add comment. Add date=2010-12-10 03:48:03.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=1d1f47843f654506&n=4 | 1d1f47843f654506]: Add comment. Add date=2010-12-12 02:27:50.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Learned how to force the compilation of the C pieces using official/public critcl API calls, and removed the hack from the demos. Plus additional check in crimp if compilation is possible.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Moved the compile check up before we are sourcing the higher API, and modified to actually load the shared library if its ok. The check builds the code, but explicitly isn't loading the results.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Updated the List & Has helper commands, now that the C layer forces compilation and loads its shared library there is no need to check the auto_index any longer when looking for primitives. In the future we may also incrementally inline these procedures at their call-sites.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Added volume structure and basic API. Needed for bilateral grid. Consider re-unification with images, i.e. images == volumes with depth 1. Note also that at least one image processing toolkit uses 4 dimensional structures. x, y, z, and t.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Bilateral filter. Implemented per http://people.csail.mit.edu/sparis/bf_course/. No test cases yet. First use of volume structures.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Joint bilateral filter. Implemented per http://people.csail.mit.edu/sparis/bf_course/. No test cases yet.


type: ci
bgcolor: #fff0c0
user: andreask
comment:
  Fix compile, link, and runtime issues with bilateral filter. The filter is definitely incorrect still, has quite obvious defects in the output.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Two bug fixes in the bilaterals: Added the forgotten the scaling factor in the gaussian filtering. And added the missing padding in phase 4, equivalent to the one in phase 2.

comment:
  Two bug fixes in the bilaterals: Added the forgoten the scaling factor in the gaussians. And added the missing padding in phase 4, equivalent to the one in phase 2.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  Fixed the unintentional clipping of values found in the float convolutions. Was summing to integer variable, clipping each kernel product, and was also using clamp to grey8 range. Now using a "double" variable for the summing to keep the full precision of all intermediate results, performing any clamping only when storing the final result, and without any clamping at all for images of type "float". The problem was found while experimenting with getting a retinex implementation done, where the middle-range smoothing went spectacularly and visibly wrong because of this.

comment:
  Fixed unintentional clipping in the float convolution. Was summing to integer, clipping each kernel product, and was using clamp to grey8 range. Now using double for summing to keep full precision, and clamping only only storing the result, without any clamping at all for float-type image. THe problem was found while experimenting with getting a retinex implementation, where the middle-range smoothing went spectacularly visibly wrong because of this.


type: ci
bgcolor: #fff0c0
user: andreask
ecomment:
  More work on retinexes. Added demo for color retinex working in HSV, processing V like the greyscale retinex, leaving HS unchanged. After a test run on a known set and comparing against the results of GHE the retinex desaturates the colors quite strongly (I suspect that this is the "graying out" noted in the various papers).

comment:
  More work on retinexes. Added demo for color retinex working in HSV, processing V like the greyscale retinex, leaving HS.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=e760560b3b702165&n=4 | e760560b3b702165]: Add comment. Add date=2011-02-20 20:50:51.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=43b4914565b81201&n=4 | 43b4914565b81201]: Add comment. Add date=2011-02-20 19:24:42.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=d3a262e09b3442dc&n=4 | d3a262e09b3442dc]: Add comment. Add date=2011-02-09 21:28:12.


type: t
user: andreask
brief: Ticket [7e1650a970]: 3 changes
comment:
  Ticket [7e1650a970] <i>Bind to the "Little CMS" Color Management Engine</i> status still Open with 3 other changes


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


type: t
user: andreask
brief: Ticket [7e1650a970]: 1 change
comment:
  Ticket [7e1650a970] <i>Bind to the "Little CMS" Color Management Engine</i> status still Open with 1 other change


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=13c0452d35d3412e&n=4 | 13c0452d35d3412e]: Add propagating bgcolor=#00f000. Add date=2011-03-17 21:00:24.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=a20a604b8e6340fe&n=4 | a20a604b8e6340fe]: Add propagating branch=mistake. Add propagating symbolic tag "mistake". Add date=2010-07-05 18:52:32. Cancel symbolic tag "ak-experimental".


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=71cdc47e28129631&n=4 | 71cdc47e28129631]: Add propagating branch=mistake. Add propagating symbolic tag "mistake". Add date=2010-07-05 22:55:18. Cancel symbolic tag "ak-experimental".


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=71cdc47e28129631&n=4 | 71cdc47e28129631]: Add propagating bgcolor=#ffc0d0. Add date=2010-07-05 22:55:18.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=a20a604b8e6340fe&n=4 | a20a604b8e6340fe]: Add propagating bgcolor=#ffc0d0. Add date=2010-07-05 18:52:32.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=fc8a97226111e1d8&n=4 | fc8a97226111e1d8]: Add propagating bgcolor=#ffc0ff. Add propagating branch=mistake. Add propagating symbolic tag "mistake". Add date=2010-09-21 22:45:25. Cancel symbolic tag "ak-experimental".


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=445eb658fe23d26e&n=4 | 445eb658fe23d26e]: Add propagating bgcolor=#bde5d6. Add date=2010-11-11 07:20:46.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=88563a96b1a67a25&n=4 | 88563a96b1a67a25]: Add closed. Add date=2010-11-16 06:53:21.


type: ci
user: andreask
comment:
  Made branch "ak-experimental" official, merging it over into the trunk aka main-line. Closing the branch.


type: ci
user: andreask
comment:
  Added missing return of TCL_OK in ImageFromAny. Was ok for 8.5, tripped for 8.6, raising bogus errors.


type: ci
user: andreask
comment:
  Added export of image to Tcl list of list of pixel values. No markers, no dimensions, just plain pixels. Caller is expected to know the structure and thus meaning of the values.


type: ci
user: andreask
comment:
  Simplify the declaration of Tcl readers and writeres, using critcl's glob matching ability instead of doing that ourselves.


type: ci
bgcolor: #ffcc99
user: kennykb
comment:
  Added low-level Gaussian derivative filters and a new demo, 'gauss_laplacian_luma3.tcl', that exercises them.


type: g
user: kbk
comment:
  Tag changes on [/timeline?dp=4e5fb11fe8e82740&n=4 | 4e5fb11fe8e82740]: Add propagating branch=mistake. Add propagating symbolic tag "mistake". Add closed. Cancel symbolic tag "kbk-extras".


type: ci
user: andreask
comment:
  Fixed definitions of erode/dilate, updated documentation.
  Added references for morphological tophat to documentation.
  Fixed definition of charcoal effect to keep it same despite the change.
  Updated charcoal demo for same.
  Added demo to show off all morph operations in one.
  New morph operation toggle(map), edge sharpener.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=dda5645096ae4abc&n=4 | dda5645096ae4abc]: Add propagating bgcolor=#7f7f00.


type: ci
user: andreask
comment:
  Fixed type for GREY32 to be "unsigned int", and made the GREY access macros uniform in structure. Last is prep for future type changes using intXXX_t type(def)s.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=13c0452d35d3412e&n=4 | 13c0452d35d3412e]: Add propagating bgcolor=#007fff.


type: ci
user: andreask
comment:
  Added macros for area and volume calculations, with proper casting to avoid the 4-gpixel barrier. Updated various places to use these macros now. Note that Tcl_Objs are still limited to 4G, mostly.


type: ci
user: andreask
comment:
  Extended demos.tcl with the ability to reload demos/ and images/ after changes, for faster turn-around when only a demos/ file, or image changed, and not crimp itself.


type: ci
bgcolor: #ffcc99
user: kennykb
comment:
  Added squared-Euclidean-distance map, and an auxiliary 'indicator' function needed to produce it. See demos/euclidean_dist.tcl


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=0c0d7e8a336acc5e&n=4 | 0c0d7e8a336acc5e]: Add comment. Add symbolic tag "closed".


type: ci
user: andreask
ecomment:
  Clamp bicubic interpolation to the limits of the representable range of the destination. Do not allow overflow. This fixes the bogus colors at content edges due to bicubic halos. Added a demo showing the three interpolation methods side by side (scaling).

  Thanks to Pat Thoyts for the report.

comment:
  Clamp bicubic interpolation to the limits of the representable range of the destination. Do not allow overflow. This fixes the bogus colors at content edges due to bicubic halos. Added a demo showing the three interpolation methods side by side (scaling)


type: ci
bgcolor: #ffcc99
user: kennykb
comment:
  Development checkpoint: added basic infrastructure for piecewise-linear intensity maps (not yet instantiated for all data types)


type: ci
bgcolor: #ffcc99
user: kennykb
comment:
  Added the remaining monochrome 'map' operators, and a demonstrator of Laplacian-of-Gaussian segmentation.


type: ci
user: andreask
ecomment:
  Found a few problems building on AIX 5.2. Replaced sinf, cosf, and hypotf with their sin, cos, and hypot counterparts. In the f2c.h a number of macros are now undefined before getting redefined, for added robustness. Although it was required only for abs(), being in conflict with a system definition. Note that the AIX used also had no definition of lrint(), for this a compat implementation will be needed, plus a dynamic check at configure/build time to activate it when needed.

comment:
  Found a few problems building on AIX 5.2. Replaces sinf, cosf, and hypotf with their sin, cos, and hypot counterparts. In the f2c.h a number of macros are now undefined before getting redefined, for added robustness. Although it was required only for abs(), being in conflict with a system definition. Note that the AIX used also had no definition of lrint(), for this a compat implementation will be needed, plus a dynamic check at configure/build time to activate it when needed.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Extended the crimp core to use the new critcl utilities to detect systems without lrint(), and provide a compat implementation for these.


type: ci
bgcolor: #007fff
user: andreask
comment: Cherry picked the lrint() compat code from the works-for-critcl-3 branch. We need this for Windows.
ecomment:
  Cherry picked the lrint() compat code from the work-for-critcl-3 branch.
  We need this for Windows.

  Furthermore fixed the issue of the missing M_PI definition as well.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Use the new critcl messaging command instead of directly writing to stdout. That way mode compile & run will not generate spurious output.


type: ci
bgcolor: #007fff
user: andreask
comment:
  Added gui mode to 'brew' helper, and made it default when called with no arguments, on Windows (= double-click). Also added .tcl extension, again for Windows, to pick up the intepreter through the association on the extension.


type: ci
bgcolor: #007fff
user: andreask
comment:
  Moved the M_PI portability definition from its location in crimp.tcl into a more generally accessible header file (util.h). Fixed gauss.c windows issues with M_PI by including util.h


type: ci
bgcolor: #ffc0d0
user: andreask
ecomment:
  Last portability fixes in c/gauss.c, replacing various float functions with their double counterparts (hypot, sin, cos, sqrt, exp)

comment:
  Last portability fixes in c/gauss.c, replacing various float funcitons with their double counterparts (hypot, sin, cos, sqrt, exp)


type: ci
bgcolor: #007fff
user: andreask
comment:
  Added checks for the existence of various float-math functions and
  delegates them to their double counterpart of the compiler doesn't
  provide them.

  This replaces rev [1a2b5e973a] (moved to a mistake branch), and
  reverts part of rev [2e4a6fce26].

  This change relies on functionality provided by critcl in rev
  [8299af2478] and forward.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=1a2b5e973a57abf8&n=4 | 1a2b5e973a57abf8]: Add propagating bgcolor=#ffc0d0. Add propagating branch=mistake. Add propagating symbolic tag "mistake". Cancel symbolic tag "work-for-critcl-2.1".


type: ci
bgcolor: #7f7f00
user: andreask
ecomment:
  Convert "puts" commands left by merge into "critcl::msg", and noted where we could provide messaging about the operators compiled into the library.

comment:
  Convert puts left by merge into critcl::msg, and noted where we could provide messaging about the operators compiled inot the library.


type: ci
bgcolor: #007fff
user: andreask
comment:
  Added a demonstration of a magnifier following the mouse when over the shown image. Not perfect at the borders. This is something which I should add to the framework, so that it can be used to look at the output of any demo. Another obvious extension would be to multiple settings (currently fixed to 8x of a 20x20 region)


type: ci
bgcolor: #007fff
user: andreask
ecomment:
  Fixed off guard conditions in the magnifier, a copypasta bug, and dropped the now superfluous helper variables px/py.

comment:
  Fixed off guard conditions, a copypasta bug, and dropped the now superfluous helper variables px/py.


type: ci
bgcolor: #007fff
user: andreask
ecomment:
  Removed the magnifier demonstration, and re-implemented it as part of the demo framework, for use with all demos.

comment:
  Removed magnifier demonstration, and re-implemented as part of the demo framework, for use with all demos.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=5ee0af28c2fbf62e&n=4 | 5ee0af28c2fbf62e]: Add propagating bgcolor=#c0ffc0.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=7c8fbc1b7a7d7444&n=4 | 7c8fbc1b7a7d7444]: Add propagating bgcolor=#c0ffc0. Add comment.


type: t
user: andreask
brief: Ticket [892d6781d2]: 3 changes
comment:
  Ticket [892d6781d2] <i>Document the input and result domains of the various operators</i> status still Open with 3 other changes


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Shuffled a few declarations and definitions around for better separation of internal versus public headers. Renamed a few macros (assertions) to have a crimp-specific prefix, to reduce risk of collisions with other package headers. This is preparation for the introduction of critcl v3 stubs and api management commands.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Moved the declarations of exported functions to critcl api management. Moved declaration of internal initializer to the one place where it was used. We now have a proper stubs-ified package.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Split the Tk related commands, i.e. conversion from and to Tk photo images, off the crimp core package. The new crimp::tk uses the critcl v3 api management commands to get access to crimp's exported stubs table


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Moved the provide commands back to the end, with the latest critcl v3 changes the ordering trouble which caused their original move is gone.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Fix macro clash, now that the public definitions are visible everywhere through the critcl stubs handling.


type: ci
bgcolor: #7f7f00
user: andreask
comment: Renamed the highlevel files for crimp and crimp::tk packages; and bumped to version 0.1
ecomment:
  Renamed the high-level files for crimp and crimp::tk packages; and bumped to version 0.1. Also fixed typos in the high-level code of crimp::tk, and simplified a bit (assume presence of the necessary namespace, made by crimp.


type: ci
bgcolor: #ffc0d0
user: andreask
ecomment:
  Extended the float/grey16/grey32 statistics to report the coordinates of the pixels with max/min value (first in scan order (left 2 right, top 2 bottom)). grey8 and multi-channel images to come. These require more work, as their statistics are derived from their histograms. Which does not remember locations. Likely I will write new primitives for them, like was done for grey16, etc. and then merge their results with the histogram derived data.

comment:
  Extended float/grey16/grey32 statistics with coordinates of the pixels with max/min value. grey8 and multi-channel images to come. These require more work, as their statistics are derived from their histograms. Which does not remember locations. Likely I will write primitives like for grey16 etc. and then merge their results with the histogram derived data.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=82288c31c984795c&n=4 | 82288c31c984795c]: Add propagating branch=untested-changes-to-basic-statistics. Add propagating symbolic tag "untested-changes-to-basic-statistics". Add comment. Cancel symbolic tag "work-for-critcl-2.1".


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=82288c31c984795c&n=4 | 82288c31c984795c]: Add propagating bgcolor=#ffc0d0.


type: ci
bgcolor: #ffc0d0
user: andreask
ecomment:
  Created 'stats_multi' primitive for the grey8 based image types, single- and multi-byte. Using this now to get the statistics directly, instead of from the histogram. Disadvantage: image is scanned twice. Advantage: We now get the locations of the min/max pixels. Updated the policy code to call on the new primitive, removing the Tcl-level math.

comment:
  Created 'stats_multi' primitive for the grey8 based image types, single- and multi-byte. Using now this get the statistics directly, instead of from the histogram. Disadvantage: image is scanned twice. Advantage: We now get the locations of the min/max pixels. Updated the policy code to call on the new primitive, removing the Tcl-level math.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=c51493e2170617ec&n=4 | c51493e2170617ec]: Add propagating bgcolor=#c0f0ff. Add propagating branch=image-io-experiments. Add propagating symbolic tag "image-io-experiments". Cancel symbolic tag "work-for-critcl-3".


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Split the "crimp::core" package off "crimp". The core provides the common data structures, their acessors, and globally useful utility macros. "crimp" now is the collection of algorithms, plus handling of basic file formats (ppm, pgm). Modified "crimp::tk" to use the new core, beyond it stays the collection of the Tk dependent parts, with Tk photo images a pseudo-file format we can read from and write to. Plans: Extended the core with buffer management and functions to help with the processing of file formats, then write handlers for BMP and GIF, as separate packages, then split the basic file format handling off "crimp" as well.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Generalized wrap4tea target to take list of packages, instead of duplicating the virtually same code for each.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Added broken start of a BMP image reader. Doesn't match the support API, but an older form, pieces of Tkimg BMP, etc.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Continued work on the BMP reader; most of the pixel data decoding is now written. Missing still is calculation of pixel data size for uncompressed formats, and the proper handling of the data for RLE4 (we have the main skeleton, based on RLE8).


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Fix typo in the compression enum, plus compute pixel array size for uncompressed images. Plus check of the size after decoding a compressing stream.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Extended the "crimp::core" with a Tcl (policy) level. Contains the basic helpers used by "crimp", and is now also the place containing the extensibility hooks for image file format handling.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Moved the code handling the processing of .crimp definitions into a separate file, to be shared among the crimp packages without duplication.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Fixed number of small buglets. Main is removal of most of the read/write setup from the main "crimp".


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Moved the basic image accessors to the core, ditto the handlers for the most basic 'file format' (nested Tcl lists). The core is now a bare-bones functional system able to create and access images. It should now also have enough functionality to be testable.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Moved the handling of PFM images into separate package. New: Implemented PFM reader. Note: With this the only file format handling left in the main "crimp" package is strimje read support. Dropped the left-over code for handling writers.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Updates to the BMP reader. Package meta data completed. Fixes to the RLE decompressors, take height/compression restriction into account. Policy level is now empty, keeping it for future write code.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Bugfixes in the core IO support (mostly off by one), and extended with
  function to align, relative to a base location.

  Plus fixes in the BMP reader: Bad return value, and data alignment
  when decoding pixel data is relative to the base location. Error
  messages modified to uniquely identify each location and problem.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Added 2nd BMP demo/test. Like the first, assumes to have a directory "images/bmpsuite" to access. Provides access to all images, via buttons.


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Fixed file reading oops in BMP demos, must handle the files as binary. In the decoder itself, split the first consistency check into 3 checks with different error messages, to distinguish the possibilities.


type: ci
bgcolor: #c0f0ff
user: andreask
ecomment:
  Added TRACE to BMP reader, to help debugging. Plus bugfixes: Do not auto-switch scan-lines when a RLE run reaches the end of the scan-line. This is handled by the EOL escape, and actually running over is an error, which we now assert. Removed a bogus index-check on the unpacked pixels of RLE4, plus added proper relative alignment of absolute runs.

comment:
  Added TRACE to BMP reader, to help debugging. Plus bugfixes: Do not auto-switch scan-lines when a run reaches the end of the line. This is handled by the EOL escape, and actually running over is an error, which we now assert. Removed a bogus index-check on the unpacked pixels of RLE4, plus added proper relative alignment of absolute runs.


type: ci
bgcolor: #c0f0ff
user: andreask
ecomment:
  Extended the BMP reader to properly handle the OS/2 DIB header. Only the packed RGB formats are missing now from the common stuff (and what is supported by TkImg).

comment:
  Extended the BMP reader to properly handle the OS/2 DIB header. Only the packed formats are missing now from the common stuff (and what is supported by TkIMG).


type: ci
bgcolor: #c0f0ff
user: andreask
comment:
  Extended BMP reader to handle the packed RGB formats. Note: I seem to mishandle the channel order somewhere, for all RGB formats. Investigate.


type: ci
bgcolor: #7f7f00
user: andreask
ecomment:
  Started to split the documentation along the same lines as the packages were split into core, I/O and processing (the old main crimp). Core documentation is done, and crimp processing updated. Placeholders for the I/O packages. Added a new set of diagrams showing off the system architecture, basic, and with specific parts highlighted. Added an introductory manpage.

comment:
  Started to split the documentation along the same liones as the packages were split into core, I/O and processing (the old main crimp). Core documentation is done, and crimp processing updated. Placeholders for the I/O packages. Added a new set of diagrams showing off the system architecture, basic, and with specific parts highlighted. Added an introductory manpage.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Completed the documentation updates, filling out the manpages for the I/O packages, and removing the material from the main manpage


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Fixed missing ownership declaration for the build-time support file, ensuring its presence in TEA-wraps.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Brought BMP decls in-line with the other IO packages, notably the use of the support.tcl code, simplifying things.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Going over salt/pepper noise generation: Indentation fixup, additional comments, additional check, restructured the decision chain a bit.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Same treatment to the gaussian noise generator. The bug with the two dependent random variables is still present at this point.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=85c6aca2db3010db&n=4 | 85c6aca2db3010db]: Add propagating bgcolor=#f0ffc0.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Renamed the 'rangen' operator for clarity, and updated all
  users. (Note: 'rangen' can not only be read as 'ran-gen' (intended),
  but also as 'range-n', which is quickly confusing).

  Swapped this operator's arguments as well. When width and height are
  used together they are pretty much everywhere used in this order (w,
  h). (Like in the result of crimp::dimensions). This enabled the
  simplification of the calls (single 'dimensions' instead of separate
  'width' and 'height').

  Exposed the operator as 'crimp noise random'; updated the
  documentation, and added demos.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Continued work on the 'complex' image type and operations.

  Moved the complex <-> float conversion to the 'convert' ensemble.

  Extended the FOO -> complex conversion to directly allow greyN images as input.

  I.e. we can now do a 1-step greyN -> complex conversion, instead of
  requiring the 2-step greyN -> float -> complex

  Dropped the fpcomplex2real primitive, this is the same as 'convert
  2float', and now implemented using the primitive for the conversion.

  Extended 'split' and 'join' for image type 'fpcomplex'.

  Updated all users, updated the documentation.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Reworked 'samesize'. Renamed to 'matchsize', and replaced multiple
  redundant calls to the width/height accessors with variables.
  Simplified the returned result, using a list over a dict.
  Updated users of the command, and documentation.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Merged in the statistics changes from our parent branch, plus other assorted things which had accumulated.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Tweaked the post-processing in translation-only register. Using the magnitude after the inverse FFT is overkill. The input was real, the output will be real too, modulo round-off. Just stripping the imaginary part thus the proper way of treating the iFFT result.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Fixing up translation-only registration. Only bug was that the delta values had no post-processing to make them properly signed. Simplified the setup, the changes in [bce7e722de] now allow for a single-step conversion to complex-typed images. Simplified post-processing using the extended statistics of [8b14cc98cc] to get the peak location directly. Extended setup with application of the windowing. Added derivate of Kevin's demo showing off translation-only registration with all the internals visible.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Renamed "imregs" to "register". Renamed command arguments for clarity ("needle" and "haystack"). Added demo of the package command, versus the demo with all the intermediates shown.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Refactored the core of translational registration from the user-code, for easier integration into the rotational/scaling registration. Same factoring to the latter, for integration into the full affine registration. Updated docs with regard of which argument is needle, vs. haystack. Added demo like for the plain translational registration.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Tweaked the construction of the rot/scale registration example. Deriving the needle, not the haystack, and cutting pieces to remove the whole image borders.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Properly remove macro definitions before their redefinition (all .crimp files are collected in a single .c file). AIX cc doesn't allow plain redefinition.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Tweaked the labels for the register demos. Added demo for rot/scale registration which shows the intermediate images, including the log-polar transforms. Of interest, when the needle is a magnification of the original even the phase correlation quickly looses lock, i.e. looses a discernable peak. This might be an artifact of how we generate the needle from the haystack, and the pixels invented by the interpolation (bilinear) during magnification. Time to try this on the airport and outline of the plane. These are ... independent needle and haystack.


type: ci
bgcolor: #f0ffc0
user: andreask
ecomment:
  First run over the log-polar code, mostly formatting. Moved out of "transform" ensemble to be its own toplevel command "crimp::logpolar", similar to fft.

comment:
  First rrun over the log-polar code, mostly formatting. Moved out of "transform" ensemble to be its own toplevel command "crimp::logpolar", similar to fft.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Continued and completed work on the log-polar transforms
  - Removed redundant transmission of input image w/h
  - Renamed a few arguments for clarity.
  - Added comments.
  - Reformatted the whitespace.
  - Structured the main loop a little differently, reducing indentation.
  - Did the changes from the previous commit, and all of the above for
    the other lpt primitives, i.e. grey8, grey16, grey32, rgb, and rgba.
  - Added lpt primitives for hsv and fpcomplex images.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Reformatted the windowing operator, docs, demo. Extended the operator to image types "hsv" and "fpcomplex".


type: ci
bgcolor: #f0ffc0
user: andreask
comment: More reformatting to style, tweaks to variable names for clarity in some places.
ecomment:
  More reformatting to style, tweaks to variable names for clarity in some places.
  Plus one new demo for the checker board image.


type: ci
bgcolor: #d0c0ff
user: andreask
ecomment:
  I am impatient.

  Having worked through and vetted most of the code in the parental
  branch I want this code in the main branches, for regular use.

  But there is still unvetted code, namely the 'filter::cleanup' and the
  higher-order image registrations (rotation, scale, affine,
  find-object), where I have run into roadblocks of understanding
  myself, and where I defer to Kevin for vetting.

  To get the vetted pieces into the mainline, without having the
  unvetted parts this commit is made. It removes the unvetted pieces,
  puts them into a new branch, and this new branch will then be
  integrated with "works-for-critcl-2.1" and then "works-for-critcl-3".

  The code is not lost, of course. It is still in the "x-smsaurabh" branch, and
  when Kevin has worked through it, it can then be integrated also.

comment:
  I am impatient.

  Having worked through and vetted most of the code in the parental
  branch I want this code in the main branches, for regular use.

  But there is still unvetted code, namely the 'filter::cleanup' and the
  higher-order image registrations (rotation, scale, affine,
  find-object), where I have run into roadblocks of understanding
  myself, and where I defer to Kevin for vetting.

  To get the vetted pieces into the mainline, without having the
  unvetted parts this commit is made. It removes the unvetted pieces,
  puts them into a new branch, and this new branch will then be
  integrated with works-for-critcl-2.1 and then -3.

  The code is not lost, of course. It is still in the origin branch, and
  when Kevin has worked through it it can then be integrated also.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=3eaec58b4f99f339&n=4 | 3eaec58b4f99f339]: Add propagating bgcolor=#d680a6. Add propagating branch=mistake. Add propagating symbolic tag "mistake". Add closed. Cancel symbolic tag "integration-stage".


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=d7015891a3e043ca&n=4 | d7015891a3e043ca]: Add propagating bgcolor=#d0c0ff. Add comment.


type: ci
bgcolor: #f0ffc0
user: andreask
comment:
  Dropped the image of random numbers from the noise generators.

  Fixed the gausian noise as well, which has to use two uniformly
  distributed random numbers (radius, angle) to get one gaussian
  distributed value.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Extended the critcl access code to look for it as starpack and/or starkit as well, instead of a plain package.


type: ci
bgcolor: #7f7f00
user: andreask
ecomment:
  Fixed oversight in merge result [a795ba1808]. A number of operators merged into the branch were not switched from the old NALLOC to the new CRIMP_ALLOC_ARRAY macro, at the time, breaking the build.

comment:
  Fixed oversight in merge result [a795ba1808]. A number of operaters merged into the branch were not switched from the old NALLOC to the new CRIMP_ALLOC_ARRAY macro, at the time, breaking the build.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Fixed more merge problems. Integrated, manually, all the new stuff added to v21. The change from "crimp_tcl.tcl" to "policy.tcl" prevented trackign and automatic merge by fossil.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Central critcl use: Use proper native-path; also use {*}-expansion, we are 8.5+; Notes re critcl starpack on windows


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Expanded build.tcl to allow specification of a named target (cross-builds, fake the auto-detection of the platfomr, ...)


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Emulate index(). Apparently doesn't exist in Win32, and its easier to write our own than doing a check at configure time.


type: ci
bgcolor: #7f7f00
user: andreask
comment:
  Updated devguide to changes in critcl location, management, and the changes to directory structure due to the split into multiple packages.


type: ci
user: andreask
comment:
  Added various guides on how to retrieve the sources, build and install them, etc. The developer's guide is only a skeleton yet, and will take ovr the content of the plain text dev guide in due course.


type: ci
user: andreask
comment:
  Demo application changes:
  - Use a dotbox cursor over the canvas.
  - Take arguments as additional paths to search packages in (like
    built, but not yet installed crimp packages).
  - When building crimp via "compile & run", show the informational
    messages generated by critcl.
  - React to clicking on [X] of the window by exiting the application.


type: ci
user: andreask
comment:
  Completed devguide, with per-package info, and tweaks. Removed the old plain-text devguide. Regenerated nroff and HTML.


type: ci
user: andreask
comment:
  Added architecture and concepts section to the dev guide. That simply refers to the appropriate parts of the user documentation.


type: ci
user: andreask
comment:
  Reorganized the tools for doc generation a bit, now able to generate docs, figures separately, or together.


type: ci
user: andreask
comment:
  Modified the gaussian noise primitives to return images of the same type as they have as input. Dropped use of float intermediary image and of FITFLOAT. Image contrast is neither stretched nor compressed any longer.


type: ci
user: andreask
comment:
  Merged the branches, tweaked the documentation of various miscellanea, and regenerated the embedded documentation


type: ci
user: andreask
comment:
  Updated dev guide to mention the new tools [5a2f216c67], and integrated the demo gui image [0af89ebde9], replacing the ascii-art used so far.


type: t
user: andreask
brief: Closed ticket [29c692653c].
comment:
  Closed ticket [29c692653c]: <i>make the Tk dependent parts a separate package</i> plus 2 other changes


type: ci
user: andreask
comment:
  Bug fixes. Mark crimp's dependency on critcl::util as build requirement. And crimp::tk is not dependent on critcl::util at all.


type: ci
user: tom
ecomment:
  The CRIMP demo gui was modified: stretching the left frame now stretches the demos list instead of the image list; the demos list is now sorted; when a demo
  is selected an entry is now placed in the log window that indicates which
  demo was run and the file in the demos directory that was used.

comment:
  The CRIMP gui was modified: streching the left frame now strechs the demos
  list instead of the image list; the demos list is now sorted; when a demo
  is selected an entry is now placed in the log window that indicates which
  demo was run and the file in the demos directory that was used.


type: ci
user: andreask
comment:
  Tweaked [4a56dac6d8] a bit, adding and using a tag definition which visually distinguishes the new line from the surrounding text.


type: ci
user: andreask
comment:
  Saving work on my implementation of image smoothing via L0 gradient minimization. The current state is visibly buggy.


type: ci
user: andreask
comment:
  Fixed demo issue, collision between two variables named "dir". The one in the app pointing to the self-same source directory, and the one used by package management when loading packages. Renamed the applications's variable to "selfdir".


type: ci
user: andreask
comment:
  Compute squared magnitude of complex image. Helps us avoiding multiplication of x with its complex conjugate.


type: ci
user: andreask
ecomment:
  Starting branch for the reworking of the internals to a more data-flow oriented system. Saved old structure descriptions, and put in the 1st draft images describing the new structures. Note: Draft means here that the structures themselves are not final.

comment:
  Starting branch for the reworking of the internals to a more data-flow oriented system. Saved old structure descriptions, and put in the 1st draft images describing the new structures.


type: ci
user: andreask
comment:
  New branch.

  Embed images into the infinite 2d plane, i.e. make them bounded
  rectangles with a location in that plane. We had a start on that with
  the operators for projective warp, storing the origin point in the
  user-meta data. This information is now in the C level structures.

  This commit provides the basic change, plus new accessors for the
  geometry data, and updates all users of said geometry data in C to use
  these new accessors.

  The semantics of the various operations which could make use of the
  location information has not changed yet. This is for future commits
  in this branch.


type: ci
user: andreask
comment:
  Modified the demos framework to provide a documented api for access to app and demos directories, replaced outdated and broken (since [3ca084f409], and [3f01ece746]) uses of the $dir variable with these APIs.


type: ci
user: andreask
comment:
  Changed the image/volume construction APIss around a bit. API taking
  location information are now at the core. The old non-location APIs
  became macros injection their default location (0,0).

  Added set of typed constructor taking location information.
  Updated the warp init code to make use of the new constructors.

  Beginning (with float/float) to update the binop core codes to handle
  mismatched and -aligned images, i.e. of different sizes and translated
  to each other. Instead of using additional macros for the special
  cases we reuse the existing one and rely on the compiler to simplify
  this as much as possible (i.e. constants, irrelevant operations, etc.)


type: ci
user: andreask
comment:
  Modified demo framework to report not only image dimensions, but location as well when setting a result for display


type: ci
user: andreask
comment:
  Created a code-generator for the C code of binary operations, with a template. The new code takes the full image gemeotry into account when performing the operation, with the result having the bounding box of the union of the input geometries as its geometry. No checks for image size mismatch anymore. Note: When present alpha channels are combined via MAX, not the chosen operation. When mixing images with and without alpha channel the image without is treated as having a virtual alpha channel which is fully opaque.


type: ci
user: andreask
comment:
  Regenerated the binary operation foundations using the code generator and template from the previous commit, [3eafe14869]. Due to the ease of use of the generator the set of types which can handled by binary operations got extended as well, with 16 new combinations. This does not mean that the actual binary ops automatically use these. We still have to define the upper-level ops to make use of them. I will likely create a generator for that as well. ... Updated the add demo to remove the requirement of identical image dimensions. Plus a new add demo showing the addition of images translated against each other, i.e. that the new binary operation code works as intended. The remaining demos for binary ops will be updated in the same manner.


type: ci
user: andreask
comment:
  Modified the 'cut' command to restrict the x/y similar to how it restricts the w/h. Documented this. Updated the embedded documentation.


type: ci
user: andreask
comment:
  Updated the demos of the remaining binary operators to show how they perform on images translated relative to each other.


type: ci
user: andreask
comment:
  Modified the alpha over operator to behave like the other binary operators in general. Updated and added demos.


type: ci
user: andreask
comment:
  Modified the division operator involving grey8 to scale the result up by MAXVAL_GREY8. Without such scaling the result is mostly zero, which is not really wanted.


type: ci
user: andreask
comment:
  Modified the template and generator for binary ops to declare the various coordinates as direct iteration variables instead of computing them from the main loop variables and letting the compiler deduce the relationship and optimize. Regenerated the C code.


type: ci
user: andreask
comment:
  Modified the 'like' functions for image creation to pass through the image location, not only dimensions. Updated the setalpha operators needing it to do the same, using the data from the base image. They keep ignoring the location of the image providing the alpha-channel and error on the dimensions not matching.


type: ci
user: andreask
comment:
  Modified the 'alpha blend' operator to behave like the other binary operators in general. Updated and added demos.


type: ci
user: andreask
comment:
  Added demo using the new pcx example images of [14be7ca5ee], and extended the demo framework to load the pcx reader package.


type: ci
user: andreask
comment:
  Generated pgm/ppm files from the pcx examples, via image-magick, for cross-checking. Plus demo .The gmarbles file seems to be broken (too short).


type: ci
user: andreask
comment:
  Lots of pixel decoding added. Output format selection and result creation moved into the read pixel function. RGB full color is working (marbles). B/W bitpacked is mainly working (hori_bw), except for offset/border issues, compare to image-magick result, see [5a9d5ce727]. grey8 is untested, due to the brokeness of the gmarbles file. Palettized RGB/VGA untested, no example files for that.


type: ci
user: andreask
comment:
  Added reference to site with lots of PCX images. Copyright unknown. Do not add any of these to the repository. Only for direct testing.


type: ci
user: andreask
ecomment:
  Counter to [8ff99a6157], adding the images containing the standard 'lena' motif. That is pretty much PD.

  Image notes
  <pre>
  image, bbp/planes, meaning, results
  ---------------------------------------------------------------
  lena   8/3 rgb full color - ok
  lena2  8/1 rgb vga palette - ok - decoder now tested
  lena3  4/1 16 color palette - not implemented
  lena4  1/4 16 color palette, bits striped - not implemented
  lena5  See lena2
  lena6  1/3  8 color palette, bits striped - not implemented
  lena7  1/2  4 color palette, bits striped - not implemented
  lena8  2/1  4 color palette - not implemented
  lena9  1/1  2 color black/white - ok, check for border issues.
  lena10 See lena3
  ---------------------------------------------------------------
  </pre>

comment:
  Counter to [8ff99a6157], adding the images containing the standard 'lena' motif. That is pretty much PD.


type: ci
user: andreask
comment:
  Unrolled the decoding loops for 1/2/4 bpp, and fixed the image setup. Plus more debugging (palette dump). lena 3,8-10 now display correctly.


type: ci
user: andreask
ecomment:
  Added decoders for the 1/2, 1/3, and 1/4 bit-striped modes. This completes the decoding of PCX. All lena images can be read and shown. Added a few more (small) example images. Deactivated the decoder tracing.

comment:
  Added decoders for the 1/2, 1/3, and 1/4 bit-striped modes. This completes the decoding of PCX. All lean images can be read and shown. Added a few more (small) example images. Deactivated the decoder tracing.


type: ci
user: andreask
comment:
  Pulled the PCX reader into this branch. Updated to insert the PCX location information into the generated image.


type: ci
user: andreask
comment:
  Merged PCX reader. Generated example sun raster images from the PCX examples, and tkimg. Started list of references to descriptions of the sun raster format.


type: ci
user: andreask
comment:
  First draft of the sun raster reader. Header decoding and validation. No pixel decoding. Build extended. Documentation, and demo added.


type: ci
user: andreask
ecomment:
  Fixed initialization bug (numPixelBytes), and my misunderstandings of the 24/32 bpp modes. All examples show properly.

comment:
  Fixed initialization bug (numPixelBytes), and my misunderstandings with the 24/32 bpp modes. All examples show properly.


type: ci
user: andreask
comment:
  Pulled sun raster reader into the mainline. Updated the package dependecy diagram. Regenerated the figures.


type: ci
user: andreask
comment:
  Reorganized the binary ops, added result type to the generated file
  names, and added a few combinations always generating float, for
  operators like atan2 and hypot.

  Updated all users of the binop_*.c files.
  Reworked pow to use the binop machinery.

  Created special binary ops template for fpcomplex operations which are
  not element-wise (multiply, div), and updated the actual operators to
  use this.


type: ci
user: andreask
ecomment:
  Reworked 'cut' to be a C-level operator, properly handling inside/outside of the input image. Updated demos, cutting out the complex set of Tcl code which handled this before (for the magnifier). Left are warp-field and the mentioned binary ops.

comment:
  Reworked 'cut' to be C-level operator, properly handling inside/outside of the input image. Updated demos, cutting out the complex set of Tcl code which handled this before (for the magnifier). Left are warp-field and the mentioned binary ops.


type: ci
user: andreask
ecomment:
  Continued from previous commit.
  Left to check/modify are

  unary:  ahe, convolve, region_sum, rof

  binary: atan2, hypot, pow, cannyinternal, complex div/multiply, join, joint-bilateral, threshold

  other:  warp-field, cut (*)

  (*) Currently done via 'crop', semantic mismatch. Better as their own operator.

comment:
  Continued from previous commit.
  Left to check/modify are

  unary:  ahe, convolve, region_sum, rof
  binary: atan2, hypot, pow, cannyinternal, complex div/multiply, join, joint-bilateral, threshold
  other:  warp-field, cut (*)

  (*) Currently done via 'crop', semantic mismatch. Better as their own operator.


type: ci
user: andreask
comment:
  Added example images, lena, etc. Extended build system, and filled in the documentation and the highlevel code setup (All pretty much boilerplate).


type: ci
user: andreask
comment:
  Lifted the restriction to 1 byte/pixel and implemented everything needed to handle 2 byte/pixel, i.e. short/pixel. We have no test images for this code, unfortunately. Note that only the MSByte of each pixel is used, to fit the data into crimp's image types.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=4d3360127848eb0c&n=4 | 4d3360127848eb0c]: Add date=2012-01-04 21:55:51.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=fc1714d2467d75ce&n=4 | fc1714d2467d75ce]: Add date=2012-01-04 21:47:50.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=614ebd2b3a6112f8&n=4 | 614ebd2b3a6112f8]: Add date=2012-01-04 21:44:32.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=7be6a972d2c4eb1f&n=4 | 7be6a972d2c4eb1f]: Add date=2012-01-04 21:38:27.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=569ef0ff068e4e26&n=4 | 569ef0ff068e4e26]: Add date=2012-01-04 21:28:29.


type: ci
user: andreask
comment:
  Reduced the size of package dependency diagram, and updated the text variant to list the new image formats and reader packages. Regenerated the embedded documentation.


type: g
user: andreask
comment:
  Tag changes on [/timeline?dp=21f61dcbe7b7b292&n=4 | 21f61dcbe7b7b292]: Add date=2012-01-04 22:12:41.


type: ci
user: andreask
comment:
  Updated the join operator to handle image location (passing location of the first input, ignoring the other locations, checking for matching dimensions)


type: ci
user: andreask
ecomment:
  Updated the hypot operators to use the generic binop machinery to handle images which are translated to each other.

comment:
  Updated the hypot operators to use the generic binop machinery to images which are translated to each other.


type: ci
user: andreask
ecomment:
  Modified the binop template and generator to allow for a post-processing stage of the BINOP function. This is needed for atan2. Also ensured that we have a default post processor (identity), and that the macros are undefined after use. Regenerated all implementations. Further modified the complex2 support to define their BINOP_GLOBAL automatically as well when not present, and remove the macros after use. Updated the callers to drop BINOP_GLOBAL and removal where not needed.

comment:
  Modified the binop template and generator to allow for a post-processing stage of the BINOP function. This is needed for atan2. Also ensured that we have a default post processir (identity), and that the macros are undefined after use. Regenerated all implementations. Further modified the complex2 support to define their BINOP_GLOBAL automatically as well when not present, and remove the macros after use. Updated the callers to drop BINOP_GLOBAL and removal where not needed.


type: ci
user: andreask
comment:
  Updated the atan2 operators to use the generic binop machinery to handle images which are translated to each other.


type: ci
user: andreask
comment:
  Added check that input images are of identical geometry. True for the current higher-level canny code.


type: ci
user: andreask
comment:
  Updated the warp-field operators to handle location (pass 1st location, ignore 2nd, match dimensions)


type: ci
user: andreask
comment:
  Reworked the operators for local (i.e. spatially varying) thresholding to use the binop machinery to handle images with differing geometries. Dropped the primitives handling application of per-channel thresholds for multi-channel images and re-implemented them in Tcl, splitting and re-joining the input and results. As the resulting channels may have differt geometries a bounding box is computed (see previous extension of "crimp::core), and all partial results then expanded to match this box before re-joining, through a new supporting command (matchgeo). These parts need testing.


type: ci
user: andreask
comment:
  Extended the package "crimp::core" with a method returning the full geometry of an image. Plus a method computing the union (i.e. bounding box) of two geometries, with a higher level method for doing the same for an arbitrary number of images.


type: ci
user: andreask
comment:
  Extended range of conversions to allow grey32 -> grey16 -> grey8. Naive method, simply take the high bits fitting into the destination. Essentially naive scaling down.


type: ci
user: andreask
comment:
  Extended split and join operations to handle the single-channel, but multi-byte types (grey16, grey32). The results are the msb to lsb bytes of each pixel in their own images. Updated the documentation. Regenerated the embedded documentation.


type: ci
bgcolor: #80bbd6
user: andreask
comment:
  Implemented read/write of 2-byte PGM files (max > 255), plain and raw. Builds ok. Not tested however. Special-cased the loops for when scaling of the values is not required (max in (255, 65535)).


type: ci
user: andreask
comment:
  Extended the set of scale operators to the greyN types, and exposed them through a new public method (crimp scale). Updated documentation. Regenerated embedded documentation. Tweaked the output generated by critcl a bit (feedback while reading .crimp files).


type: ci
user: andreask
comment:
  Updated install guide to include the crimp's tcllib/tklib dependencies. Regenerated embedded documentation.


type: ci
user: andreask
comment:
  Merged trunk to infinite-plane, brought the changes into line with new macros and structure. Added missing binary operators.


type: ci
user: andreask
comment:
  Bumped version to 0.2 across the board. The API of this branch is incompatible to the 0.1 API, now differentiated by version.


type: ci
user: andreask
ecomment:
  Undone the parts of [36a89e6461] changing the buffer API. Going back to int's, adapting all users for the same, and putting a compile-time-assert in place to check that its sizeof(int) is good enough (>= 4). Which should be true on most machines this will get compiled on. Small embedded system where this is most likely violated (i.e. int == short) are not a target for crimp anyway.

comment:
  Undone the parts of [36a89e6461] changing the buffer API. Going back to int's, adapting all users for the same, and putting a compile-time-assert in place to check that it sizeof(int) is good enough (>= 4). Which should be true on most machines this will get compiled on. Small embedded system where this is most likely violated (i.e. int == short) are not a target for crimp anyway.


type: ci
user: andreask
comment:
  Branch "infinite-plane" completed, merged back to main. This is now version 0.2, although some more development may happen before its tagged and bagged.


type: ci
user: andreask
comment:
  Extended build.tcl with new targets "doc", "figures", and "math", replicating the tools/ helper scripts. Eliminated the latter.


type: ci
user: andreask
comment:
  Resolved crimp vs core entanglement regarding crimp_rect_union. Was defined in defined, is needed by crimp::core. Implementation and necessary declarations shifted around, with some refactoring of the utility declarations to make some accessible to core as well.


type: ci
user: andreask
comment:
  Fix bug where the implementation of crimp::meta was still in crimp; now moved into crimp::core proper. Plus a few changes to unexport the C primitives for meta data access. Continued work on the test suite, now a majority of crimp::core is tested. Missing: bbox*, high-level meta data access, various forms of writing images (destination, not(-yet)-constructable image types)


type: ci
user: andreask
comment:
  Extended core with reader/writer commands for grey16, grey32. Extended tests, checking all write destinations, and the types having both reader and writer commands. Updated documentation, and regenerated the embedded docs.


type: ci
user: andreask
comment:
  Continued work on the core tests. Meta data accessor methods completed. Subset of the tests from the tcl core tests for the dict command.


type: ci
user: andreask
comment:
  Extended core with readers for rgb, rgba, hsv, and fpcomplex, using nested Tcl lists as input. Activated all the tests with constraint NYI, dropping that constraint. crimp::core is now able to generate images of all defined types, without any extensions, crimp or otherwise. We can now add tests for all packages and their methods using synthetic data.


type: ci
user: andreask
comment:
  Updated documentation to list the new readers. Added note to tests, reminder about tests for the error cases.


type: ci
user: andreask
comment:
  Added helper code for tests, standard synthetic images. Plus started testsuite of crimp methods. Note: Known problems, bogosity in the use of both packages, possibly also interference between the test files re loading of the packages.


type: ci
user: andreask
comment:
  Reworked useC to better avoid issues when multiple packages can match the search pattern. By adding dict sorting I hope to get the one with a version number just after the fixed part. If that is not good enough exclusion pattern may have to be allowed.


type: ci
user: andreask
comment:
  Fix bugs in the conversion from float/complex to Tcl lists. Wrongly generated non-empty structures for empty image.


type: ci
user: andreask
comment:
  Tests updated for the changed representation, and writer bugs. Extended the set of tests for the blank generator. All single-channel image types now covered.


type: ci
user: andreask
comment:
  Merged the diverging trunk lines back together. Plus fix for the issue where the tests were not working when binaries had to be generated, instead of already present. Actually an issue only when building uses the critcl package, not a separate critcl executable. In that case the packages build are registered with management, without their functionality actually present. Nothing was loaded by the tests and so the tests broke. Fixed by adding a 'package forget' into 'useC', forcing the load afterward. Reduced output from 'useC', show loaded packages once, per test file. Filled the test of 'blank' a bit more, completing the grey8 section.


type: ci
user: andreask
comment: Slight optimization in C code of 'blank', bypass loops for empty images.
ecomment:
  Slight optimization in C code of 'blank', bypass loops for empty images.
  New: Generator for blank HSV.


type: ci
user: andreask
comment:
  Completed testsuite for 'blank'. Simplified code by constructing the pixel results via lrepeat instead of writing them out.


type: ci
user: andreask
comment:
  Extended tesuite: 'blank', check location of the generated images. New test file for 'invert'. Tweaked the names for the synthetic images to match image types, and added a full grey8 ramp.


type: ci
user: andreask
comment:
  Moved crimp specific helper to proper place. Plus created new helper, list-map, making various transforms easier to write.


type: ci
user: andreask
comment:
  Have testsuite of 'blank' use the crimp helpers, due [0c1b65d528]. Fixed numbering typo in testsuite of 'invert'. Added new testsuite, image 'split'ting.


type: ci
user: andreask
comment:
  Testsuite: Removed dead code from tests for 'join'. Started testsuite for the 'theshold'ing methods.


type: ci
user: andreask
comment:
  Completed testsuite of global 'threshold'ing. Reworked the tests for the automatic thresholds to show the chosen values also, for easier debugging in case of problems.


type: ci
user: andreask
comment:
  Testsuite for 'threshold' code churn. Made the results more visual, instead of arrays of numbers, and differences better to see.


type: ci
user: andreask
comment:
  Modified the tests for 'statistics' to match with limited precision and avoid mismatch due to slight differences in fp handling between systems.


type: ci
user: andreask
comment:
  New test helper procedure. 'table' test descriptions tweaked, todo annotations added, started on actual testcases


type: ci
user: andreask
comment:
  Mainly complete test cases for 'table': gauss, quantization. Bugs in quantization fixed (scope, location of check).


type: ci
user: andreask
comment:
  Updated documentation for 'cut', and bugfix. Added checks to prevent use of negative dimensions for the cut region.


type: ci
user: andreask
comment:
  Moving the testsuite work into a branch. Implemented 'integrate' for 'fpcomplex'. Completed the associated testsuite.


type: ci
user: andreask
comment:
  Refactored the internals of gradient/ramp generators, better checking, some. New: Testsuite for the gradient generators.


type: ci
user: andreask
comment:
  Added testsuite for 'montage', basics complete. Tweaks to the error messages of 'monatage' commands, plus notes about todo's. Made ensembles a bit more strict on what to export.


type: ci
user: andreask
comment:
  Added testsuite for (projective) 'transform's. Basic checks only. Fixed bugs in command implementations (command scoping and export).


type: ci
user: andreask
comment:
  Continued testsuite for projective transforms, extended cases for invalid arguments. Extended transform implementation with argument checks. Renamed the validation routines for more consistency. Think about collecting them in a proper sub namespace, and having variants for both validation (bool return) and checking (raise error).


type: ci
user: andreask
ecomment:
  Added identity transform. Fixed bugs in chaining, rotation (check), reflection, and shearing. Continued testsuite for 'transform'. Now only the quadrilateral testcases are incomplete.

comment:
  Added identity transform. Fixed bugs in chaining, rotatation (check), reflection, and shearing. Continued testsuite for 'transform'. Now only the quadrilateral testcases are incomplete.


type: ci
user: andreask
comment:
  Reworked the implementation and signature of reflections, now taking points, not separate coordinates, and integrated reflection about arbitrary line into the code. Updated and extended the testsuite to match. Documented the new identity now, as well as shearing and reflections.


type: ci
user: andreask
comment:
  Completed 'transform' testsuite, with the quadrilateral mappings. Documented order of corners in the quads, and fixed implementation to match. Added another reference to the paper.


type: ci
user: andreask
comment:
  Straigthened out transformation application order issues found during manual verification of transform results.


type: ci
user: andreask
comment:
  Started on test for 'warp projective'. Not looking nice. Work out pices, like transforming the image corners, backward transform, generate a warp field from a projective transform.


type: ci
user: andreask
comment:
  Nicer argument names for the new warp methods. Testsuite extended, basic argument checking of the new methods.


type: ci
user: andreask
comment:
  Refactored the geometry setup for warping a bit, and exposed as Tcl commands for use by the testsuite.


type: ci
user: andreask
comment:
  More annotations for the low-level matrix and vector arithmetics. Simplified the chain implementation, plus annotations of its workings. Updated documentation. Regenerated embedded docs.


type: ci
user: andreask
comment:
  Testsuite helpers extended with numeric match commands, random number/point generation, and 2d vector arithmetics.


type: ci
user: andreask
comment:
  Added randomized testing for rotation. This seems to be getting hit hard by single-precision math. Manage to match only within 1e1 (before! decimal point). Really consider some way of implementing double-precision math for transforms (at least ?!).


type: ci
user: andreask
comment:
  Added randomized testing for shear. This is known buggy in either transform, or the test shear setup.


type: ci
user: andreask
comment:
  Fixed implementation of shear transform. Annotated everything with the respective matrices as proper reminders. Updated testsuite a bit. Random testing of shear now passes.


type: ci
user: andreask
comment:
  Continued chipping at the quad transform. Worked out a better way for matching transform results (decode + numeric equality, much simpler result spec). Fixed an apparent ordering issue in quad transform result. Added randomized tests using the Q2UNIT core. Disabled at the moment. Transform is still buggy (identity ok, translation already not).


type: ci
user: andreask
comment:
  Seem to have figured out the quads. The paper I was working from seems to have one bug, and one notational issue which wasn't clear. quads emulating most regular transforms now generate the proper matrices of these transforms. Fuzz testing still disabled, still problematic. Likely because the transform assumes convex quads and the random boxes I generate pretty much are not.


type: ci
user: andreask
comment:
  Fixed stupid bug in reflection about the axes. Switched all transforms tests over to decode_transform + custom match.


type: ci
user: andreask
comment:
  Put some of my external helper code into the 'test' command of build.tcl (save full log, show fails directly, collect and show statistics at the end). Disabled the 'origin' helper command, replaced by use of '-verbose line' we have in tcltest already (2.3+).


type: ci
user: andreask
ecomment:
  Fixed bug in revision [f255f089dfbb75cbdfeb], dropped the origin assignments in the refactoring. Any transform used random values from uninitialized memory.

comment:
  Fixed bug in parent revision, dropped the origin assignments in the refactoring. Any transform used random values from uninitialized memory.


type: t
user: anonymous
brief: Ticket [cc2cb5cb16]: 7 changes
comment:
  Ticket [cc2cb5cb16] <i>Tests for crimp::resize: crash, black borders, bogus pixels</i> status still Open with 7 other changes


type: t
user: anonymous
brief: Ticket [cc2cb5cb16]: 3 changes
comment:
  Ticket [cc2cb5cb16] <i>Tests for crimp::resize: crash, black borders, bogus pixels</i> status still Open with 3 other changes


# ticket

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: 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: d33e3ed3f441701fbad39a6939cce32d62ccaefa
type: Feature_Request
status: Open
subsystem: Manipulate color/intensity
priority: Medium
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.

  <hr /><i>andreask added on 2011-02-22 19:12:29:</i><br />
  See also [7e1650a970].


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: 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: 7068afa5f5275ae7daa82c2593a4a20a68a0f292
type: Feature_Request
status: Fixed
subsystem: Manipulate geometry
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
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].



  <hr /><i>andreas_kupries added on 2010-11-16 07:02:42:</i><br />
  Fixed by checkin [53c344efe8].


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



  <hr /><i>andreas_kupries added on 2010-11-16 07:02:28:</i><br />
  Fixed by checkin [53c344efe8].


tkt_uuid: f17efe0938e5db08047fc84eb3983b946c8df36b
type: Feature_Request
status: Fixed
subsystem: Manipulate geometry
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
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].



  <hr /><i>andreas_kupries added on 2010-11-16 07:02:57:</i><br />
  Fixed by checkin [53c344efe8].


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: 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: 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: 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.

  <hr /><i>anonymous claiming to be Arjen Markus added on 2010-12-24 11:52:53:</i><br />
  Consider the use of GPU programming - that is well-suited for this type of computations (almost embarassingly parallel, with only small amounts of data per node).

  Another thing that comes to mind is the use of OpenMP: it is a high-level set of directives and some platform-independent functions that make life much easier, if it fits the bill.


tkt_uuid: 233e0d0b5a40ba4f4be350722e5e9bd38d32963b
type: Feature_Request
status: Fixed
subsystem: Manipulate geometry
priority: Medium
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
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].



  <hr /><i>andreas_kupries added on 2010-11-16 07:03:12:</i><br />
  Fixed by checkin [53c344efe8].


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: 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: Closed
subsystem: General
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
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.

  <hr /><i>andreask added on 2011-10-18 22:42:20 UTC:</i><br />
  Done with the merge from branch "works-for-critcl-3".


tkt_uuid: 126d0ace8fbf8f7fb8f2ebc10c74d05aadbaeede
type: Feature_Request
status: Fixed
subsystem: General
priority: Medium
severity: Important
resolution: Fixed
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.

  <hr /><i>andreas_kupries added on 2010-11-16 07:03:25:</i><br />
  Fixed by checkin [53c344efe8].


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: 723f624229854bf48c120a238ffc23f3cf4f96eb
type: Feature_Request
status: Closed
subsystem: Manipulate color/intensity
priority: Immediate
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Fixed
title: FFT (Fast Fourier Transform)
comment:
  2D FFT is useful standalone, and as the core of fast large convolutions.

  <hr><i>andreas_kupries added on 2010-10-30 05:54:08:</i><br>
  Changes [ec5e0b51e034c9a2c074bca2775bc0b1dfb2b809]
  and [5f4c3be4ba8a4cfe090ee842b1f4192f1cb979b3]
  implement and document forward and backward FFT methods.


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: 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: 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/]


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: 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: 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: b4026485769330b02305dd179ef7daf1b24e139d
type: Build_Problem
status: Open
subsystem: General
priority: Immediate
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: 7caa8aa77552a453313cf98f17d2f37df8a6bc49
type: Feature_Request
status: Open
subsystem: General
priority: Medium
severity: Minor
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Idea: Look into C code generation from Tcl as way of templating simple cases.
comment:
  We have combinatorial explosions in the number of .crimp files in a number of places (like the binary operations), driven by the adding of more supported image-types (float right now, how about double, and multi-channel formats of the same!).

  One way to cut down on the size of the C code would be to have a template and use Tcl code to fill the placeholders appropriately, like with some table of the legal or possible combinations.

  Disadvantage of this approach: At machine code level we still have the combinatorial explosion, additionally with lots of replicated code.

  On the other hand, that is a general problem we have because of our desire to have the C code of loops fully visible to the compiler for optimizations. I.e. The loops do not call a function for their work, but have the action embedded, allowing proper loop-hoisting, inversion, unrolling and whatnot.


tkt_uuid: 22e68b634a04bec29b64a009b2b90fbe5c08e838
type: Feature_Request
status: Open
subsystem: I/O
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: read/write more image formats.
comment:
  This is an umbrella ticket. We have links to tickets for specific formats:

    *  [d50ca57334] PNG
    *  [ad1d29a400] XBM
    *  [d5e196a8e2] XPM
    *  JPEG
    *  BMP
    *  TGA
    *  PCX
    *  ICO
    *  ICNS (Apple Icon)


tkt_uuid: 892d6781d2138c58d01e268dd18e41bf9bb44282
type: Documentation
status: Open
subsystem: General
priority: High
severity: Important
private_contact: 194c9ef8edbd9a57ef36f4f18fde1d57ce26e1e5
resolution: Open
title: Document the input and result domains of the various operators
comment:
  The various operators have no documentation about the input and result domains they use. Ok, partly this is declared through the image types taken and returned. However, especially for float images, this may be further restricted. Float images are often assumed to be in range [0,1) by various papers and algorithms. This needs to be documented.


