home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 4 / AUCD4.iso / art_design / imaging / widget / !Widget5 / !Help < prev    next >
Text File  |  1998-08-19  |  44KB  |  1,078 lines

  1.  
  2. Instructions for !Widget5 by Andrew Sellors
  3.  
  4. *****************************************************************************
  5. * NOTE:                                                                     *
  6. * !Widget5 is FreeWare.                                                     *
  7. * This means that you may freely copy and distribute it, provided that it   *
  8. * is complete with all original files, and that you do not sell it.         *
  9. * PD libraries may charge a nominal fee for the cost of duplication,        *
  10. * postage etc.                                                              *
  11. * In no circumstances shall the author be liable for any damage, loss of    *
  12. * profits, time or data or any indirect or consequential loss rising out of *
  13. * the use of this software or inability to use this software.               *
  14. *****************************************************************************
  15.  
  16. Contents:
  17. ~~~~~~~~~
  18.  
  19. About Widget 5
  20. Compatibility
  21. Operation
  22. Managing Filters
  23. Filter File Format
  24. Drawing Masks
  25. Configuration Window
  26. Security
  27. Credits
  28. The Future
  29. Contacting the author
  30.  
  31. ********************************************************************************
  32.  
  33. About Widget 5:
  34. ~~~~~~~~~~~~~~~
  35.  
  36. * Widget 5 is a image processing package for square pixel 8 and 16 bit greylevel
  37.   and 24bit colour images. (See compatibility)
  38.  
  39. * Widget 5 will work with any size of image, memory permitting.
  40.  
  41. * Widget 5 loads any 256 colour file as a 256 grey level image, disregarding
  42.   any palette. (Useful for owners of the Brainsoft video digitizer)
  43.  
  44. * Widget 5 will load and save EPIC remote sensing images and display the image
  45.   information stored in the file.
  46.  
  47. * Widget 5 will load and save 8, 16 and 24bit Clear files.
  48.  
  49. * Widget 5 can load and save greylevel images in CSV format. 
  50.  
  51. * Images are stored in 12 separate "Image Banks" in memory.
  52.  
  53. * Widget 5 can be run in any screen mode.
  54.  
  55. * Widget 5 will store the images in a dynamic area when used with RISC OS 3.5
  56.   or later
  57.  
  58. * Widget 5 can load and saved squashed sprite files to reduce disc usage.
  59.  
  60. * Widget 5 supports the following image manipulation functions:
  61.  
  62.      * Add two images
  63.      * Average two images
  64.      * Mix two images
  65.      * Convolve an image to another using a NxM matrix (N,M in the range 1-9)
  66.      * Focal Analysis with the following localised processes on a
  67.        3x3, 5x5, 7x7 or 9x9 patch:
  68.                  * Mean greylevel
  69.                  * Median
  70.                  * Maximum
  71.                  * Minimum
  72.      * Changing image greylevels by: (not 24bit colour)
  73.                  * Drawing the mapping function using the mouse
  74.                  * Applying a threshold value
  75.                  * Applying a gamma correction value
  76.                  * Applying histogram equalization
  77.                  * Applying S.L.C.E. (Saturating Linear Contrast Enhancement)
  78.      * Scaling an image by resampling using bi-linear interpolation
  79.      * False colouring selected greylevel ranges and calculating the percentage
  80.        of each range. (not 24bit colour)
  81.      * Levels slice by false colouring equally spaced sections of the total
  82.        grey level range to a defined number of sections and calculating the
  83.        percentages of pixels contained in each of the ranges. (not 24bit colour)
  84.      * Creating a 24bit colour image by combining three greyscale images to make
  85.        up the red, green and blue components of the image.
  86.      * Separating a 24bit colour image into three greyscale images for each of
  87.        the red, green and blue components.
  88.  
  89. * Widget 5 allows an irregularly shaped area mask to be defined to allow
  90.   localised processing.
  91.  
  92. * Area masks can be loaded and saved as text files of point coordinates.
  93.  
  94. * Widget 5 allows the image to be zoomed using the usual magnifier window
  95.  
  96. * Widget 5 can draw the following graphs from an image: (not 24bit colour)
  97.  
  98.      * Greylevel histogram
  99.      * Ogive histogram
  100.      * Reverse ogive histogram
  101.  
  102. * Individual bar heights can be inspected on the graphs.
  103.  
  104. * Graph data can be saved as a CSV file to allow importation into another
  105.   package for analysis.
  106.  
  107. * Widget 5 allows Convolution Filters to be loaded and saved.
  108.  
  109. * Widget 5 can calculate statistical information about an image (or section of
  110.   an image using the masking function)
  111.  
  112. * Widget 5 can display information about the pixel under the mouse pointer
  113.   including the image pixel coordinates, values of colour components and map
  114.   coordinates for a rectified EPIC image.
  115.  
  116. ********************************************************************************
  117.  
  118. Compatibility:
  119. ~~~~~~~~~~~~~~
  120.  
  121. This program is for RISC OS 3.10 or later.
  122. It has been tested on both RISC OS 3.10, RISC OS 3.50 and RISC OS 3.70.
  123. 24bit image processing is only possible on RISC OS 3.x when used with the
  124. 'Deeper' module.
  125. Widget5 is fully StrongARM compatible.
  126.  
  127. ********************************************************************************
  128.  
  129. Operation:
  130. ~~~~~~~~~~
  131.  
  132. NOTE: Clicking on an action icon with Adjust performs the action but leaves the
  133.       window open
  134.  
  135.       If a window contains icons where text can be entered in then pressing the
  136.       RETURN key when in the last icon has the affect of selecting the default
  137.       action button (the one with the yellow border).
  138.  
  139. About Image Banks
  140. =================
  141.  
  142. When held in memory, an image is assigned an Image Bank number so that it can be
  143. referenced to for subsequent operations. This is shown on the title of the
  144. image window and also on the menu displayed when the menu button on the mouse
  145. is pressed over an image.
  146.  
  147. Operations chosen from the menu on the image window always use that Image Bank
  148. for the source image.
  149.  
  150. When an image window is closed, the image is discarded from memory and the Image
  151. Bank becomes free.
  152.  
  153. Starting up
  154. ===========
  155.  
  156. The !Widget5 application starts up when you double-click on its filer icon.
  157.  
  158. Creating a blank image
  159. ======================
  160.  
  161. Clicking on the icon bar icon displays the create image window.
  162.  
  163. The size of the image can be changed by typing or using the arrow icons.
  164.  
  165. The "Bank" radio icons determine which image bank the image is created in.
  166.  
  167. Used image banks icons are greyed out.
  168.  
  169. The "Type" group of icons determines what kind of image is created.
  170. 256 colour images are currently not supported and 16.7M colour images can only
  171. be processed when used with RISC OS 3.5 or later.
  172.  
  173. The "Memory" icon shows how much memory the image will take up when created.
  174.  
  175. Loading a file
  176. ==============
  177.  
  178. When a sprite file is dragged to the icon it is loaded into memory and the
  179. place image window is displayed.
  180.  
  181. This allows the image to be placed into one of the Image Banks.
  182.  
  183. Unavailable banks are greyed out, if they are all greyed out then free one of
  184. the banks by closing the window, but remember to save the image first if you
  185. want to keep it!
  186.  
  187. More that one image can be loaded without being placed in a bank, and an image
  188. can be loaded (but not placed) when all the image banks are used.
  189.  
  190. Loading squashed sprites
  191. ========================
  192.  
  193. Squashed sprite files can also be loaded into Widget 5 in the same way as normal
  194. sprite files. These are the same as the files saved by the !Squash application
  195. that comes with the machine and save disc space by storing the data in a
  196. compressed form.
  197.  
  198. Only Squashed sprite files can be loaded, an attempt to load a file which does
  199. not contain a squashed sprite will return an error message.
  200.  
  201. Loading EPIC images
  202. ===================
  203.  
  204. Specialised remote sensing images with the EPIC filetype are also able to be 
  205. loaded the same way as a sprite.
  206.  
  207. If you are interested in the EPIC image format, please refer to the 'EpicHead'
  208. text file. There is an enormous amount of header information in this format,
  209. some of the most important can be seen by looking under Info -> File in the
  210. menu.
  211.  
  212. Image windows
  213. =============
  214.  
  215. The title of the window displaying the image indicates the image bank number
  216. that the image is stored under and also the type of the image in brackets:
  217.  
  218. (8G)   -  8bit greyscale  (256 greylevels)
  219. (16G)  -  16bit greyscale (65536 greylevels)
  220. (8C)   -  8bit colour     (256 colours)
  221. (24C)  -  24bit colour    (16.7 million colours)
  222.  
  223. If configured the title can also show the process and source image(s) in
  224. braces {} that the image in the windows was generated from.
  225.  
  226. 16bit Greylevel image display
  227. =============================
  228.  
  229. 16bit greylevel images are displayed by converting the greylevel into an 8bit
  230. value on-the-fly.
  231. The Translation submenu on the Image menu allows the translation method to be
  232. selected between a linear or logarithmic mapping.
  233. (see the section 'Convert 16bit to 8bit Grey' further down for details of the
  234. methods used).
  235.  
  236. Image menu
  237. ==========
  238.  
  239. Pressing the menu button over one of the Image Banks displays the menu for that
  240. bank. The Image Bank number is repeated on the menu title.
  241.  
  242. The "Info" submenu allows the two image information windows to be show either
  243. statically by clicking on the entries or as menu subwindows. It also leads to
  244. file header information.
  245.  
  246. The "Save" submenu allows the image to be saved as a 256 grey level sprite.
  247. The name of the sprite in the file it set to the same as the filename (up to
  248. a maximum of 12 characters).
  249. Selecting the "Save squashed" option will result in the sprite being saved as
  250. a squashed sprite and so saving disc space.
  251.  
  252. The "Process" submenu allows one of the image processing operations to be
  253. selected. These operation will use the Image Bank as source that the menu was
  254. open over.
  255.  
  256. The "Graphs" submenu allows graphs to be generated for that particular image.
  257.  
  258. The "Zoom" subwindow allows the size of the image to be changed on screen.
  259. Clicking on the "Zoom" entry itself displays the zoom window statically.
  260. The image that the zoom window refers to is displayed in its title and the
  261. zoom window is always kept above that image window.
  262.  
  263. The "Image flipper" option displays the image flipper which can be used to
  264. compare different images by flipping between them under the control of the 
  265. mouse or keyboard. See the section "Image flipper" for more details.
  266.  
  267. The "Add mask" option adds a mask to that image bank and displays the mask
  268. tools window. If the image bank already has a mask then the option is greyed
  269. out.
  270.  
  271. Using Masks
  272. ===========
  273.  
  274. Many process windows have "Use Source Mask" and "Copy Outside" options. These
  275. options control how the mask defined on the source image is used by the process.
  276. If the source image does not have a mask defined then these options are greyed
  277. out. 
  278.  
  279. The "Use Source Mask" option when selected makes the process only apply to
  280. pixels within the mask area on the source image rather than on the whole image.
  281.  
  282. The "Copy Outside" option, when used in conjunction with the "Use Source Mask"
  283. option results in the pixels around the masked area to be copied unchanged from
  284. the source image. With this option off, the pixels around the mask area in the
  285. destination image are left unchanged.
  286.  
  287. Pixel Display
  288. =============
  289.  
  290. Clicking with the Adjust (right hand) mouse button over the image window
  291. displays the pixel display window which shows the X and Y coordinate of the
  292. pixel under the pointer and also the greylevel (or red, green and blue
  293. components for colour images) and a display of the colour.
  294. The window remains whilst the button is held down and is updated as the mouse
  295. is moved around the image.
  296. If the image is a rectified EPIC image then the map coordinates are included
  297. in the display as Northings and Eastings on the right of the display.
  298.  
  299. Processes
  300. =========
  301.  
  302. Copy:
  303. -----
  304.   This copies the image to another bank.
  305.  
  306. Add:
  307. ----
  308.   This adds the grey levels in the source bank to those in the destination bank.
  309.  
  310. Average:
  311. --------
  312.   This adds the grey levels in the source bank to those in the destination bank
  313.   and then divides by 2.
  314.  
  315. Mix:
  316. ----
  317.   This mixed the image in the source bank with another to produce a third which
  318.   can be placed in the same bank as the second source image.
  319.  
  320.   Clicking on "Start" on the source and destination selection window replaces it
  321.   with a second window containing a horizontal slider. This slider allows the
  322.   proportions of each image (shown below each end of the slider) to be changed
  323.   by dragging the sliderbar.
  324.  
  325.   Normally the resulting image is only created when the "Mix" icon is clicked on
  326.   , but if the destination Image Bank is different from both the source Image
  327.   Banks then the "Real-time" option can be selected. This updates the resulting
  328.   image when the mouse is released from the slider allowing different values to
  329.   be tried out easily.
  330.   
  331. Convolution:
  332. ------------
  333.   This performs a NxM convolution, where N and M can be any value between 1 and
  334.   9, using the matrix and anchor point selected. The values of the matrix and
  335.   anchor point can be entered by typing numbers into the icons or selecting
  336.   pre-defined filters from the pop-up menu.
  337.  
  338.   The matrix size can be selected by clicking on the up and down arrows by the
  339.   numbers indicating the current size or by clicking on one of the size buttons,
  340.   eg. "3x3". The menu of pre-defined filters only shows the filters for the
  341.   selected matrix size.
  342.  
  343.   The matrix size and anchor point values are shown as "ROWS X COLUMNS".
  344.   For the anchor point, 0,0 is the centre of the matrix with positive
  345.   coordinates in the right hand and upward direction.
  346.  
  347.   When changing the size of the matrix, if the caret is in the matrix it is
  348.   always returned to the centre (0,0) of the matrix.
  349.  
  350.   The matrix is overlayed on the source pixel (positioned under the anchor
  351.   point) and the overlapping values multiplied and summed together. 
  352.  
  353.   As the resultant value for each pixel after the convolution is normally scaled
  354.   in some way, the "Scale" value is provided to scale the value back to the
  355.   0 to 255 range of greylevels. This value is used to divide the result before
  356.   it is written into the destination image. Clicking on the "Auto" button
  357.   calculates the gain of the matrix and places it in the scale value. This value
  358.   will on average return the result back into the desired range.
  359.  
  360.   The "Offset" value is provided to shift the grey levels up or down before
  361.   they are written. If the gain of the matrix is zero then it removes the
  362.   D.C. component resulting in negative as well as positive results. A positive
  363.   offset of 128 for example will ensure that the negative results are shifted
  364.   up and not lost.
  365.  
  366.   Clicking on the "Clear" button sets all the values in the matrix and anchor
  367.   point icons to zero.
  368.  
  369.   Clicking on the "Save" button displays the "Save Convolution Filter As"
  370.   dialogue. This allows the values of the filter matrix and anchor point to be
  371.   saved to a file for later use or added to the list of filters in memory.
  372.   See the section titled "Managing Filters" further on in this manual for more
  373.   details.
  374.  
  375. Focal Analysis:
  376. ---------------
  377.   This performs various localised processes on the image.
  378.   The size of the patch of the image around each source pixel taken for the
  379.   process is selected in a similar way to the convolution matrix size with the
  380.   row of size buttons.
  381.  
  382.   An anchor point, also like in the convolution process, is provided to offset
  383.   the patch from the destination pixel position when it is placed over the
  384.   source image.
  385.  
  386.   These processes take the pixels contained by the patch in the source image
  387.   and process them to produce the value that is placed in the destination
  388.   image.
  389.  
  390.   Mean:
  391.   =====
  392.  
  393.   The mean (average) value of the set of source pixels in the patch is
  394.   calculated and if the difference between that and the original source pixel
  395.   is less than the threshold set in the submenu then this value is written to
  396.   the destination image. If the difference is greater than the threshold then
  397.   the original greylevel from the source pixel is used for the destination.
  398.   The threshold is provided to lessen the blurring on edges where a large
  399.   transition between grey level values occurs.
  400.  
  401.   L.A.C.E.:
  402.   =========
  403.  
  404.   Not implemented yet :-(
  405.  
  406.   Median:
  407.   =======
  408.  
  409.   The set of source pixels in the patch are sorted into numerical order and
  410.   the median (middle) value is selected for the destination pixel.
  411.  
  412.   This is a smoothing process which is particularly suited to removing scratches
  413.   from images.
  414.  
  415.   Maximum:
  416.   ========
  417.  
  418.   The maximum greylevel in the source patch is selected and used for the
  419.   destination pixel value.
  420.  
  421.   Minimum:
  422.   ========
  423.  
  424.   The minimum greylevel in the source patch is selected and used for the
  425.   destination pixel value.
  426.   
  427.   Histogram:
  428.   ==========
  429.   
  430.   The destination pixel is calculated from the local histogram (ie. NxM
  431.   moving window).
  432.   
  433.   Local Region:
  434.   =============
  435.   
  436.   The local region filter divides the moving window into eight regions based
  437.   on angular position (ie. north, south, east, west, ne, nw, se, sw). The 
  438.   method compares the variance values of the regions surrounding the pixel
  439.   of interest. The pixel of interest is replaced by the mean of the values
  440.   within the region with the lowest variance, ie. the most uniform region.
  441.   
  442.   This method is very useful for decreasing the amount of speckle in a Radar
  443.   image.
  444.  
  445. Percentage Cover:
  446. -----------------
  447.   This allows ranges of greylevels to be selected and false coloured in the
  448.   image. Beside the image window is displayed another window showing the colours
  449.   and greylevel ranges selected as well as the percentage of the whole image
  450.   containing pixels in each of the ranges.
  451.  
  452.   Colours are selected by turning on the option button beside the relevant
  453.   colour box. This ungreys out the two writable icons into which the range of
  454.   greylevels for that colour is typed.
  455.  
  456.   Clicking on "Colour" false colours the current image with the parameters
  457.   selected.
  458.  
  459.   If "Copy to new image" is selected then the current image is copied to the
  460.   "New Image" image bank before being false coloured.
  461.  
  462.   Closing the window attached to the image bank window that shows the
  463.   percentages causes the image colours to revert back to the normal greyscale.
  464.  
  465.   The colours are preserved in the file when the false coloured image is saved
  466.   as a Sprite. As Widget 5 ignores any palette when loading an image, reloading
  467.   this image will result in the colours changing back to the original greyscale
  468.   but if the image is loaded into !Paint for example then the colours can be
  469.   seen.
  470.  
  471. Levels Slice:
  472. -------------
  473.   This splits the full range of used greylevels into a selected number of
  474.   equally spaced sections. These ranges of greylevels are false coloured and
  475.   have their percentages of pixels in each of the ranges calculated like the
  476.   percentage cover process.
  477.  
  478.   Clicking on "Colour" false colours the current image using the number of
  479.   levels selected.
  480.  
  481.   If "Copy to new image" is selected then the current image is copied to the
  482.   "New Image" image bank before being false coloured.
  483.  
  484.   Closing the window attached to the image bank window that shows the
  485.   percentages causes the image colours to revert back to the normal greyscale.
  486.  
  487. Greylevel Edit:
  488. ---------------
  489.   This allows the greylevels in the source bank to be mapped to different ones
  490.   and the resulting image placed in another bank.
  491.  
  492.   Clicking on "Start" on the source and destination selection window replaces it
  493.   with a second window that performs the actual functions.
  494.  
  495.   The large box shows the mapping function that maps the greylevels in the
  496.   source image (along the bottom of the box) to the resulting image (up the
  497.   side of the box). "0" is completely black and "255" is completely white.
  498.  
  499.   The mapping function can be changed by clicking in the box and drawing the
  500.   line for the new mapping function. When you hold the button down, the
  501.   greylevels in the source and destination images for the current point in the
  502.   box are displayed.
  503.  
  504.   Levels of smoothing can be applied when drawing the mapping function.
  505.     If "Normal Draw" is selected, then only the point in the line where the
  506.     mouse pointer is positioned is affected.
  507.     If either "Smooth Draw" or "V. Smooth Draw" is selected then the points
  508.     near the mouse pointer are also affected, the latter of which producing a
  509.     greater affect. This allows less jagged lines to be drawn.
  510.  
  511.   Various mapping functions can also be selected from the "Processes" menu
  512.   displayed by pressing the "Menu" mouse button when over the window.
  513.     "Linear" produces a resulting image identical to the source.
  514.     "Invert" produces a negative of the source image.
  515.     "Threshold" makes all the levels below the value black and above white.
  516.     "Gamma" applies gamma correction using the value entered in the submenu.
  517.     "Histogram" applies histogram equalization on the source to give the
  518.        maximum possible contrast.
  519.     "S.L.C.E." applies Saturating Linear Contrast Enhancement on the source to
  520.        enhance the contrast in the image. This looks much better than histogram
  521.        equalization as the resulting image is less harsh.
  522.  
  523.   Selecting "Real-time" results in the destination image being updated after
  524.   every operation instead of just when "Map" is selected. The image is updated
  525.   when the mouse button is released after drawing on the mapping function and
  526.   when any of the processes have been selected.
  527.  
  528.   The arrow buttons on the submenus for the Threshold and Gamma processes can
  529.   be used to adjust the values. If the SHIFT key is pressed when the arrows are
  530.   clicked upon makes the values change faster. If the "Real Time" option is
  531.   selected then the image is updated as the values change.
  532.   
  533. Replace pixels:
  534. ---------------
  535.   
  536.   This process is to replace either a single greylevel or a range of greys with
  537.   other greys. It is especially useful used in conjunction with a mask.
  538.   
  539.   Possible uses are replacing columns or rows of bad pixels, or removing greys
  540.   for statistical reasons.
  541.   
  542.   Another less obvious purpose is to extract a non-regular area from an image.
  543.   By using a mask, and keeping the greylevel range mapping 0..255 to 0.255, the
  544.   desired area is cut. However, this method does retain the full source image
  545.   size - and the 'Copy' process with mask is probably easier anyway :-)
  546.   
  547. Scale:
  548. ------
  549.   This allows the source image to be scaled by resampling using bi-linear
  550.   interpolation. When an image is enlarged using this process the "blockiness"
  551.   , caused by the pixels being enlarged, is reduced.
  552.   The new size can be selected from either a percentage of the original size,
  553.   "To Fit" a resolution which can be typed in the two icons or to "Custom"
  554.   x and y scaling ratios.
  555.   
  556. Extract:
  557. --------
  558.  
  559.   Used in combination with a mask, this allows a subscene of the original
  560.   image to be 'cut' out. The extract bounds are taken from the top left mask
  561.   point to the bottom left. If the image format is EPIC, the header is updated
  562.   appropriately.
  563.  
  564. Colour to RGB:
  565. --------------
  566.  
  567.   This process allows:
  568.      * a 24bit colour image to be created from three 8bit greyscale images
  569.        making up the red, green and blue components.
  570.      * three 8bit greyscale images of the red, green and blue components of
  571.        a 24bit image to be created.
  572.  
  573.   8bit greyscale to 24bit colour:
  574.      When selecting the 'Colour to RGB' option from an 8bit greyscale image the
  575.      Combine Red, Green and Blue into Colour dialogue is displayed.
  576.      The image banks to be used for the three colour components are selected
  577.      using the pop-up menus in the Source group. These menus display images
  578.      which match the size of the image that the dialogue was opened from.
  579.      The R, G and B buttons on the bottom left allow the different components
  580.      of the colour image to be deselected if not required.
  581.      The destination image is selected using the radio icons in the Destination
  582.      group.
  583.      Clicking on the Combine button will produce the 24bit colour image.
  584.  
  585. Convert 16bit to 8bit Grey:
  586. ---------------------------
  587.  
  588.    This process allows a 16bit greylevel image to be converted into an 8bit
  589.    image using the full 256 levels available.
  590.  
  591.    Two different mappings are available:
  592.       * Linear full range mapping
  593.           This maps the range of greys used in the source image linearly to
  594.           the full 256 level range of the destination
  595.  
  596.       * Logarithmic radar image mapping
  597.           This maps the range of greys in the source image using the
  598.           logarithmic function:
  599.                                                     (sourcevalue - minvalue)
  600.              destinationvalue = 255 + 106.25 * log10(----------------------)
  601.                                                     (       maxvalue       )
  602.  
  603.           This is useful for radar height images to groundlevel detail is not
  604.           lost by high mountain peaks.
  605.  
  606. Graphs
  607. ======
  608.  
  609. The "Greylevel Histogram" graph shows the number of pixels using each
  610. greylevel in the source image.
  611.  
  612. The "Cumulative Histogram" graph shows the total population of pixels in the
  613. source image at and below the grey level shown on the x axis. Thus if the
  614. greylevels are linearly allocated (ie. there is an equal number of pixels
  615. having each greylevel) then the graph is a straight line between the bottom
  616. left and top right.
  617.  
  618. The greylevel and height of the currently selected bar is shown on the bottom
  619. of the graph. The selected bar is shown in blue instead of the normal red.
  620.  
  621. Clicking on a part of the graph updates the greylevel and bar height display
  622. to the bar under the pointer.
  623.  
  624. The up and down arrows can be used to move the currently selected bar and
  625. pressing the SHIFT key when clicking on the up or down arrow makes the
  626. greylevel move faster.
  627.  
  628. Pressing the menu mouse button over the graph displays a menu that allows the
  629. graph data to be saved as a CSV (Comma Separated Variables) file and the size
  630. of the graph to be changed.
  631.  
  632. The 'Ignore 0' and 'Ignore 255' options when selected cause these bars to be
  633. ignored when calculating the scale for the vertical axis on the graph.
  634. Thus if the image predominantly contains black (colour 0) pixels for example
  635. then there would be a large bar at 0 on the left of the graph and the other
  636. bars would be very small making detail hard to see. Selecting 'Ignore 0' in
  637. this case would expand the height of the small bars allowing the detail to be
  638. seen.
  639.  
  640. Image flipper:
  641. ==============
  642.  
  643. This allows the user to compare image banks by 'flipping' between them. Over
  644. each 'source' icon click the Menu button and select the image bank you wish
  645. to compare with. All 12 image banks may be used. Clicking Adjust over one of
  646. these 'source' icons will delete it from the image flipper.
  647.  
  648. If one of the images is of a different size, the 'Equalise size to' option
  649. should be chosen if you wish to compare them accurately.
  650.  
  651. When you are ready to compare you can either click Select over the 'source'
  652. icon, or use Select and Adjust (or left/right arrow keys) to flip forward and
  653. backward through the selected images.
  654.  
  655. ********************************************************************************
  656.  
  657. Managing Filters:
  658. ~~~~~~~~~~~~~~~~~
  659.  
  660. Widget 5 holds a set of convolution filters in memory that can be accessed by
  661. the pre-defined filter menu in the Convolution Process window. The filters
  662. are referenced by size (ie. the number of rows and columns in the matrix) and
  663. filter name. The filter menu only shows the filters for the selected matrix
  664. size, or "None Found" if none are defined for that particular size.
  665.  
  666. When Widget 5 starts up it scans all the files in the default filters directory
  667. and loads up the filters that are present in the files to be shown in the menu.
  668. The location of this directory, which is by default, !Widget5.Filters, is setup
  669. with the system variable "<Widget5Filters$Dir>" in !Widget5.!Run. To add filters
  670. so that they are loaded on startup, simply place the files in the Filters
  671. directory (the !Widget5 application directory can be opened by double clicking
  672. on the filter icon with the SHIFT key pressed). If you want to place the
  673. directory somewhere else then just edit the !Widget5.!Run file with a text
  674. editor such as !Edit.
  675.  
  676. By dragging a filter file to the Convolution Process window the first filter in
  677. the file is used to set the values of the matrix and anchor point. This allows
  678. a library of filters to be built up and selected easily.
  679.  
  680. By dragging a filter file to the Widget 5 iconbar icon, all the filters in the
  681. file are loaded up into memory to appear on the filter menu.
  682.  
  683. When the "Save" button in the Convolution Process window is clicked on, a copy
  684. of the filter matrix and anchor point coordinate is taken and the
  685. "Save Convolution Filter As" dialogue is displayed.
  686.  
  687. The name with which the filter appears in the menu and is reference by must be
  688. entered in the "Filter Name" icon.
  689.  
  690. This window allows the convolution filter to be saved to a filter file by either
  691. dragging the filter file icon to a filter window or by typing in the full
  692. pathname for the file and clicking on "Save". As this overwrites a file if it
  693. is already present, Widget 5 prompts for conformation if a file will be
  694. overwritten.
  695.  
  696. If "Add To Current" is selected then the filter is added to the end of a filter
  697. file already on disc rather than replacing it. This way, more than one filter
  698. can be added to a particular file.
  699.  
  700. If "Add To Memory" is clicked on then the filter is added to the list of filters
  701. stored in memory and so will appear in the filter menu. This does not mean,
  702. however, that the filter will be present the next time Widget 5 is loaded.
  703.  
  704. If "Save To Default" is clicked on then the filter is added to the default
  705. filter file. This is a file in the default filters directory that holds the
  706. default filters. Thus by clicking on this button, the filter will be loaded next
  707. time Widget 5 starts. The filename of this file is also setup in the
  708. !Widget5.!Run file with the system variable "<Widget5$FilterDefault>". The
  709. default is !Widget5.Filter.Default.
  710.  
  711. As the filters are referenced by size and name, two filters with the same matrix
  712. size and name cannot be present in memory at the same time. For this reason,
  713. an attempt to do this by either loading a filter file or adding a filter to
  714. memory using the "Save Convolution Filter As" window will result in an error
  715. message being displayed showing the name and size (and the filename of the file
  716. holding the file where applicable) of the duplicate. For this reason an error
  717. is also displayed if an attempt is made to add a duplicate filter to a filter
  718. file.
  719.  
  720. ********************************************************************************
  721.  
  722. Filter File Format:
  723. ~~~~~~~~~~~~~~~~~~~
  724.  
  725. Convolution filters are stored in text files so that they can be easily edited
  726. and created manually.
  727.  
  728. A filter definition in the file consists of a block of lines without any blank
  729. lines between the lines for a particular filter. Blank lines are allowed between
  730. different filters.
  731.  
  732. Numbers in a line are separated by commas (,).
  733.  
  734. Leading spaces, and spaces between the numbers and the separating commas are
  735. ignored.
  736.  
  737. The first line of the block contains the name of the filter.
  738.  
  739. The second line contains the size of the filter as "rows,columns".
  740.  
  741. The third line contains the anchor point coordinates in the form "row,column".
  742.  
  743. The subsequent lines contain the matrix values, one line for each row in the
  744. matrix.
  745.  
  746. eg.
  747.  
  748. Smooth
  749. 0,0
  750. 3,3
  751. 0,1,0
  752. 1,1,1
  753. 0,1,0
  754.  
  755. Defines a 3x3 matrix called "Smooth" with an anchor point of 0,0 and a matrix,
  756. [ 0  1  0 ]
  757. [ 1  1  1 ]
  758. [ 0  1  0 ] 
  759.  
  760. ********************************************************************************
  761.  
  762. Drawing Masks:
  763. ~~~~~~~~~~~~~~
  764.  
  765. When a mask has been added to an image bank, the mask tools window is displayed,
  766. giving access to tools that allow the shape and position of the mask to be
  767. defined and the points saved as a text file for later use.
  768.  
  769. Dragging a text file containing a list of points to the mask tools window, loads
  770. the points in as a new mask shape.
  771.  
  772. The mask outline is shown as a red line over the image. The points on this shape
  773. are marked by either green squares or yellow triangles to indicate selected
  774. points.
  775.  
  776. Add Point tool
  777. The first tool button on the left allows points to be added to the mask shape
  778. by clicking on the image with Select at the required position and is added on
  779. the shape between the two selected points. The currently selected points can
  780. be changed by clicking on the green squares.
  781.  
  782. Move Point tool
  783. The next button allows points to be moved. This can be done by either dragging
  784. a point with the mouse to the required position or by using the arrow buttons
  785. on the tool window to move the selected point one pixel at a time. The
  786. coordinates of the selected point are shown in the tool bar together with the
  787. greylevel of the pixel under the point. These values are updated as the point
  788. is dragged or moved using the arrows. If the SHIFT key is pressed at the same
  789. time as the arrow icons then the point moves faster.
  790.  
  791. Delete Point tool
  792. The next button allows points to be deleted from the mask shape by clicking on
  793. the relevant green squares to remove that point. Points can no be deleted
  794. when only two are left otherwise there is no shape!
  795.  
  796. Filled Shape tool
  797. The next button causes the area inside the mask shape to be filled in yellow.
  798. This allows the shape of the masked area to be seen clearly.
  799.  
  800. Memory Display
  801. Next along the line at the bottom is the amount of memory that the mask uses.
  802. This memory is freed when the mask is discarded.
  803.  
  804. Copy Mask
  805. To the right of the memory display is a pop-up menu button that allows the
  806. shapes of masks present on other image banks to be copied over. If no other
  807. images have masks then the menu says "No masks".
  808.  
  809. Save Mask
  810. The next button displays a save box allowing the mask points to be saved as a
  811. text file. This allows masks to be stored and used later by dragging them from
  812. the Filer window to the mask tools window.
  813.  
  814. Discard Mask
  815. The last button removes the mask from the image bank and frees the memory that
  816. it takes. Don't use this if you still want to use the shape as once it is gone,
  817. it cannot be retrieved unless it was saved as a text file.
  818.  
  819. ********************************************************************************
  820.  
  821. Toolbar:
  822. ~~~~~~~~
  823. Most of these icons are self explanatory (or at least I hope so :-)
  824. A point worth noting, however is that the histogram button performs two
  825. actions, the a Select mouse click displays the Greylevel Histogram and an Adjust
  826. click the Cumulative Histogram.
  827. The info button also performs two actions, Select shows the "Image Info" window
  828. and Adjust the "Statistical Info" window.
  829.  
  830. ********************************************************************************
  831.  
  832. Configuration Window:
  833. ~~~~~~~~~~~~~~~~~~~~~~
  834.  
  835. The configuration window can be opened by selecting the "Configure..." entry
  836. from the iconbar menu. The window allows program-wide options to be setup
  837. and the configuration saved so that it is used when the program is next loaded.
  838.  
  839. "Process Destination"
  840. =====================
  841.  
  842. This affect the way the destination banks are picked for the processes.
  843.  
  844. "Only use free banks" only allows you to pick banks that are unused for the
  845. destination image.
  846.  
  847. "Use free or same size banks" allows you to pick banks that are either free
  848. or contain an image that is the same size as the source.
  849.  
  850. "Graph Size"
  851. ============
  852.  
  853. This determines the size of the graphs that are drawn. The large size is ideal
  854. for 17" monitors.
  855.  
  856. "Draw action"
  857. =============
  858.  
  859. These determine the default selection of the draw action options in the
  860. greylevel edit process window when it is displayed.
  861.  
  862. "Update"
  863. ========
  864.  
  865. This determines the default selection of the "Real-time" option when the
  866. process windows that use it are displayed.
  867.  
  868. "Image Memory"
  869. ==============
  870.  
  871. This determines whether the images will be stored in a dynamic area or in the
  872. application's normal wimpslot. The location can only be changed when no images
  873. are present in memory and dynamic areas can only be selected on machines that
  874. support it.
  875.  
  876. "Image Titles"
  877. ==============
  878.  
  879. Turning "Show process name" on will place the name of the process and source
  880. image bank(s) onto the title of an image window created by a process.
  881.  
  882. "Squash Sprites"
  883. ================
  884.  
  885. Turning "Save squashed" on selects the option of saving the sprite files as
  886. squashed files by default when the save dialogue is displayed.
  887.  
  888. "IO buffer size" is the amount of memory claimed when loading or saving a
  889. squashed file to be used to buffer the reads and writes to and from the disc.
  890. A value of 0 is not allowed in this field.
  891. A small value slows down compression/decompression.
  892.  
  893. "Double Click Loads"
  894. ====================
  895.  
  896. These options select which files Widget 5 will load when their icon is double
  897. clicked upon in the filer window.
  898.  
  899. When selected that particular file will be loaded on double click unless another
  900. program that loads it has been loaded previous to Widget 5 (like !Paint for
  901. sprites) and is shown to the right of Widget 5's icon on the icon bar.
  902.  
  903.  
  904. Clicking on "Change" applies the changes made and closes the window.
  905.  
  906. Clicking on "Cancel" forgets the changes made and closes the window.
  907.  
  908. Clicking on "Save" applies the changes made and saves the new configuration so
  909. that it is used the next time the program is loaded.
  910.  
  911. "Toolbar"
  912. =========
  913.  
  914. The "Show" options selects whether the toolbar is present on the side of the
  915. image bank windows. If you don't like toolbars then you can turn it off.
  916.  
  917. "Image Headers"
  918. ===============
  919.  
  920. 'View header on loading' will automatically display EPIC headers when the
  921. image has been loaded into Widget5. The 'Maximise window' will give the full
  922. extent of available header information.
  923.  
  924. "Multitasking/threading"
  925. ========================
  926.  
  927. An extremely useful feature of Widget5 is the ability to either single-task
  928. (for speed) or multitask (to continue working) processes. Even on a 257MHz
  929. StrongARM, a single-tasked 5x5 median filter on a 2000x1200 image takes ~50
  930. seconds. By altering Widget5 to use multitasking processes, and changing the
  931. time slices, you can continue doing other things with very little time
  932. disadvantage.
  933.  
  934. 'Time slice interval' - measured in centi-seconds (hundredths of a second),
  935. this interval is the period of time that Widget5 gives the user and other tasks
  936. to continue working. For example, 25cs is a quarter of a second.
  937.  
  938. 'Time slice length' - also measured in centi-seconds, this is the length of time
  939. Widget5 gets to do its processing.
  940.  
  941. These two numbers do not have to equal 100 (1 second). For example, you can
  942. still give Widget5 120cs and the user 50cs.
  943.  
  944. When you choose a multitasking Widget5, you have the option of 'Show progress
  945. bar'. In use, this is a green line in the top left of an image window that
  946. shows how the process is progressing. Immediately to the left of this green bar
  947. will be a 'Stop' box. Clicking on this red box will abort the process.
  948.  
  949. 'Real time update' allows you to watch the progress of Widget5 as it proceeds
  950. with image processing. 'Update at end' is the opposite of this and draws the
  951. image after the processing has completed.
  952.  
  953. There appears to be very little, if any, time disadvantage in a multitasking,
  954. real time image update.
  955.  
  956. "16bit screen display"
  957. ======================
  958.  
  959. This allows the default image display method for 16bit images to be selected.
  960.  
  961. "Image Loading"
  962. ===============
  963.  
  964. Enabling the 'Autoplace image' option will cause a loaded image to be placed
  965. in the next available image bank automatically.
  966. When this option is off, the 'Place Loaded Image' window is displayed.
  967.  
  968. ********************************************************************************
  969.  
  970. Image Information:
  971. ~~~~~~~~~~~~~~~~~~
  972.  
  973. The two image information windows provide general and statistical information
  974. about a particular image. When these windows are shown statically, then the
  975. contents are updated as any changes are being made.
  976. These window can be displayed by either clicking on the questionmark button
  977. on the toolbar with Select or Adjust or by using the image window menu.
  978.  
  979. The "Info area" buttons on the bottom of the window allow the image mask to be
  980. used to define an area where the value are calculated from rather then the whole
  981. image. These work in a similar way two those on the process windows and are
  982. greyed out when no mask is present on that particular image.
  983.  
  984. The "Ignore" buttons on the very bottom of the window allow either or both
  985. the 0 and 255 greylevel pixels to be ignored when calculating the information
  986. displayed. These can be used to discard for example the black (colour 0) pixels
  987. in an image when the image background is completely black and this large number
  988. of pixels swamps the detail from the subject area of the image.
  989.  
  990. A third 'Info' option is 'File'. By clicking on 'Edit' when the header type 
  991. is EPIC, commonly used header information is shown such as the map projection¹,
  992. satellite platform, sensor, and band, sun elevation and azimuth, scene centre
  993. coordinates, and the sampling size. These data are required for advanced
  994. processing, and possibly for use in other packages that loose the EPIC header
  995. (eg. when the image is saved out in a non-EPIC format).
  996.  
  997. The fourth 'Info' option is 'Loading' which displays statistical information
  998. from the process of loading the image file. This varies depending on the type
  999. of file but normally includes timings from the stages during loading and a
  1000. report of the rate at which the data was read.
  1001.  
  1002. ¹ Widget5 is unable to use this information to date.
  1003.  
  1004. ********************************************************************************
  1005.  
  1006. Security:
  1007. ~~~~~~~~~
  1008.  
  1009. If anything should go wrong with Widget5 and the program has to exit due to an
  1010. unrecoverable internal error, the option is provided of saving any loaded images
  1011. before the program quits.
  1012. Clicking on 'OK' when the error message is displayed saves the images by the
  1013. image bank number in a directory 'Widget5' in the Scrap Directory (in the
  1014. !Scrap application).
  1015.  
  1016. ********************************************************************************
  1017.  
  1018. Credits:
  1019. ~~~~~~~~
  1020.  
  1021. Many thanks must go to Jeremy Cook whose suggestions, encouragement, toolbar 
  1022. sprites, and assistance have made Widget 5 what it is today.
  1023.  
  1024. ********************************************************************************
  1025.  
  1026. The Future:
  1027. ~~~~~~~~~~~
  1028.  
  1029. Widget 5 is not finished! Many improvements are planned although they won't be
  1030. implemented for a while which is why this release has been made.
  1031.  
  1032. To wet your appetites, here is a selection from my "To Do" list:
  1033.  
  1034. 1.  Image manipulation formula interpreter.
  1035. 2.  Topographic normalisation (Lambertian model)
  1036. 3.  Aspect process
  1037. 4.  Slope process
  1038. 5.  Mathematical operators (+,-,*,/)
  1039. 6.  S.D. option in Focal Analysis menu
  1040. 7.  HSI - RGB conversion
  1041. 8.  Configurable toolbar
  1042. 9.  Fast Fourier Transform
  1043. 10. Combine three images (=24bpp sprite)
  1044. 11. Provide read ahead buffers for file operations (eg. CD)
  1045. 12. Go back to previous scale
  1046. 13. Feature Space Image - scatterplot of two exact sized images
  1047. 14. Column/row replacement by means of neighbours
  1048. 15. Allow a drawfile of polygons to be overlayed as mask
  1049. 16. Log file of actions
  1050. 17. L.A.C.E. in focal analysis process
  1051. 18. Transformation process (eg. rotate, mirror, skew)
  1052. 19. Optimised ARM code processing routines (currently just C)
  1053.  
  1054. Any suggestions will be gladly accepted, as without suggestions it cannot get
  1055. better.
  1056.  
  1057. ********************************************************************************
  1058.  
  1059. Contacting the author:
  1060. ~~~~~~~~~~~~~~~~~~~~~~
  1061.  
  1062. I, Andrew Sellors, can be contacted either at
  1063.    57 Boundaries Road
  1064.    Feltham
  1065.    Middlesex
  1066.    TW13 5DR
  1067.    England
  1068.  
  1069. Or via Internet email at
  1070.    asellors@orac2.demon.co.uk
  1071.    
  1072. New versions of my software may be available from
  1073.    http://www.orac2.demon.co.uk
  1074.  
  1075. Any feedback from users (bugs reports, requests for new features, praise,
  1076. money etc.) is gladly received.
  1077.  
  1078.