V1.63 Release Notes (19 November 2002) 1) Thanks to Norbert Vischer, worked around a bug that prevented NIH Image from running correctly on Mac OS 9.2.2 and in the Classic environment of OS X 10.2. V1.62 Release Notes (13 April 1999) 1) A bug was fixed that caused the title bar to switch to color when saving a stack in PICS format and the monitor was not set to 256 colors. 2) A bug was fixed that could cause some plug-ins to fail on Power Macs. 3) The maximum number of slices per stack was increased to 5000 (PPC only). 4) The AverageSlices macro routine now accepts two optional arguments that specify the starting slice and number of slices to be averaged. Two new macros in the "Movie Making" macro file ('Average of Stack' and 'Running Average of Stack') use this new capability. 5) The AutoOutline macro routine no longer beeps when it is unable to create an ROI. 6) The maximum number of image windows was increased from 250 to 1000. 7) The maximum number of text windows was increased from 10 to 20. 8) Scion frame grabbers should now work correctly on G3 Macs. 9) Capturing works with more QuickTime digitizers. It is no longer necessary to turn of virtual memory on the 7500/7600 to capture using the built-in digitizer. The built-in G3 digitizer works for single frame capture if the monitor is set to 256 colors. 10) A bug was fixed that sometimes caused the calculated centers of lines and rectangles to be offset by a half pixel. 11) Fixed a missing "System" LUT problem on blue and white G3 Macs by adding the a clut id=8 resource to the NIH Image application. V1.61 Release Notes (20-Dec-96) 1) 24-bit color TIFF files in planar format can now be opened. 2) Bugs were fixed that caused Saving/Exporting of LUTs, 8-bit to RGB conversions, display of RGB values in Info, and macro LUT updating to fail if the monitor was not set to 256 colors. 3) New images less than 16 pixels in height can now be created. 4) Balloon help in the Preferences dialog box was fixed. 5) The PutPixel macro routine is now about five times faster. 6) Bugs were fixed that could cause NIH Image to crash when opening PICS files. 7) NIH image now opens and saves QuickTime movies thanks to source code contributed by Eric Shelden (shelden@umich.edu). The Open command will place images from a QuickTime movie into a new stack. Note, however, that the current LUT is always used. Therefore, before opening the movie, you must switch to the Grayscale LUT when opening a grayscale movie and to the System LUT when opening a color movie. Stacks can be saved in QuickTime format using the Save As command and selecting the radio button labeled "QuickTime". A dialog box allows you to select the compression scheme and image quality level. 8) The Get('parameter') macro function was extended to return the following parameters: Get('Offset') - returns the current frame grabber offset Get('Gain') - returns the current frame grabber gain Get('ScreenWidth') - returns the screen width in pixels Get('ScreenHeight') - returns the screen height in pixels 9) The 'exit' macro command now accepts an optional string argument and passes it automatically to 'PutMessage'. The frequent sequence if error then begin beep; PutMessage('reason ...'); exit; end; can now be shortened to if error then exit('reason ...'); 10) The DICOM file import routine was improved. 11) Commands were added to the Binary submenu for generating Euclidian distance maps, ultimate eroded points, and for doing watershed segmentation. The "Distance Map" command replaces each foreground (black) pixel in a binary image with a gray value equal to that pixel's distance from the nearest background (white) pixel. To reduce rounding errors, intermediate EDM values are stored as 16-bit values. Macros can generate EDMs using the "binary('edm')" macro command. The "Ultimate Points" command generates the ultimate eroded points (UEPs) of the EDM. It requires a binary image as input. The UEPs represent the centers of particles that would be separated by segmentation. The UEP's gray value is equal to the radius of the inscribed circle of the corresponding particle. Note that the EDM is automatically smoothed when doing watershed segmentation but not when generating UEPs. You can force EDM smoothing, however, by holding down the option key while selecting the "Ultimate Points" command, or be putting "SetOption;" in front of the binary('ultimate points') macro command. Smoothing the EDM results in fewer noise induced errors but causes the gray values of the UEPs to be slightly lower, i.e. it slightly reduces the estimated particle sizes. This command requires free ram equal to 2-5 times the image size. Use the "binary('ultimate points')" command to generate UEPs in a macro. The "Watershed" command separates touching convex particles. It requires free ram equal to 2-5 times the image size. Hold down the option key to disable EDM smoothing. Watershed segmentation is available from macros using the "binary('watershed')" macro command. 12) Support was added for the PCI version of the Scion AG-5. V1.60 Release Notes (20-Mar-96) 1) The QuickTime video digitizer settings can now be saved using Record Preferences. 2) DICOM and ACR/NEMA files with headers larger than 4096 bytes can now be imported. 3) A bug was fixed that sometimes caused 'Analyze Particles' to fail if the monitor was not in 256 color mode. 4) A bug was fixed that caused the wand tool to fail when clicking inside an object touching the right edge of the image. 5) If the mouse is over an active frequency domain (FFT) window, its location is now displayed in polar coordinates. The angle is expressed in degrees (ˇ), while the radius is expressed in either pixels per cycle (p/c) or, if a spatial scale calibration has been made using Set Scale, in [units] per cycle (e.g. mm/c). 6) Capturing of images from QuickTime compatible digitizers now works correctly when the grayscale map has been modified or when the number of reserved LUT entries is non-zero. 7) A bug was fixed that caused the 'Time Stamp' option of the 'Make Movie' command' to fail when the monitor was not set to 256 colors. 8) Support was added for the PCI versions of the Scion LG-3 and VG-5 frame grabber cards. Both cards can capture 30 full size frames per second to system RAM. 9) A checkbox for selecting "S-Video" input was added to the QuickTime video digitizer version of the Video Control dialog box. 10) Support for user-defined functions was added to the macro language. 11) A function ('GetPath') was added to the macro language for fetching various file paths. It has three variations: 1) GetPath('window') - returns the folder path (e.g. 'HD500:Images:') of the current current image or text window. Returns an empty string if no window is open or the current window has no file associated it. 2) GetPath('startup') - returns the path of the folder from which NIH Image was started. 3) GetPath('pref') - returns the path of the Preferences folder in the System Folder. The 'File Paths Demo' macro in 'Input/Output Macros' demonstrates how to use these functions. 12) A command was added to the macro language for getting information about files. It has the form: GetFileInfo(FullPath, FileType, FileSize) where 'FullPath' is a string containing a path name (e.g. 'HD500:Images:image01'). GetFileInfo returns the file type ('TIFF', 'PICT', 'TEXT' etc) in the string variable 'FileType' and the file size in bytes in the integer variable 'FileSize'. If the file isn't found, 'FileType' is set to an empty string and 'FileSize' is set to -1. See the 'File Paths Demo' macro in 'Input/Output Macros' for an example of how to use GetFileInfo. 13) A macro command was added for selecting tools from the tool palette It has the form "SelecTool(tool)", where tool is one of: 'magnifier', 'grabber', 'pencil', 'eraser', 'brush', 'drawline', 'paintbucket', 'profile', 'wand', 'angletool', 'rectangle', 'oval', 'polygon', 'freehand', 'straightline', 'freeline', 'segmentline', 'lut', 'text', 'spraycan', 'picker' or 'crosshair'. 14) A "Desktop Friendly" option was added to Preferences that eliminates annoying desktop color changes when the monitor is set to 256 colors but reduces the number of colors available for displaying images. 15) The PPC version of NIH Image now runs up to 12% faster due to better code optimization in the Metrowerks Codewarrior 8 PPC compiler. 16) A bug was fixed that caused the Make Montage command to draw a border around the entire composite image when the "Borders" option was not checked. This was a problem when creating movie strips for use with the Rotator Java applet. V1.59 Release Notes 1) The MouseDown macro routine, which broke in V1.58, is working again. 2) A bug was fixed in the PowerPC native version of NIH Image that caused the four character creator code for exported text files (set in Preferences) to be saved incorrectly. 3) The "Scale Image Arithmetic" checkbox was removed from the Preferences dialog box since it duplicates the "Scale Math" checkbox in the Paste Control dialog box. 4) A bug was fixed in the Binary/Skeletonize command that caused some particles to reduce to nothing. 5) A bug was fixed that would sometimes cause surface plots to be drawn incorrectly when the Grayscale/Color option was selected. 6) The "Calibrate" option, used to recalculate the approximate original 16 bit values of an imported 16-bit images, is now disabled when a 16-bit stack is imported and "Fixed Scale" is not checked. In previous versions of NIH Image, the recalculated intensity measurements were only correct for the first slice. 7) The trigger on first frame only feature of the Make Movie command now works correctly with the Data Translation QuickCapture card. 8) The MoveWindow macro command now works without an image window being open. 9) A bug was fixed that could cause NIH Image to crash if, in a macro, the ShowHistogram command followed a StartDigitizing command. 10) A new FFT submenu was added to the Process menu to support frequency domain display, editing and processing. The FFT command in the FFT submenu computes the Fourier transform and displays the power spectrum. It requires a square, power of two size image or selection. It uses a real, 2D Fast Hartley Transform (FHT) routine contributed by Arlo Reeves, the author of ImageFFT. For more information about ImageFFT and the FHT, see the ImageFFT documentation, example images, and Arlo's thesis, available from the nih-image_spinoffs directory on zippy.nimh.nih.gov. Note that these routines run very slowly on 68000 Macs. You can filter or mask spots on the transformed (frequency domain) image and do an inverse FFT to produce an image which only contains the frequencies selected or which suppresses the frequencies selected. Use NIH Image's editing and selections tools to draw black or white areas that mask portions of the transformed image. Black areas (pixel value=255) will pass the corresponding frequencies and white areas (pixel value=0) will filter out the corresponding frequencies. It is not, however, possible to both pass and filter during the same inverse transform. The "fft_example.bin" test image in the images directory on zippy provides an example of FFT editing and filtering. The transformed frequency domain image is stored in a 32-bit real buffer attached to the window displaying the power spectrum. The name in the window's title bar is enclosed in angle brackets (e.g., ">") to indicate that the window includes a real image. Note that frequency domain images require 5 times as much memory as normal 8-bit images - 4 bytes/pixel for the real image and 1 byte/pixel for the power spectrum image. The only commands in NIH Image that currently recognize real images are "FFT", "Inverse FFT", "Redisplay Power Spectrum" and "Image Math" All other commands "see" only the 8-bit power spectrum. The "Redisplay Power Spectrum" command recomputes the power spectrum from the real frequency domain image. It allows you to start over if you mess up while editing the power spectrum display. The "Swap Quadrants" command swaps quadrants 1 and 3 and quadrants 2 and 4 of the active image. It requires an 8-bit image whose height and width are equal and a power of two. Quadrant swapping is performed automatically every time a power spectrum is computed. In the normal, un-swapped, state, the power spectrumĂ•s central peak is distributed among the four corners of the image. While this is the format used in all computations, it doesnĂ•t correspond to natureĂ•s FFT analog, the diffraction pattern. This command is useful because cross and auto-correlation operations (the "cMul" operator in Image Math) result in inherently un- swapped space domain images, yet like power spectra, correlation functions are often displayed in quadrant swapped format. The Swap Quadrants command lets you choose the format you desire. The Image Math command was expanded to support arithmetic operations on real images. It supports multiplication (convolution), division (deconvolution) and conjugate multiplication (crosscorrelation and autocorrelation) of frequency domain images. See the ImageFFT documentation and "The Image Processing Handbook" by John Russ for examples of how these operations are used to analyze images. There are macros in the "FFT Macros" file that do autocorrelation. The ImageMath macro command now outputs a real image when it sees the keyword "real". For example, the command ImageMath('mul (real)', in1, in2, 1, 0, 'result') generates a real image that is the product of the two input images. It also recognizes the new operator keyword 'cmul' for doing conjugate multiplication of frequency domain images. A macro command was added to support various FFT operations. It currently has seven variations: 1) FFT('foreward') - Generates a Fourier transform of a square, power of two size image. The image can be either 8-bit integer or real. For real images, the transformation is done in-place. 2) FFT('inverse') - Does an in-place inverse transform with black or white reqions in the 8-bit power spectrum used as a mask to generate a filter. This macro command duplicates the behavior of the "Inverse FFT" menu command. 3) FFT('inverse with mask') - Same as FFT('inverse'). 4) FFT('inverse with filter') - Uses the 8-bit grayscale component of the FFT window as a filter which the frequency domain image is multiplied by prior to retransformation. In this case, the power spectrum must be replaced by a grayscale filter before retransformation. The "High Pass" and "Low Pass" macros in "FFT Macros" use this form of the FFT command. 5) FFT('inverse without filter') - No masking or filtering is done before retransformation. 6) FFT('Display Power Spectrum') - Recomputes the power spectrum. 7) FFT('Swap Quadrants') - Swaps quadrants 1 and 3 and quadrants 2 and 4 of the current 8-bit image. 11) Support was added for QuickTime compatible video digitizers such as those built into "AV" Macs and the PowerMac7500/8500. Third party digitizers like the QuickCam from Connectix are also supported. Most NIH Image video capture functions, such as averaging/integration, movie capture, background subtraction, and "live" paste are supported. Use the Video control dialog box to specify the capture mode (grayscale, 8-bit color or 24-bit color) and video format (NTSC, PAL or SECAM). These options are currently not saved by "Record Preferences". Use the Capture Color command to grab 8-bit color images. If 24-bit color capture is enabled in Video Control, Capture Color will generate a 3-slice RGB stack which can be saved as a 24-bit TIFF file. The video digitizer support in NIH Image was developed with the help of Cyrus Daboo, the author of Plug-in Digitizer. 12) You can now startup NIH Image with customized settings by double- clicking on a copy of Image's preferences file ("Image Prefs"). In this case, Image will use the settings in the copy of the preferences file rather than ones stored in "Image Prefs" in the Preferences folder. Note that Record Preferences always record settings in the file "Image Prefs" in the Preferences folder. V1.58 Release Notes 1) A bug was fixed that sometimes caused Scale and Rotate to produce incorrect results when doing bilinear interpolation and the output image was wider than 2000 pixels. 2) Selections can now be copied from images larger than the Clipboard buffer as long as the selection is not larger than the Clipboard buffer. 3) It is no longer necessary to have an image window open to export measurements. 4) An optional third argument was added to the GetNumber() macro routine for specifying the the number of digits to the right of the decimal point in the default value. Use zero to display an integer default. 5) The "IndexedToRGB" macro command was added for converting 8-bit color images to RGB. 6) A bug was fixed in the macro interpreter that prevented array elements from being used as procedure parameters. 7) The Image Math command now accepts non-integer offsets when 'Calibrate' is selected. 8) The Binary/Outline command in the Process menu now assumes a pixel is a border pixel if any of its eight neighbors is white. Previous versions assumed a pixel was a border pixel if any of four neighboring pixels were white. 9) The DoOr, DoAnd, etc. macro commands now work correctly when the foreground color is not black (255). 10) The "Make Movie" command was enhanced. It now uses the Time Manager to provide better timing resolution. It supports video rate capture using the Scion LG-3's buffer memory. It uses a single dialog box to specify the number of frames and either the interval between frames or the sampling rate in frames per seconds. There is a time stamping option to display the elapsed time in the upper left hand corner of each frame. Triggering can be enabled for only the first frame or for every frame. There is an option to store captured frames in an existing stack instead of creating a new stack. 11) A "MakeMovie" macro command was added. It accepts three arguments. The first is a string containing some combination of "blind", "buffer", "time stamp", "existing", "trigger first", "trigger each", and "dialog". The second argument is the number of frames to capture, and the third is the interval between frames in seconds. The "Movie Making" macro file contains a sample macro that captures a movie and plots the frame to frame time intervals. It also contains a macro that uses the MakeMovie macro command to calculate the fastest average frame interval for each of 50 different frame sizes. 12) Two optional integer arguments were added to the "SetVideo" macro command. The first specifies the gain and the second the offset. 13) Image capture support was added for the Scion VG-5 frame grabber. 14) RGB stacks (and selections) are now saved as 24-bit TIFF files that can be opened by Photoshop. RGB stacks display "(Red)", "(Green)" and "(Blue)" in the title bar instead of "(1/3)", "(2/3)" and "(3/3)". RGB stacks are created by the "Capture Color", "Acquire", and "8-bit Color to RGB" commands. Use the "Stack Info" command to convert ordinary 3 slice stacks to RGB stacks. 14) RGB (24-bit) TIFF files now open faster. 15) The Options command in the Stacks menu was expanded and renamed "Stack Info". It can be used to set the stack type ("Volume", "Movie", "RGB Image" or "HSV Image"), slice spacing and frame interval. 16) The SetSaveAs macro command now accepts the argument 'RGB TIFF' for saving 3-slice stacks in RGB (24-bit) TIFF format. 17) The macro interpreter is now up to twice as fast. The "Slow Invert" macro in the "More Macros" macro file can be used to compare the speed of the interpreter on different Macs and different versions of NIH Image. 18) A new command, "Deselect", was added to the Edit menu for deleting the current selection. 19) The major and minor axis length and angle are now correctly calculated when the pixel aspect ration is not 1.0. 20) A bug was fixed in the Analyze Particles routine that caused particles to be incorrectly labeled if the the measurement counter was not reset. 21) The AnalyzeParticles macro command now accepts an optional string argument containing some combination of 'label', 'outline', 'ignore', 'include' and 'reset'. Any option not listed is disabled. Use "AnalyzeParticles('dialog')" to display the Analyze Particles dialog box using the existing settings. 22) The Add, Subtract, Multiply and Divide commands in the Arithmetic sub-menu now have a "Calibrate" option. If this option is selected, calibrated pixel values are used and the output image is calibrated using a linear calibration function. 23) AND, OR and XOR commands were added to the Arithmetic sub-menu. 24) A bug was fixed that could sometimes cause NIH Image to crash when switching between a text window and an image window. 25) A macro command, 'SetProjection', was added to initialize values used by the Project command: SetProjection('string', n) where n is integer and 'string' is one of the following: 'Initial Angle', 'Total Rotation', 'Rotation Angle Increment', 'Surface Opacity', 'Surface Depth-Cueing', 'Interior Depth-Cueing' {use SetDensitySlice to set the transparency bounds} SetProjection('string', b) where b is boolean (true or false) and 'string' is one of the following: 'Save Projections', 'Minimize Window Size' SetProjection('string') where 'string' is one of the following: 'X-Axis', 'Y-Axis', 'Z-Axis', 'Nearest Point', 'Brightest Point', 'Mean Value' The "Movie Making" macro file contains a sample macro demonstrating the use of SetProjection. The code and documentation for SetProjection were contributed by Norbert Vischer. 26) Analyze particles and the wand tool can now handle objects with perimeters up to twice as long. 27) Perimeters are now calculated using the algorithm used by versions of NIH Image prior to 1.53. This algorithm adds one to the perimeter for each edge pixel and the sqrt(2) for each corner pixel. It produces perimeters 2- 3% longer than the 3-point moving average algorithm used in V1.53-V1.57. 28) The SetPalette macro command now accepts an optional second integer argument that specifies the number (0-6) of reserved LUT entries. 29) A macro command, "GetHistogram", was added that updates the built- in histogram array based on a specified rectangular ROI. It has the form "GetHistogram(left, top, width, height)", where left, top, width, and height specify the ROI used to generate the histogram. GetHistogram is much faster than using MakeROI and Measure, particularly for small ROI's. 30) A macro function, "Get('parameter')", was added that returns the value of various NIH Image parameters. Get('FreeMem') returns the total amount of free memory, in bytes. Get('MaxBlock') returns the size (in bytes) of the largest free memory block. Get('MaxMeasurements') returns the value of "Max Measurements". Get('RoiType') returns a code that specifies the current ROI type, where: 0 = no ROI or no image, 1 = rectangle, 2 = ellipse, 3 = polygon, 4 = freehand, 5=traced, 6 = straight line, 7 = freehand line, and 8 = segmented line Get('UndoBufSize') returns the size (in bytes) of the Undo and Clipboard buffers. V1.57 Release Notes (23 Jan 1995) 1) A bug was fixed that caused the Project command in V1.56 to fail when attempting to do mean value projection. 2) A bug was fixed that caused the brush and eraser tools in V1.56 to be offset one pixel down and to the right. 3) A bug was fixed that caused the Register command in the V1.56 (PPC version only) to fail. 4) A bug was fixed in the SetThreshold() macro command that prevented macros that continually adjusted the threshold under keyboard or mouse control from working correctly. 5) The Undo macro command now works with Paste. 6) Max Particles in the Analyze Particles dialog box can now be set to a value greater than 999,999. 7) A bug was fixed that sometimes caused color TIFF files to be written with a corrupted color table if the monitor was not in 256 color mode. 8) NIH Image now opens most uncompressed 24-bit (RGB) TIFF files. Like the Acquire and Capture Color commands, the images are loaded into a 3- slice stack. 9) The DICOM import routine (new in V1.56) was improved. In addition to DICOM-3 images, it now reads many ACR/NEMA images. It now requires a DICOM dictionary to decode the DICOM or ACR/NEMA header. The dictionary is available from zippy.nimh.nih.gov, in the /pub/nih-image/documents directory. It must be located in the same folder as NIH Image or in the System folder. Hold the option key down to get a full dump of the DICOM header. Hold the shift key down to fix the 16-bit to 8-bit scaling when using the "Open All" option. 10) A bug was fixed that could sometimes cause NIH Image to crash on startup if sound was turned off in the Sound Control Panel. V1.56 Release Notes (20 Dec 1994) 1) A bug was fixed that caused the SurfacePlot macro command to fail when generating grayscale/color surface plots. 2) A bug was fixed that sometimes caused diagonal lines to appear when using the Revert to Saved command with odd-width TIFF files created by programs other than NIH Image. 3) A bug was fixed that caused images imported with "Invert" checked to be inverted by the Revert to Saved command. 4) A bug in the "Gel Plotting Macros" was fixed that could cause incorrect results if the foreground color was not black (255). 5) The Capture Frames shutter click sound that was missing in V1.55 is back again. 6) A new macro package ("Markup Macros") was developed that enables objects in an image to be outlined and labeled and the resulting graphics and text saved as a separate file. 7) The "Halftone Options" command was removed from the File menu and the "Custom Grayscale Halftoning" check box was removed from the Preferences dialog box. The custom halftoning dialog box is now accessed by holding down the option key while selecting the Page Setup command. 8) A bug was fixed that sometimes caused a crash when using the "Uncalibrated OD" option in the Calibrate command. 9) NIH was ported to the PowerPC using the Metrowerks PPC Pascal compiler. 10) A bug was fixed that caused the 'max' value returned by the GetPlotData macro routine to always be zero when all of the Y values where less than zero. 11) The spray can tool now works at slower speeds on faster macs. 12) Interactive editing of the Map (by holding the option key down) now works when the monitor is not in 256 color mode. 13) Images captured with with "Highlight Saturated Pixels" selected are now displayed correctly on monitors that are not in the 256 color mode. 14) Enhance Contrast now works correctly when the monitor is not in 256 color mode. 15) The SaveState and RestoreState macro routines now save and restore text attributes such as type face, size and style. 16) Extra header data are no longer appended to the end of stacks exported as raw data. 17) A bug was fixed in the OpenSerial macro routine that caused even parity to always be used if seven data bits was specified. 18) The angle in the file names of projections saved to disk now have leading spaces so the file names sort correctly by name. 19) "Trace Edges", renamed "Find Edges", now implements a 3x3 Sobel edge detection operation. 20) The Shadow command now allows the user to specify the direction of the simulated light source. The Shadow macro command was modified to accept an optional string argument in the form Shadow(direction), where direction is equal to 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W' or 'NW'. 21) A measurement bug was fixed that caused the standard deviation to be set to zero whenever the mean was less than zero. 22) A bug was fixed that caused the AutoOutline macro command to fail to save the XY coordinates if the wand tool was not selected. 23) The SetScale macro command now accepts an optional third argument that sets the pixel aspect ratio. Similarly, GetScale returns the pixel aspect ratio in an optional third argument. 24) The New and Duplicate commands no longer force the width of newly created images to be even. 25) The result argument in the ImageMath macro command can now be either a string or a pid number. If it's a string, a window with that name is created to store the result, otherwise the result is stored in the image specified by the pid number. Note that the result pid number can be the same as either of the source pid numbers. 26) Support was added for the Scion AG-5 frame grabber. All capabilities of the Scion LG-3 are available with the AG-5 except for digital and analog I/O. The Average Frames command supports the AG-5's ability to do video rate averaging and integration. 27) A check box ("Integrate On-chip") was added to the Average Frames dialog box. This option allows the Scion LG-3 to control on-chip integration using the Cohu 4910 series cameras and modified versions of the Dage-MTI CCD72. When this box is checked, the camera will integrate on-chip for the specified number of frames; the LG-3 will then capture the integrated frame. On-chip integration requires a special cable available from Scion for connecting the integration input of the camera to the LG-3. The string "on-chip" was added to the AverageFrames macro command. 28) Macros (in the "Video" macro file) were developed to continuously integrate and display frames either off-chip, using the Scion AG-5, or on- clip, using the Scion LG-3 and a Coho 4910 series camera. Instructions for using these macro are in the macro file. 29) Density and spatial calibration defined by the Calibrate and Set Scale commands is now "stickier". Before, if you calibated an image and then closed that image, any new images created using the New command would be uncalibrated. Now, in the same situation, the new images will be calibrated. 30) A bug was fixed that caused inverted profile plots to be displayed incorrectly. 31) A macro command was added for specifying what gets saved by the SaveAs command. It has the form SetSaveAs('mode'), where 'mode' is one of: 'TIFF', 'PICT', 'MacPaint', 'PICS', 'LUT' or 'Outline'. 32) The Image Math command now ignores selections. The arithmetic operation is performed in the upper left corner of each image using the largest common rectangle. 33) The settings file ("Image Prefs") is now saved in the Preferences folder. 34) Folder paths such as 'hd400:textfiles:text' can now be used with the SaveAs command when saving the contents of text windows. 35) The name of the macro routine for calling filter plug-ins was changed from 'Filter' to 'CallFilter'. 36) A new macro routine was added for using built-in filters. It has the form "Filter(name)", where name is one of the following: 'smooth', 'smooth more', 'sharpen', 'sharpen more', 'find edges' (or 'sobel'), 'median', 'max', 'min' or 'dither'. 37) A new macro was added for doing density calibration. It has the form "Calibrate('fit', 'unit', m1, k1, m2, k2, ...)", where 'fit' is one of 'straight', 'poly2', 'poly3', 'poly4', 'exp', 'power', 'log', 'rodbard', 'uncalibrated' or 'uncalibrated od', 'unit' is the unit of measurement, m1, m2, etc. are the measured values and k1, k2, etc. are the known values. For example, "Calibrate('Straight', 'Invert', 0, 255, 255, 0)" sets up a simple inverting function. Use "Calibrate('Uncalibrated OD')" to enable uncalibrated OD and "Calibrate('Uncalibrated')" to disable calibration. 38) The Make Montage command now optionally draws borders. The width of the borders can be varied by clicking on the lines at the bottom of the Tools window. 39) The Import command now as an option to import files in the DICOM (Digital Imaging and Communications in Medicine) format used in radiology. 40) The Image Math command can now perform arithmetic operations on density calibrated images and produce a density calibrated result. For example, adding two imported 16-bit MRI images with calibrated pixels values in the range 0-1000 now results in an image with calibrated pixel values in the range 0-2000. Previous versions of Image Math ignored density calibration and always operated on the raw 8-bit pixels. 41) The "Copy Function to LUT" checkbox was removed from the Calibrate dialog box and a macro that performs this function was added to the "LUT Macros" macro file. 42) The wand tool, when used to outline rectangular objects, now creates selections that the Save As command recognizes as rectangular. 43) The "Invert Pixel Values" checkbox in Preferences now applies to all open images not just the currently active image. 44) A macro routine, CallExport('name'), was added for calling export plug-ins. 45) A bug was fixed that sometimes caused NIH Image to hang when using Analyze Particles on an image with one or more very large particles. 46) The Measure command now sets the major and minor axes lengths to zero for spatially calibrated images with a pixel aspect ration not equal to one. In previous versions, the major and minor axes lengths were incorrect if the pixel aspect ratio was not one. 47) The "MCID" option was removed from the Import dialog box and a macro for importing MCID files was added to the "Input/Output" macro file. 48) The Select All and Show Clipboard commands now work with text windows. 49) A boolean function was added to the macro language for checking the state of keyboard modifier keys. It has the form "KeyDown(key)", where key is one of the following: 'option', 'shift', or 'control'. It returns TRUE if the specified key is down. V1.55 Release Notes (3 May 1994) 1) The PasteLive macro command now works with Paste Control. 2) The Find command will now move the cursor to a specified line in a text window if you enter a search string in the form Ă”#nĂ•, where n in a line number. As an example, to go to line 100, enter Ă”#100Ă•. 3) Load Macros error messages now display the line in the macro file that caused the error. 4) Routines were added to the macro language for getting the length of a string and for deleting a substring of specified length. The length function (Ă’i:=Length(str)Ă“) returns the length of str. The delete procedure ( Ă’Delete(str,index,count)Ă“) removes count characters from str, beginning at index. 5) A bug (introduced in v1.54) was fixed that could sometimes cause images uncalibrated in the Set Scale dialog box and saved to revert to being calibrated (to pixels) when reopened. 6) A bug was fixed that caused the macro interpreter to fail to skip over string assignments used in IF or IF THEN ELSE statements. 7) The LUT tool now moves one level wide density slices if you click directly on them in the LUT window. 8) A bug was fixed that sometimes caused Plot Profile and Reslice to not work correctly for line selections extending past the image boundary. 9) A new macro command was added that returns the current spatial scale. It has the form Ă’GetScale(scale,unit)Ă“, where scale (real) is the number of pixels per unit and unit (a string variable) is the measurement unit. For uncalibrated images, scale is set to 1 and unit to Ă”pixelĂ•. 10) There is now a macro command (Ă’AutoOutline(x,y)Ă“) that is equivalent to clicking with the wand tool at location (x,y). The outline was successfully created if GetRoi returns a width greater than zero. 11) The Dither command no longer ignores pixels along the edge of the image. 12) The SaveAs and Export macro commands now accept full path names. For example, to save the current image in the folder Ă’ImagesĂ“ on the disk named Ă’hd400Ă“ use SaveAs(Ă”hd400:images:myimageĂ•). 13) A bug was fixed that caused all the slices except the first to be inverted when importing multi-slice 16-bit images. 14) The Open command now recognizes and opens imported TIFF files of type Ă”TEXTĂ•. Hold down the option key to display the first 32K of the file as ASCII text. 15) The Cancel button in the Rotate Left and Rotate Right dialog box now works. 16) A bug was fixed that caused the Ă’24-bit to 8-bit ColorĂ“ command to fail with images wider than 2047 pixels. 17) NIH Image now works on grayscale Powerbooks. In fact, it runs with the monitor set to anything from Ă’Black & WhiteĂ“ to Ă’MillionsĂ“. For best performance, however, 256 colors (or grays) should be used whenever possible. 18) The Save Screen command was removed from the File Menu. Use System 7Ă•s built-in screen dump FKEY (command-shift-3) instead. 19) A bug was fixed that sometimes caused calibrated density values to be incorrect for images opened and processed using a macro. 20) A bug was fixed that sometimes caused Ă’Plug-in DigitizerĂ“, and possibly other acquisition plug-ins, to generate blank images when memory was low. 21) A bug was fixed that sometimes caused enlarged and misplaced text to be displayed in the Image Math dialog box. 22) A new command (Register) was added to the Stacks menu that will translate and rotate the slices in a stack into alignment based on fiducial points. It was written by Michael Castle (mike.castle@med.umich.edu) of the University of Michigan Mental Health Research Institute (MHRI). An example stack and set of fiducial points ("RegistrationExample.bin") are available by anonymous FTP from zippy.nimh.nih.gov in the /pub/nih- image/stacks directory. 23) The Scale and Rotate command now rotates images up to ten times faster. 24) The "Values" window was renamed "Info". 25) The maximum stack size was increased from 256 to 1000 slices. 26) A new option was added to the Surface Plot command to create grayscale or color 3D surface plots similar to the default "wireframe" plots except that the active color LUT is applied to the z-axis of the plot. The code for doing this was contributed by Norbert Vischer (norbert@mc.bio.uva.nl). 27) A bug was fixed that could a crash when attempting to open a window and not enough memory was available. Crashes were most likely to occur when using the "Modern Memory Manager" available on PowerPC Macs. 28) A bug was fixed that sometimes caused stacks to be partially opened without an error message being displayed. V1.54 (1 Feb 1994) 1) A bug was fixed that could cause the Import macro command to fail when using the Ă’Import AllĂ“ mode if Import had been previously called in the macro. 2) The Set Scale command now allows the user to enter an arbitrary unit of measurement. 3) A plug-in (Ă’Plug-in DigitizerĂ“), written by Cyrus Daboo of Cambridge University, now allows NIH Image to grab images using the frame grabber built into the AV Macs or from any other Quicktime compatible digitiser with a 'vdig' component. It is available as a binhexed. self-extracting archive by anonymous FTP from zippy.nimh.nih.gov, in the /pub/nih- image/plug-ins directory. The archive also includes a report on the AV digitizer that points out some its flaws, such as automatic gain control that can't be disabled. It also includes Apple's Ă’AV Digitizer OptionsĂ“ extension that allows the user to switch the AV digitizer into grayscale mode, which greatly improves the quality of images captured using grayscale cameras. 4) A bug (new in V1.53) was fixed that caused perimeter and freehand length measurements to be incorrect for spatially calibrated images. V1.53 1) A command (Project) was added to the macro language for doing projections. The Project dialog box is displayed only one time (the first time Project is called) within a macro. 2) A string function (WindowTitle) that returns the title of the active window was added to the macro language. 3) A bug was fixed that caused Image to display an invalid error message when attempting to open 16-bit TIFF files with contiguous strips. 4) A bug was fixed that could sometimes cause Image to crash when printing, particularly when using a macro. 5) A bug was fixed that caused Image to fail to open some TIFF files created by Ă’little-endianĂ“ systems such as the IBM PC. 6) A bug was fixed that caused the Reslice command to fail when the slice spacing was less than one. 7) The NewTextWindow macro command now accepts optional arguments for specifying the text window size and the Dispose macro command now works with text windows. These changes make it easy to write macros that do inline convolutions, for example, macro 'Sharpen [F]'; begin NewTextWindow('3x3 sharpen',120,120); writeln('-1 -1 -1'); writeln('-1 9 -1'); writeln('-1 -1 -1'); Convolve(''); Dispose; end; 8) A bug was fixed that caused the Plot Profile command to work incorrectly when using a line selection transferred to another image using the Restore Selection command. 9) A bug was fixed that sometimes caused Image to hang when using the wand tool with black backgrounds. 10) The Preferences command can now be used to specify the four character creator code Image uses for exported text files. This code determines which application is launched when you double-click on an exported text file (e.g., measurements, profile plot data, XY coordinates). Use Ă”ImagĂ• for Image, Ă”XCELĂ• for Excel and Ă”QKPTĂ• for KaleidaGraph. 11) A new command named Ă’Image MathĂ“ was added to the Enhance menu for performing arithmetic and logical operations between two images. The corresponding macro command has the form Ă’ImageMath(Ă”opĂ•, pic1, pic2, scale, offset, Ă• ResultĂ•)Ă“. The Ă”opĂ• string should be set to Ă”addĂ•, Ă”subĂ•, Ă”mulĂ•, Ă”divĂ•, Ă”andĂ•, Ă”orĂ•, Ă”xorĂ•, Ă”minĂ•, Ă”maxĂ• or Ă”copyĂ•. Pic1 and pic2 are pic numbers or pid numbers. For each pixel in the selection, the specified operation is performed, the result is multiplied by Ă”scaleĂ• and then Ă”offsetĂ• is added. Ă”ResultĂ• is the name used for the window created to store the results. For example, to average two images you could use the command: ImageMath(Ă”addĂ•, 1, 2, 0.5, 0, Ă”AverageĂ•). 12) When using acquisition plug-ins, Image now uses the window name specified by the plug-in instead of always using Ă”UntitledĂ•. 13) A bug was fixed that caused the Results window to sometimes not be correctly updated when using overlapping windows. 14) The MoveWindow macro command now works with text windows. 15) The SetThresold and AutoThresold macro commands no longer cause the LUT tool to be selected. 16) Image now displays the PrintDialog box when images are selected and printed using the FinderĂ•s Print command. 17) The macro interpreter is now more likely to correctly handle nested IF, FOR, WHILE and REPEAT statements without the need to use BEGIN-END brackets. The interpreter also now requires semicolons between statements. 18) A bug was fixed that caused plug-ins with Ă”(Ă”, Ă”/Ă• or Ă”;Ă• in their names to not be listed correctly in the appropriate plug-in submenu. 19) A new command (PasteLive) was added to the macro language that does a Ă’LiveĂ“ paste into a selection in a window other than the Camera window. This new command is useful for making montages of different focal planes of fluorescent specimens. Use the Ă’Paste AveragedĂ“ macro command in Ă’VideoĂ“ to do frame averaging of the selection. 20) Image now does a 3-point running average of the XY coordinates to more accurately estimate perimeters of freehand selections and lengths of freehand line selections. Measured freehand perimeters and lengths are now about 10% lower than before. Perimeters reported by Analyze Particles and the wand tool are now slightly lower (2-3%) than those reported by previous versions of Image since they are calculated using this new smoothing routine. 21) A bug was fixed that caused text in text windows to be displayed larger than expected. 22) The Average Frames command now allows you to specify the min and max values that control how integrated images are linearly scaled from 16-bits to 8-bits. The actual 16-bit min and max are always displayed in the Values menu. There is also a new option that creates a calibration function for displaying approximations of the integrated 16-bit values. 23) A Boolean function (PidExists) was added to the macro language for testing the validity of PidNumbers. 24) The Ă’Invert LUTĂ“, Ă’Set Number of ColorsĂ“ and Ă’Set Extra ColorsĂ“ commands in the Options menu were combined into a single command called Ă’Lut Options...Ă“. 25) The Analyze Particles command now displays a dialog box with particle analysis options that were previously in the Options dialog box. You can bypass this dialog box by holding down the option key or by using the AnalyzeParticles macro command. 26) A bug was fixed that could cause profile plots of rectangular selections in density calibrated images to be incorrect. 27) A command was added to the macro language for making profile plot data available to macro routines. It has the form Ă’GetPlotData(count,ppv,min,max)Ă“, where count is the number of values, ppv is the number of pixels averaged for each value, and min and max are the minimum and maximum values. The plot data values are returned in a built-in real array named PlotData, which uses indexes in the range 0- 4095. The macro Ă’Plot ProfileĂ“ in Ă’Plotting MacrosĂ“ illustrates how to use GetPlotData and PlotData. 28) The Gel Plotting macros now work with vertical lanes, no longer require all other windows be closed, do a better job of scaling the lane plots, and report results in calibrated units such as integrated OD. 29) The SaveAs macro command will now save the contents of text windows. 30) The Save, SaveAs, Close and Dispose macro commands no longer require an image be open to work with text windows. 31) The Close macro command now works with the Plot, Histogram, Results, and Video Control windows. 32) The Ă’Import FITSĂ“ macro in Ă’Input/Output MacrosĂ“ now imports both 8 and 16-bit FITS images. It also correctly handles FITS files with headers longer than 36 lines. There is also a new macro for displaying FITS headers. 33) A new string search function was added to the macro language. It has the form Ă’index:=pos(substr,str)Ă“. It searches for Ă”substrĂ• within Ă”strĂ• and returns an integer that is the index of the first character of substr within str, or zero if Ă”substrĂ• is not found. 34) Area and line selection can now be created more precisely on magnified images. V1.52 (9 September 1993) 1) A bug was fixed that could cause Image to crash when opening text files with names containing a semicolon. 2) A bug was fixed that caused plug-in filters to not work correctly with rectangular selections. 3) Images are now marked as changed when you use a plug-in filter. 4) A bug was fixed that would sometimes cause the Windows menu to become messed up when one or more text windows were open. 5) The window title bar is now correctly updated after a TIFF file has been saved using a new name. 6) The Reduce Noise filter is now four times faster due to some in-line 68000 code contributed by Edward J. Huff at the NYU Chemistry Department. 7) A bug was fixed that prevented filter plug-ins from remembering their settings between calls. You can now also pass the string Ă”ResetĂ• to the Filter macro routine (e.g., Filter(Ă”ResetĂ•)) to force the next filter called to use its default settings and to display its dialog box, if any. 8) A macro (Ă’Make Expression MovieĂ“ in the file Ă’AnimationĂ“) was written for generating movies using the Expression plug-in filter. Expression is a freeware program written by Jim Bumgardner (jbum@aol.com) that creates images that change over time according to a mathematical formula. Expression 3.0b, available in the plug-ins directory on zippy.nimh.nih.gov, is required for use with NIH Image. 9) A bug was fixed that prevented selection of the right column or bottom row when using the rectangle selection tool. 10) Thanks to Edward J. Huff, text files created by NIH Image (e.g., macros and convolution kernels) now have a custom icon. 11 A command (SortPalette) that sorts the current look-up table by hue was added to the macro language. 12) PidNumber, a new macro function, was added to the macro language. It returns a negative permanent ID number for the current image. SelectPic and ChoosePic were modified to accept these negative values and find the current picNumber automatically if presented with a pid value rather than a picNumber value. A macro package (Ă’PidNumbers DemoĂ“) demonstrates the various ways that images can be selected in the macro language. The PidNumber modifications and demo macros were contributed by Edward J. Huff. 13) The line spacing in text windows is now changed when the font size is changed. 14) Text windows now handle update events correctly. 15) Plug-ins in the system folder in a folder named Plug-ins are now found if image is on a different volume than the the system folder. 16) The standard versions of NIH Image no longer requires a floating-point coprocessor (FPU). This change was made because there is no noticible performance difference between the FPU and non-FPU version of Image and becuase the LCIII and Centris 610, the most popular new Macs, do not have FPUs. This change also anticipates PowerPC based Macs which will not support emulation of 68000 programs that directly use the FPU. V1.51 (2 August 1993) 1) A bug (introduced in 1.50) was fixed that prevented histogram and plot values from being pasted into spreadsheet programs and other programs that work with text on the Clipboard. V1.50 (29 July 1993) 1) A new submenu (Acquire) was added to the File menu for using Photoshop compatible acquisition plug-ins. The plug-ins must be stored in a folder named Ă’Plug-insĂ“ located either in the same folder as Image or in the System Folder. Using plug-ins, Image can acquire 8-bit grayscale, 8- bit indexed color, and 24-bit color images. 24-bit color images are stored in three slice stacks and displayed using 8-bit indexed color, similar to the way the Capture Color command works. The following plug-ins have been reported to work: Agfa Arcus Scanner Agfa PhotoScan Computer Eyes /RT Pro Datacopy 730GS scanner Ektron 1400 series camera (Eikonix 4096x4096 CCD) Gaphics Unlimited Kingfisher frame grabber (grayscale only) Howtek II slide scanner LaCie SilverScanner (8-bit grayscale, 8-bit color, 24-bit color) Kodak DCS-200 digital camera (grayscale and 24-bit color) Kodak Photo CD Image Browser Kodak RFS2035 scanner Microtek Scanmaker MirrorScan 600 Plus Neotech Image Grabber Perceptics PixelBuffer frame grabber Perceptics MegaGrabber frame grabber Perceptics PixelHR-24 frame grabber Plug-in Digitizer (supports AV Macs and other QuickTime digitizers) QuickImage 24 plug-in Radius VideoVision video grabber RasterOps Video Capture V1.3 with 24XLTV card Scantastic plug-in with Apple Color One scanner Scion LG-3 frame grabber Truvel scanner Voyager decompression plug-in The LaCie Silver scanner plug-in seems to be the fastest, smoothest and most reliable of the scanner plug-ins tested. A command was also added to the macro language for supporting acquisition plug-ins. It has the form Acquire('plug-in name'). Plug-ins are assumed to reside in a folder named Ă’Plug-insĂ“ located in the same folder as Image or in the System Folder. Full path names such as 'HD400:Plug- ins:Kodak DCS-200' are also supported. The plug-in support in NIH Image is based on code written by Greg Brown, Steven Gonzalo and Richard Ohlendorf of Ohlendorf Research, Inc. Ohlendorf Research has customized both Image and the Kodak DCS-100 digital camera plug-in to automate uploading of images from the camera. Ohlendorf Research, Inc. 818 LaSalle Street Ottawa, IL 61350 815-434-5622 Applelink--Abraham@AppleLink.com 2) Several problems with commands in the Binary submenu were fixed. These problems occurred when processing objects along the edge of the image. A related problem was fixed that sometimes caused the Skeletonize routine to never complete. 3) A function (UndoBufferSize) was added to the macro language that returns the current size of the Undo and Clipboard buffers. The Gel Plotting Macros use this function to display an error message when the Plots window needs to be larger than the current buffer size. 4) The Import command can now import 3D data sets such as multi-slice files from medical scanners. An optional fourth argument was also added to the SetCustom macro command to allow the number of slices to be specified. For example, when importing a data set with 128 256x256 slices and no header, use Ă’SetCustom(256,256,0,128)Ă“. 5) If opened by the OpenSerial macro command, the serial I/O port is now closed when you quit image. 6) A four element built-in array (Scion) was added to the macro language to allow access to the Scion LG-3's I/O registers. The four elements of the array are defined as follows: Scion[1] 8-bit DAC(A) read/write Scion[2] 8-bit DAC(B) read/write Scion[3] 8-bit Control Reg 1 read only Scion[4] 4 digital out bits read/write Macros for setting and reading the LG-3 I/O registers are available in the file Ă’VideoĂ“. 7) Support was added for the external trigger feature of the Scion LG-3. 8) A new submenu (Filter) was added to the Enhance menu for using Photoshop compatible filter plug-ins. The plug-ins must be stored in a folder named Ă’Plug-insĂ“ located either in the same folder as Image or in the System Folder. A command was also added to the macro language for using filter plug-ins. It has the form Filter('plug-in name'). Plug-ins are assumed to reside in the aforementioned Plug-ins folder. 9) A command was added to the macro language for enabling and disabling Ă’Photo ModeĂ“. The command Ă’PhotoMode(true)Ă“ erases the screen and draws the contents of the currently active window. Ă’PhotoMode(false)Ă“ restores the screen. 10) A bug (introduced in V1.49) in the macro interpreter was fixed that caused it to fail if the first argument in a procedure call started with a minus sign or a left parenthesis (e.g., Ă’(a+b)/cĂ“). This bug also affected macro commands, such as PutMessage, PutSerial and Write, that accept a variable number of arguments. 11) When using the Ă’Highlight Saturated PixelsĂ“ option, the color used to display under saturated pixels is now yellow instead of blue. 12) Image can now open and edit text files up to 32K in size. The following commands know how to deal with text windows: New, Open, Close, Save, Save As, Print, Cut, Copy, Paste, Clear, Font, Size, Load Macros (loads the macros contained in the current text window). 13) Images larger than printer page (normally 552 x 730 pixels) are now scaled to fit the page. This feature is only available when Ă’Custom Grayscale HalftoningĂ“ is disabled. 14) A command (SurfacePlot) was added to the macro language for generating surface plots. A macro for generating a surface plot movie from a stack is in the macro file Ă’Stacks2Ă“. 15) A macro command was added for doing 24-bit to 8-bit color conversion. It has the form Ă’RGBToIndexed(str)Ă“, where str contains some combination of 'System LUT', 'Existing LUT, 'Custom LUT' and 'Dither'. Custom LUT and Dither are the defaults. The macro file Ă’ColorĂ“ contains a macro for doing a color merge of two stacks. 16) 16-bit TIFF files can now be imported. After the file has been imported, use the Rescale (aka Revert to Saved) command to find the optimum 16-bit to 8-bit mapping. Files that represent white as zero open inverted. 17) The AverageFrames macro command now optionally accepts two arguments. The first is a string containing some combination of 'Average', 'Integrate' and 'Video Rate Capture', and the second is the number of frames to average or integrate. For example, to integrate 128 frames, you would use the command AverageFrames('Integrate',128). 18) A bug was fixed that caused the X and Y coordinates of the center of the best fitting ellipse (X-Y Center) to always be integers. 19) A bug was fixed that caused the creation of freehand or segmented line selections to fail if density slicing was enabled. 20) A bug was fixed that caused a pasted image in a second window to disappear when using the Start Capturing command. 21) A bug was fixed that could sometimes cause the tools in the Tool window to be displayed incorrectly. 22) A command (Ă’SelectWindow('Title')Ă“) was added to the macro language for selecting windows my name. 23) A command (Ă’NewTextWindow('Title')Ă“) was added to the macro language for opening a new text window. In addition, the Writeln macro routine was updated so that it now displays text in the currently active text window. 24) A command (CaptureColor) was added to t