Fotoxx quick guide

File menu File Management
Index (thumbnails)
Show thumbnail images - files in the current directory (more).
Open RAW File
Open a RAW file from a digital camera and convert to tiff (more).
Open Image File
File open dialog - open an image file to view or edit (more).
Save Image File
File save dialog - save the current (edited) image to a file (more).
Print Image File
Arrange images and text in a layout for printing (more).
Trash Image File
Move an image file into the fotoxx trash bin (more).
Rename Image File
Rename (series of) image files, add sequence numbers (more).
Quit fotoxx
Exit from fotoxx.


Edit menu These functions modify image files  (more).
Select Area Outline an area for subsequent editing using the mouse (more).
Clear Select Area Remove area - subsequent edits apply to the entire image.
Flatten Brightness
Flatten the brightness distribution to enhance detail (more).
Tune Image
Edit brightness, color, saturation (more).
Remove Red Eyes Click on a red-eye to remove it (more).
Blur Image
Blur an image (smoothen skin) (more).
Sharpen Image
Sharpen a blurred image (more).
Reduce Noise
Reduce noise (speckles) in low-light images (more).
Trim Image Cut out a rectangular portion of an image (more).
Resize Image
Scale an image up or down (more).
Rotate Image
Rotate an image (level a tilted image or turn in 90° steps) (more).
Unbend Image Fix perspective problems (more).
Warp Area
Distort image within a selected area by pulling with the mouse (more).
Warp Image
Distort entire image by pulling with the mouse (more).
Color Depth
Reduce color depth (posterize) (more).
Simulate Drawing
Transform a photo into a simulated pencil or chalk drawing (more).
Simulate Embossing
Transform a photo into a simulated metallic embossing (more).
Simulate Tiles
Transform a photo into tiles (make large pixels) (more).
Simulate Painting
Transform a photo into a simulated painting (more).
Edit Pixels
Edit pixels and paint lines or areas using the mouse (more).
Make HDR Image
HDR = high dynamic range (more).
Make HDF Image
HDF = high depth of field (more).
Panorama
Combine overlapping images to make an ultra-wide image (more).


Tools menu
Utilities and setup functions.
Check Monitor
Display a color palette for tuning your monitor (more).
Index Tags and Thumbs
Re-index tags and thumbnails after file rearrangements (more).
Brightness Graph
Show brightness distribution graph of current image (more).
Clone fotoxx
Open a new window (e.g. to compare two images) (more).
Slide Show
Show images full screen (no menu or toolbar) (more).
Show RGB
Show RGB values at position of mouse click (more).
Lens Parameters
Edit parameters for your cameras and lenses (more).
Change Language
Change the GUI language (more).
Create Launcher
Create a desktop icon / launcher for fotoxx (more).
Convert Multiple RAWs
Convert multiple RAW files to tiff with a single command (more).
Burn Images to CD/DVD
Select images and write them on a CD or DVD (more).


Tags menu Manage tags (keywords) / star ratings / dates  (more)
Edit Tags
Add or change image date / stars rating / tags (keywords) (more).
Search Tags
Find images with desired tags / star ratings / dates (more).
View EXIF Data
View image EXIF data (date, exposure data, tags) (more).


Help menu User guide, README, change log  (more).


Toolbar buttons

Index
Show thumbnail images - files in the current directory (more).
Open
File open dialog - open an image file to view or edit.
Prev
Go to previous image in the current directory.
Next
Go to the next image in the current directory.
Save
File save dialog - save the current (edited) image to a file (more).
Undo
Undo (reverse) the results of the previous edit function.
Redo
Redo the previous undo. Undo/redo depth is 50 edits.
Zoom+
Magnify the image. A left mouse click also magnifies.
Zoom-
Reduce the image. A right mouse click also reduces.
Trash Move an image file into the fotoxx trash bin (more).
Quit
Exit from fotoxx.

Keyboard Shortcuts
main window

left / right arrow keys
previous / next image
plus(+) / minus(-)  keys
zoom bigger / smaller
Z  key
zoom to 100% / fit to window
R / L  keys
rotate 90° right / left
T or X  key
open thumbnail index window
Delete key
move image to fotoxx trash
Escape key
Exit slide show mode or show RGB mode
thumbnail window

up / down arrow keys
move up / down by one row of thumbnails
left / right arrow keys
move to previous / next page of thumbnails
plus(+) / minus(-)  keys
bigger / smaller thumbnail image size
Escape key
close thumbnail window

License and Warranty
fotoxx is licensed under the GNU General Public License v3 (Free Software Foundation).
fotoxx is not warranted for any purpose, but if you find a bug, I will try to fix it.


Origin and Contact
fotoxx originates from the author's web site: http://kornelix.squarespace.com/fotoxx
Other web sites may offer it for download. Modifications may have been made.
If you have questions, suggestions, or a bug to report, contact kornelix@yahoo.de

Some additional technical notes can be found here.


Navigation
Press the [index] toolbar button to get a window of thumbnails showing image files in the current image directory. Use this thumbnail window to scroll around the directory and select files by clicking thumbnails. The buttons at the top allow scrolling forward or back by rows or pages. Use the file and folder buttons to navigate elsewhere if wanted. Make the window bigger to show more thumbnails, or use the [bigger] and [smaller] buttons to increase or decrease the thumbnail size and change the number of visible thumbnails accordingly. Pressing the [index] button in the fotoxx main window will bring the index window forward with the current file's thumbnail in the upper left corner. Clicking on a thumbnail will bring the fotoxx main window forward with the selected image.

Open RAW File
This is a dialog for opening a RAW file from a digital camera. The selected file is converted to tiff-48 format (16 bits per RGB color), using the program "ufraw". This may need 20 seconds or more to complete. When the converted image appears, you can proceed to edit or save the image in a normal jpeg or tiff file.

Open Image File
This function starts a standard file open dialog, allowing you to select an image file or navigate to another directory and select an image file. The selected file is opened in the fotoxx main window where you can view or edit the file using the menus and toolbar buttons. Drag and drop can also be used to open a file: drag the file from Nautilus (or another browser) to the fotoxx window or to the fotoxx desktop launcher, and fotoxx will open the file. If text is dragged from gedit (or another editor supporting drag sourcing), fotoxx will assume the text is a filespec and try to open it. Thus you can make a list of filespecs within a text file and use this list with fotoxx. Effectively, you can use Nautilus or text files to navigate a collection of images as an alternative to the fotoxx navigation system.

Save Image File
An edited image file can be saved in two formats, "tiff" and "jpeg". "jpeg" is normally the best option, since files are compressed to reduce space. You can choose a jpeg quality value in the range 1-100. Lower values give greater compression of file size and less image quality. Values above about 70 are generally hard to distinguish from 100 (highest quality, large file size). Files may be saved in tiff format with 24 or 48 bits per pixel. The 48 bit tiff format (16 bits per color) only makes sense for files converted from a RAW format supporting more than 8 bits per color. Camera RAW files are typically 12 bits per color. It is rare that the difference between 8 and >8 bits per color can be seen with the eye.
 
File sizes for a 10 megapixel image are roughly as follows:
tiff-48
tiff-24
jpeg-100
jpeg-90
jpeg-80
jpeg-70
jpeg-50
60 MB
18 MB
7 MB
2 MB
1 MB
0.6 MB
0.4 MB
 
Print Image File
The print menu starts the program printoxx (if installed) with the current image loaded into the printoxx layout window. Printoxx allows you to add images and text to the layout window, change their size, move them around, and print or save the final layout. Printoxx is available at http://kornelix.squarespace.com/printoxx.

Trash Image File
There is no standard location for the trash folder in Linux, and in practice it varies. fotoxx puts discarded images into a desktop folder named "fotoxx-trash". You can delete it or move it to your distro-specific trash folder.

Rename Image File(s)
This function can help automate the process of renaming a series of files using a root name (e.g. an event or place name) and a sequence number. It is good for renaming a series of files from a digital camera. Open the first file in the series, input a new name, and press the [rename] button. The next file is then opened. You can use the same name again by pressing the [previous] button and then add a suffix or sequence number. If you are using sequence numbers, press the [ +1 ] button after the [previous] button to get the next sequence number added to the name.


General Editing Procedure
The image in the main window can be operated on with the edit menu functions. You can use these functions in any order, and the changes are accumulated for the current image and shown in the main window. The [undo] and [redo] buttons can be used to review the before/after results for the last 50 edits of the current image. These buttons do not work during an image edit function, but some of these functions have their own method to undo and redo changes during the edit. When finished with an image, use [save] to replace the original file or save to a new file.

Select Area
It is possible to modify part of an image while leaving the rest unchanged. If no image area has been selected, edit functions apply to the entire image. If an area has been selected, then the following edit functions will be carried out within the selected area: all brightness and color functions, warp area, sharpen, blur, reduce noise, and all art functions. The warp area function works only within a selected area, and the warp image function works only on the whole image. Other functions (trim, red-eye, rotate, resize, HDR, panorama, unbend) ignore a selected area.

An area may be selected before starting an edit function, or while an edit function is active. The selected area is immediately active, and prior edits are retained. If another edit function is started, the selected area remains active, so it is possible to carry out a series of edits on one area, or one edit function on a series of areas.


The menu function Area > Select Area starts a dialog with the following buttons:
Start
start a new area or resume editing previous area
Finish
finish editing an area
Suspend / Resume
suspend or resume editing
Show / Hide
show or hide the area outline
Delete
delete the current area
Invert
invert the area

Start with the [start] button. Use the mouse to outline the target area. Hold the left mouse button and drag the mouse to draw a dotted line. Release the button and press again to fix the end of the line and start a new connecting line from that point. Continue around the target area until it is surrounded with connected dotted lines (an arbitrary polygon). You can use the right mouse button to undo the last line(s). Alternatively, just click the left mouse button to define each new point of the surrounding polygon. When the polygon is nearly closed, click the [finish] button to close the last gap. The selected area is now active and subsequent image edit functions will operate within the area. The [delete] button deletes the area (all edits are retained). A new area can now be started if desired. The [suspend] button temporarily stops editing and releases the mouse to zoom or scroll the image to a new position. The button changes to [resume] and can then be used to resume editing. The [show] button refreshes the dotted lines outlining the area. The button changes to [hide] and can then be used to hide the dotted lines (for better visibility of image edits in the area).
The button [invert] inverts an existing area: the entire image is selected except for the existing area. Using [invert] two times returns the original selected area. Inverting a selected area may take a long time for the new area calculations to complete (explained below). The [blend width] sliding control defines the width of blending into the surrounding image. Edits made within a selected area are blended with the surrounding image over this width. The leftmost slider position gives a hard edge (zero blending), and the rightmost position blends the changes over a width of 300 pixels. This control can be adjusted interactively while editing an area, with instant visual feedback. The select area dialog can be exited and started again later. The blend width can then be revised, affecting current and future edits to the area.

Determining which pixels are inside a selected area, and how far they are from from the nearest edge (for the blending calculation) is very processor intensive. If you have enclosed a large area using hundreds of separate lines, 10 or more seconds may be needed. This calculation is done only once, when finishing a selected area. Subsequent movements of the blend width slider are processed very fast.

You can leave the select area function with the [ OK ] button and resume it later. When the select area function is started and an area already exists (finished or not), you are asked if you want to delete the existing area and start over. If you select NO, the existing area may continue to be edited. If the area was finished, the last segment is removed, leaving the polygon open. You can remove additional segments as usual with the right mouse button.

The function "Clear Select Area" permanently deletes a selected area. You can temporarily disable an area by starting the select area function and leaving it without using the [finish] button.

Flatten Brightness
This is a fast and easy way to compensate for a common limitation in photos: there is not enough range in the brightness to show good detail in all areas. This function finds where there are too many pixels with nearly the same brightness and spreads them apart, compressing other areas to make room. Technically, the brightness distribution is made more uniform (flatter). Move the slider and watch the image, which may lag a moment. Some images will show good results, others not.

Tune Image
This function is used to change brightness, color intensity, color saturation, and color balance (relative RGB levels). Starting with fotoxx version 6.8, you can adjust all of these items as a function of the original image pixel brightness. To illustrate, you could increase color saturation in darker image areas and leave it unchanged in brighter image areas.

There are 6 response curves for the 6 image attributes of brightness, color intensity, color saturation, and color balance (levels of red, green, and blue). The radio buttons select which curve is active and displayed. The curve represents a value (Y-axis) for each level of image brightness (X-axis). The middle Y-value is neutral (no change from the initial value). Higher and lower Y-values represent corresponding higher and lower settings for the 6 attributes. The initial curves are flat at the middle value.

The buttons [+++] etc. can be used to shift the whole curve in various ways.
The curve can also be dragged up or down with the mouse. An anchor point (black dot) is added to the curve wherever it is pulled, and this becomes a constraint for subsequent pulls: the curve will continue to go through this point as other parts of the curve are pulled. Anchor points can be dragged, or deleted by right-clicking them.

The image changes in real-time as the curves are moved. Simply move the curves and observe the image until you are satisfied.

Increasing brightness moves all RGB values up by the same factor, until one of them reaches the maximum allowed value. Increasing color intensity moves all RGB levels up by the same factor within a pixel (no color shift), and the factor is greater for darker pixels. Increasing color saturation will increase the dominant RGB colors within each pixel and reduce the other colors, without changing the RGB mean.

Remove Red Eye
This function reduces the red-eye effect from electronic flash photos. Two methods are provided. The first is faster but will not handle difficult cases (e.g. the eyelids are just as red as the pupil, making the boundary unclear). The second method is more robust but also needs more time and care.

To use the first function, left-click on a red-eye one or more times until satisfied. If a red-eye cannot be fixed correctly, right-click to undo the change, and then use the second method.

The second method can better handle difficult cases where the red-eye is only slightly red and the color difference with the eyelids is too little for the automatic algorithm to distinguish. Place the cursor over the center of the red eye. Hold the left mouse button and drag the cursor down and to the right. A dotted circle will appear enclosing the red eye. Repeat if needed to get the red eye centered in the circle (roughly). Left-click inside the circle repeatedly while watching the red eye darken, and stop when it is dark enough. If you go too far, the eyelids may start to darken. Right-click to undo and repeat if necessary.

Blur image
This function can be used to blur or un-sharpen an image. Each pixel is mixed with neighboring pixels to reduce the differences, making edges fuzzy. Enter a value for blur radius and press [apply] to see the results. A small value mixes each pixel with its nearest neighbors and larger values mix more distant pixels. The contribution from each pixel decreases with distance, so the nearest pixels have the greatest contribution. This function is useful to smooth mottled skin tones. You can use "select area" to limit the blur to a face or part of a face.

Sharpen Image
This function sharpens a blurry image. Three methods are implemented: edge detection, unsharp mask, and Laplacian. Edge detection is a simple algorithm: find adjacent pixels with the largest brightness difference and increase the difference. This is repeated for several cycles, with the threshold for brightness difference decreased each cycle. Unsharp mask is a traditional method also found in Gimp and other tools. It is fast and effective (a technical description can be found via Google). The edge detection method gives sharper edges where the contrast is high and softer edges elsewhere, making it good for portraits (sharp eyes, smooth skin). For images that are partly sharp and partly blurred (e.g. depth of field or motion problem), the edge detection method will affect only the blurry areas, whereas unsharp mask may put "halos" around edges that are already sharp. The Laplacian method is very similar to unsharp mask, producing slightly better results in some cases and slightly worse in others. The radius value limits the distance over which pixels around an edge are changed. It should be small (1-2) for images that are slightly fuzzy and larger for poorer images. Threshold suppresses changes to low-contrast pixels: a higher values reduces the amplification of low-level irregularities.

For the edge detection method, enter the following parameters:
   cycles
number of iterations
   reduce
brightness reduction threshold per cycle, 80 means 0.80
   threshold
brightness change low cutoff threshold

For the unsharp mask or Laplacian method, enter the following parameters:
   radius
distance pixels around an edge are changed
   amount
amount of correction, 100 = normal
   threshold
brightness change low cutoff threshold (unsharp mask only)

Press the button for the method selected and wait a few seconds to see the result. The default values are suggested starting points. Make changes and repeat the process until satisfied. You can go back and forth among the methods to compare which is best for a given image.

Reduce Noise
This function reduces the noise present in photos taken under poor lighting conditions, making uniform surfaces appear speckled. Choose one of the three methods described below. Press the [reduce] button repeatedly while watching the image. If you go too far, sharpness and detail will be lost. The radius input determines the area around each pixel that is compared. A default radius is set when a method is selected, but other values may work better in some cases. For a large image, these algorithms may run a minute or longer. To save time, select a small area and experiment with the different methods and radius settings until you make a decision, then clear the selected area and apply the chosen method to the whole image.

The following algorithms are applied to each RGB color independently.
(1) Flatten outliers by color: extreme pixels (outliers) within a radius are moderated.
(2) Set median brightness by color: pixels are set to the median value of their neighbors.

(3) Top hat: detect outliers by comparison with a band of pixels at some distance away. Distance is increased in steps from 1 pixel to radius limit.


Trim Image
The HDR and panorama functions will leave some black margins around the edges where the images did not overlap. Use the trim function to remove these areas, or any other unwanted margins. An initial dotted line rectangle is drawn, encompassing about 60% of the image. Areas outside the final rectangle will be discarded. Click anywhere to redraw the rectangle with the nearest corner at the clicked position. You can also drag any corner of the rectangle to a new position. When done, press the [trim] button in the dialog box.

Resize Image
Sometimes called "rescale", this function allows setting a new image width and height in pixels, or as a percent of the original size. You can input the new width and height directly. Buttons are present for setting the new size to 3/4, 2/3, 1/2, 1/3, or 1/4 of the original size. Using one of these ratios will minimize loss of resolution. If the lock ratio box is checked, the original width / height ratio will be preserved, meaning that if one dimension is changed, the other dimension will be changed to match. After setting the new dimensions, use the [apply] button to perform the rescale. The window may look the same, but the image behind it is rescaled. The status bar shows the new dimensions. The file size is not updated until the modified image is saved.

Rotate Image
The rotate menu function starts a dialog to rotate the image clockwise (+) or counterclockwise (-) in steps of 0.1, 1, 10, or 90 degrees. For a tilted image, use the mouse to drag the right edge up or down until the image looks level. Use the 90 degree steps to convert an image taken in vertical format to horizontal. No resolution is lost with 90 degree rotation. For other angles, the loss of resolution varies up to about 1/2 pixel. The output image is increased to accommodate the rotated input image without size reduction - e.g. a 100 x 100 image rotated 45 degrees will be inside a new image box of 141 x 141 pixels.

Unbend Image
Panoramas of nearby subjects (typically buildings or interior rooms) may show straight lines that are curved, or buildings that are slanted. Bending of the images is necessary in the panorama process in order for the images to fit together. For remote subjects (esp. landscapes) this is not noticeable. The unbend function can be used to straighten curved lines and remove the slant from vertical lines. Vertical and horizontal dotted lines are drawn over the image, showing the unbend axes. Click or drag the mouse near the end of a line to move it. Input values for horizontal and vertical unbend and watch the effect on the image. Increase or decrease the values and repeat until satisfied. Move the axes to change the centers of unbending. See also "Warp Image" for another method of correcting perspective problems.

Warp Area
This function can be used to make distortions within an image. You can select an image area and drag the mouse to stretch this area with respect to the rest of the image. The image reacts as if made of rubber. The movement is maximum at the mouse pointer and declines to zero at the edges of the selected area. Many mouse drags of different lengths and directions can be combined to achieve the desired results. The [undo] button will remove the most recent stretch (up to the last 100). When finished, you can select another area and do some more warping, or select [done] to exit the function.

Warp Image
This function is useful to correct perspective problems (see also "Unbend"). Drag the image from any edge, using the mouse. The entire image will be pulled or pushed in the direction of the mouse, but areas near the mouse are moved more than more distant areas.

Color Depth
This function changes the normal 16 bits per RGB color (red, green, blue) to any value between 1 and 16 bits per color. At 8 bits per color, there are 16.8 million total color combinations. At 4 bits per color there are only 4096 total colors. Use 1-4 bits for an interesting "poster" effect.

Simulate Drawing
This function transforms a photo into a black and white high-contrast image or into a line drawing where only the edges of objects are shown as black lines on white background or white lines on black background. The sliding control "contrast" will deepen dark areas to black. The sliding control "threshold" will convert the image from gray-scale to black and white. The sliding control "outlines" will highlight high-contrast pixels (edges of objects) and suppress low-contrast pixels. This can be black on white or white on black, depending on the selection of the radio buttons "pencil" and "chalk". Manipulate both "threshold" and "outlines" to find the best balance.


Simulate Embossing
This function transforms a photo into a simulated relief or embossed image. The "radius" setting determines the feature size or level of detail. The "depth" setting determines how deep the features go into the surface.

Simulate Tiles
This function transforms a photo into an array of large monocolor tiles. You can control the tile size and the thickness of the space between tiles (caulk, grout).

Simulate Painting
This function transform a photo into something looking more like a painting. It reduces the number of colors, maps each contiguous pixel area having the same color, and then consolidates smaller areas into adjacent larger areas having the best color match. Four user settings control this process: "color depth" sets the number of colors to be used (bits per color). 1 = 8 colors, 2 = 64 colors ... 5 = 32768 colors;  "target group area" sets a lower limit for areas that will have their own color: areas smaller than this number of pixels will be absorbed into an adjacent area with the nearest color match; "req. color match" sets the minimum color match required for a smaller area to be consolidated into an adjacent larger area: 0 = don't care (maximum consolidation), 100 = perfect match required (no consolidation); "borders" determines whether the colored areas will be delineated with a thin black border, like irregular tiles in a mosaic. After using this function, using the "emboss" function can add interesting texture to the image.

Edit Pixels
This function changes individual pixels. There are three modes of operation: pick, paint, and erase. Pick mode: click anywhere on the image to set the current color. Paint mode: click or drag anywhere on the image to paint with the current color. Erase mode: click or drag anywhere on the image to restore modified pixels to their original color. The button [color] allows you to pick a color using a color wheel, and it always shows the current color. The "brush radius" control sets how large an area of pixels will be changed with each mouse click or drag. The "transparency" controls determine how intensely the color is applied at the center and edges of the brush. Zero transparency applies the full color immediately whereas a high transparency (90-99) applies a little color and allows you to gradually change the color using many clicks or drags (analogous to spray painting from a long distance). Erase also works this way: use zero transparency to immediately erase, and high transparency to erase gradually. The [suspend] button releases the mouse so you can use the mouse to scroll or zoom the image. The button changes to [resume]. The [undo_last] button removes the last edit (modifications from the last click or drag operation), and this can be repeated to remove many recent edits. The memory for undo operations is limited to 100 megabytes, which can be reached if you make many edits using a large brush (every change to every pixel is saved).

NOTE: zoom the image to 100% or more when using this function. If the mouse steps are larger than the image pixels, some pixels are skipped by the mouse and cannot be painted.

Make HDR Image (high dynamic range)
HDR combines (overlays) two images of the same subject with different exposure levels (underexposed and overexposed). The combined image has improved visibility of detail in both the darker and brighter areas, in effect using information from the brighter image for the darker areas, and from the darker image for the brighter areas. Many digital cameras do exposure bracketing: take multiple shots in quick succession with different exposure levels. You can combine two such images to make a better one. If the camera is adjusted manually between shots, take care to keep it level and aim at the same point. Some misalignment of the two images can be tolerated.
If things move between the two shots (people, windblown trees), fuzziness and ghosting cannot be avoided.

Open the 1st image file with the [open] button, then select the HDR menu function. A file open dialog is started to select the 2nd image file. The two images are aligned and combined automatically. When done, the combined image is shown, along with a dialog for manual fine adjustment. The contribution from each image can be adjusted independently for different brightness levels in the combined image. The initial ramp causes the darkest areas to be taken mostly from the brighter image, and the brightest areas mostly from the darker image. Use the mouse to pull the curve and change the contributions from the two input images. This will also add an anchor point that will not move when other parts of the curve are moved. An anchor point can be dragged or deleted with a right-click.

Make HDF Image (high depth of field)
HDF combines (overlays) two photos of the same subject with different focus settings, near and far. The near-focus image has close objects sharply in focus and far objects blurred. The far-focus image has the opposite condition. The idea is to combine the images so that both near and far objects are sharp.

Making the two photos: choose a point for the center of the image. Aim the camera at a near object and depress the shutter button 1/2 way, to set the focus on this object. Hold the button at the 1/2 position, aim the camera at the chosen center, and snap the photo. Now choose a far object and do the same. The camera position should be nearly the same for both photos, which can be a challenge when the subject is very close. Camera movement can cause scaling and parallax problems (nearer objects shifted against farther objects), which may or may not be fixable within fotoxx.

Processing the photos: in fotoxx, open the first image file, choose the HDF menu function, and you will be asked to select the second image. The two images will now be aligned as well as possible. The output image is a 50/50 mix of the aligned input images. A small amount of camera movement between the photos is compensated, but this is limited, and parallax shifts are not compensated at all. When the alignment is complete, a dialog opens. You can select either input image and "paint" with the mouse on any area of the output image. This converts the 50/50 mix to the selected input image. The radius of the paintbrush can be 1-200 pixels, so you can paint large areas quickly and control fine detail when needed. If you have overlapping near and far objects, time and patience will be needed to make all of them sharp. The examples in the fotoxx gallery took about 5-10 minutes each, but the object overlaps are also minor.

Panorama
This function stitches two images together to make a wide image or panorama. The images must overlap by 10% or more, so that the program can find where they coincide and put them together.

Open the left image file first. Select the panorama menu function. A file open dialog is started to select the right image file. The two images are initially joined with a small transparent overlap. A dialog pops up asking you to move the right image into rough alignment with the left image. Do this with the mouse, dragging the right image leftwards until it is within a few pixels of the best match with the left image. Rotate the right image if needed, by dragging the right edge up or down.

The images should be correctly curved and fit together well. If they do not fit, you need to set the lens parameters as described under "Lens Parameters". You can adjust these parameters within the dialog until the images fit reasonably well, and this may be good enough for most panorama jobs.

Press [proceed] when rough alignment is finished, and the program will do fine alignment and join the images. Internally, the images are shifted and rotated and the degree of match is evaluated. This is done with increasing image sizes until the best match is found within a fraction of a pixel. The process needs 10 seconds to 3 minutes, depending on CPU speed and image size. A 2.4 GHz Intel Core 2 processor with 10 megapixel images needs about 30 seconds.

When fine alignment is complete, the combined image is displayed. A dialog pops up for fine adjustment of brightness and color match. You may see a sharp border because the two images do not have the same brightness and color balance. The [auto] button can be used to perform an automatic color match, which is usually the best starting point. This button toggles the auto color match on and off. The other controls allow you to make additional changes to better match the two images. Changes are made to both images, in opposite directions. Change the values for brightness and color and press the [apply] button to see the results. The "blend width" input governs how the two images are blended together: the color balance is gradually shifted over this many pixels, to mask imbalances that cannot be fully corrected. The default is 1 pixel, which makes any brightness or color differences look obvious. When done, you can use unbend, image warp, rotate, trim, and other functions for final adjustments.

Panoramas of three or more images can be done as follows: After joining the first two images, Start the panorama function again to open and join a 3rd image. In this manner you can string together several images. New images are always joined on the right.

Vertical Panoramas

Rotate the images 90° to make them match as a left-right pair. After doing the panorama, rotate them back.

Panorama Limitations
Panoramas including nearby objects can be tricky: when the two photos are made, be careful to turn the camera on a vertical axis through the lens, with minimum lateral movement, otherwise the images may align poorly due to movement of foreground objects against the background (parallax). This is not an issue when the subject is 50+ meters away, since a small lateral movement has little impact on the image.


Check Monitor
Eight color bands are written across the screen with brightness from zero (black) to 100%. You can use this to adjust the brightness and gamma of your monitor. The left end of each stripe should be as black as possible, but you should start to see some color within a few mm from the left edge. If the completely black portion is wider than this, adjust the monitor. There are 255 brightness steps from black to 100% (8 bits per color). The steps are too small to distinguish with the eye. This evaluation should be done in a darkened room (no external light falling on the monitor screen).

Index Tags and Thumbs
You need to do this after first installing fotoxx, or if you move or reorganize image files and directories. Nothing is lost when image files are moved around, but tag searching will not work, and thumbnail index windows will be slow. The index function regenerates the tags index file and the thumbnail images that make the thumbnail windows fast. A dialog will ask for the topmost directory of your image files. That directory and any subdirectories containing images will be processed. The indexing speed depends on CPU and disk speed and the size of the image files. My collection of 3087 images (1.7 GB) requires about 6 minutes. Once the images have been indexed, searching them using tags is almost instantaneous.

Brightness Graph
This function opens a small window that shows a brightness distribution graph of the current image in the main window. This graph updates immediately as edit functions change the brightness.

Clone fotoxx
Start a new instance of fotoxx in a new window, starting with the current image file. This is useful to compare images or to work with more than one image at a time.

Slide Show
The image window is enlarged to the whole desktop, and the menu and toolbar are removed. Use the keyboard for navigation (more). Use the escape key to get out of slide show mode.

Show RGB
This function changes the mouse mode. When a point on the image is left-mouse clicked, the RGB values are shown in the status bar at the bottom. The values have the format xxx.ddd, where xxx is the upper 8 bits of the color value, with range 0-255, and .ddd is the lower 8 bits, with range .000 to .999. The lower 8 bits are zero unless the image has been edited. Only the edit functions for color and brightness affect the lower 8 bits, and this data is preserved only if the image is saved in 48 bit tiff format. A right-mouse click restores the normal mouse mode (click to zoom), or the escape key can also be used.

Lens Parameters
This is a dialog for setting and saving the two lens parameters, lens_mm and lens_bow, which must be set for each camera/lens used for panoramas. These parameters govern how fotoxx "bends" the two panorama input images so that they can fit together accurately. Enter a name for the lens/camera and the two parameters. Up to four lens/cameras may be entered. Lens_mm is roughly the focal length of the lens (35mm film equivalent), and lens_bow is a factor for edge-curving distortion. How to set these parameters is described here, but you should read the section on making panoramas first, in order to better understand the following instructions.

Setting Lens Parameters Automatically

The [search] button in the panorama pre-alignment dialog initiates an automated search for optimum lens parameters. Use a suitable image pair: the subject is 50+ meters away, the images have a low horizon difference and little relative rotation, and there is plenty of high-contrast detail in the overlap area. Input your nominal lens focal length for lens_mm. Use zero for lens_bow. After doing a decent pre-align, press the [search] button and wait a while for the results. Do this a second time and observe the changes. If the values remain consistent, you can use them for your panoramas. The search function steps through a range of values for lens_mm, lens_bow, and the image alignment offsets for x, y, and theta. It searches for the lens values that give the best alignment results for the given images. The process needs a minute or more, but you only need to do this once to characterize a given camera lens. Be sure to save the results using the lens parameters menu.

Setting Lens Parameters Manually
Make a panorama image of a brick or tile wall with about 40% image overlap. Within the panorama pre-align process, adjust lens_mm and lens_bow until the overlapping bricks or tiles coincide. When making the two images, be sure to turn the camera on a vertical axis through the lens, minimizing lateral movement and rotation in other axes - otherwise the images may fit poorly and your factors may not be optimum.

Change Language
This function allows you to change the GUI to one of the available languages. If your language is not available and you know enough English, consider making a translation, which is not difficult (more).

Create Launcher
This function puts a fotoxx icon / launcher on the desktop and enters fotoxx in the menu system in the category "Graphics". Your system must be LSB compliant (Linux Standards Base).

Convert Multiple RAWs
This function converts multiple RAW files within a single directory to tiff-48 format, using the program "ufraw". First, navigate to the directory containing the RAW files, then start this function. Input a filespec with one or more wildcards to match the RAW files you want to convert, e.g. *.RAW  for Panasonic or  *.ORF  for Olympus. You can specify more wildcards to further restrict the files processed, e.g. *RICHOH*.RAW, which matches RAW files from some Richoh cameras. The files are converted one at a time and displayed in the main window. Depending on the number of files, this can take a long time (my 2.4 GHz processor does about 10 files per minute).

Burn Images to CD/DVD
This function enables you to choose image files and burn them into a CD or DVD. When the function starts, a dialog is started and a window of thumbnail images is displayed. The dialog shows a list of images for burning which is initially empty. To select an image, click its thumbnail and it will be added to the list. You can navigate the thumbnail window to other directories and choose images randomly. Click on a file in the list to show its thumbnail in the dialog and also set the current position for subsequent adds and deletes. The next image added will be inserted at this position. If the [delete] button is pressed, the current image will be deleted, and if the [insert] button is pressed, the last deleted image will be inserted at the current position. To move an image to a new position in the list: click the image file (its thumbnail will be shown), press [delete], click another image and press [insert] - the deleted image will be inserted before the selected image. The list can also be edited directly: you can use cut and paste to get the sequence you wish, but be careful to always cut and paste entire lines only. The [add_all] button will add all the files in the current thumbnail index. Thus you can use the Search Tags function to create a thumbnail index, add them all, and than make adjustments if wanted. The [burn] button will send the list of files to Brasero to burn a CD or DVD.

Tags - General Principles
Image files can have classification tags (categories, keywords) assigned to them. These can be used to search a large image library for those images having desired tags. Typical tags: the main subject of a photo, the associated event, the location, the person(s), etc. Tags reside inside the image (in the EXIF data) and are independent of its file name or directory location. You can use a directory hierarchy to make a physical organization of your images, e.g. directory names corresponding to year or location or other scheme. You can use file names for the main subject of the image. Such physical organizations are useful but optional: you can also put all your images in one giant directory and keep the numeric file names that come out of the camera. Regardless of the physical organization, "tags" can be used to create other organizations, e.g. label all the images of one person over all years, events, locations, etc. All images having a desired tag or tags can be found quickly and displayed in a pageable window of thumbnails, where you can further review the images and choose those for viewing, editing, or changing their tags.
If you have used directory and file names in a meaningful way, you can keep using these, and you can also search for images using these names as well as tags.

Images may have a date which is pulled from the image EXIF data, if present, or manually set. Images may have a "star rating" for the importance of an image. Dates and star ratings can also be used as search criteria.

The package "exiftool" must be installed for tag editing. This program is used by fotoxx to read and write the EXIF data within image files.

Limitations and Practical Tips
The following are the default limits for tags. These are compile time constants which can be easily increased if needed, although I believe they are large enough to exceed practical limits:
    o   max. tag length: 30 characters
    o   max. tags for one image file: 300 characters
    o   max. tags for all images: 1000 unique tags up to 20000 total characters
    o   max. tags in a search: 200 characters
The practical limit for the overall number of tags is in the range 100-200. Exceeding this range is possible but will lead to some practical problems: The window showing available tags will be large and tags will become hard to find (although ordered alphabetically), and the point and click method of adding tags will become more cumbersome. Typing the tags manually will work, but this may lead to typos and other tag redundancies. This is a bigger problem when tags are initially being defined for a library with thousands of images, and less of a problem afterwards when new images are added in small batches. Searching tags is also more cumbersome if the window of available tags is huge. If the tags are broadly defined and fewer in number, the search results will be larger, but using the search results thumbnail window to find a smaller set of images is also quite fast. Physical file organization is also preserved in the thumbnail window (files located together in their directories will also appear together in the search results). All in all, my recommendation for the casual photographer is to use fewer and broader tag categories. Tag search speed is thousands of images per second on a modern PC with adequate memory.

Edit Tags
Open an image file and then select the edit tags menu. Existing tags are shown in "current tags". Available tags are shown in the "assigned tags" window below. One of these tags can be added by pointing and clicking with the mouse. A tag can be deleted by pointing and clicking within the current tags. Tags recently added are shown in "recently added". This is a convenience to make adding tags to a new batch of images easier, assuming that many of the same tags will be used repeatedly. Point and click the same way. New tags that have never been used before (and do not appear in the list) can be added by typing them in and pressing [create tag].  The date of the image, if available, is shown as "photo date". This may be entered if missing, or changed. You may enter an optional "stars" rating in the stars field. Use numeric values, e.g. 5 for a 5-star rating. The dialog remains open if you navigate to a new image, and the current tags are filled-in from that image.

Search Tags
Use the search tags menu to find images having desired tags. Available tags are shown and can be chosen with point and click. Use the radio buttons to select "match all tags" or "match any tag". Press the [search] button to perform the search. Matching images are displayed in a pageable thumbnail index window. Choose images to view or edit by clicking the thumbnails. The set of matching images will remain in effect for image navigation (the buttons [prev], [next], [next page], etc.) until you use the [file] or [folder] buttons to establish a new navigation set, which will be all images in the same directory as the chosen file.

A date range may be optionally entered, to further restrict the search to images within the date range. The format is yyyymmdd. Images are selected which have a date on or after the first date, if present, and on or before the second date, if present. Missing mm or dd default to 01.

A pair of star ratings may be optionally entered to restrict the results to images having a star rating within the given range. A missing low value implies zero, and a missing high value means unlimited.

Directory and file names may also be searched, with simple wildcard matching. Example: in the input field labeled /path*/file*, enter *egypt*cairo* to select all files with "egypt" and "cairo" in the directory or file names. The matching rule is simple: * matches any sequence of characters anywhere in the full /pathname/filename. Example: the file  /home/jack/aaa/bbb/xxx.jpg  would match *aaa* and *xxx* and *aaa*xxx* but would not match aaa* or *xxx or *aaa/xxx*. You can enter multiple file search strings separated by blanks, and files matching any of the strings will be selected. Name matching is not sensitive to case: both *aaa* and *AAA* would match the previous example. Note: only the files that have been indexed (menu: tools > index tags and thumbs) are searched. This is NOT a general file search function that covers the entire file system.

To find all images with no tags, search with all-blank tags, stars, dates, and file names.


View EXIF Data
If the package exiftool is installed, the View EXIF menu will display EXIF data in the current image file, if available. EXIF data contains the date and time of a photo, shutter speed, focal length, pixel dimensions, etc. Most cameras store this data inside the image. If the image is edited and then saved, the EXIF data is updated and stored with the new image. NOTE THAT THE EXIFTOOL PACKAGE IS REQUIRED IF YOU WANT TO RETAIN EXIF DATA WHEN AN IMAGE IS MODIFIED AND SAVED.


Help Menu

About
This displays a short message about the fotoxx version number, license, home page, and credits.

User Guide
The user guide (this document) is displayed (created using the WYSIWYG HTML editor SeaMonkey).

README
Displays the README file distributed with fotoxx, which may contain new information about installation or dependencies.
When you install a new release of fotoxx, you should look at README and the Change Log to check if there is anything special you need to be aware of.

Change Log
Displays the change log file distributed with fotoxx, containing details about functional changes, additions, or bug fixes for the current and previous releases.

Translate
Displays a short text file which explains how to make a new translation or change an existing one. This involves editing a text file that contains English text messages with corresponding translations (more).

Home Page
Shows the fotoxx home page from the Internet. Look here for program updates.


Technical Notes

Translations
See the menu  Help > Translations  or the text file TRANSLATIONS for guidance on how to modify an existing translation or make a new one. This is a fairly simple process: edit a text file with English text strings followed by their corresponding translations. See one of the existing translations as an example: /usr/local/share/fotoxx/locales/fr (the French translation file). A new translation for language code xx would be saved at /usr/local/share/fotoxx/locales/xx. After making such a file, you can test it by starting fotoxx on the command line: $ fotoxx -l xx.

Command Line Options
The following command line options can be used in launchers to simplify startup:
   fotoxx /.../imagefile.jpg         #  initial image directory or file to open
   fotoxx -l lc                      #  language code to use for GUI (de, fr ...)
   fotoxx -v                         #  output version and build date and exit

Status Bar Information
The status bar contains information relevant to the current activity:
   navigation:   1234x987x24 0.45MB 56%  edits: 3
   HDR/pano:     align: 2345  offsets: +12.3 -23.4 +0.0023 +1.2 -2.3  match: 0.91234

   1234x987x24   image width x height x depth (bits per pixel)
   0.45MB        image file size (updated when a modified image is saved)
   56%           zoom status, image % size
   edits: 3      3 prior versions are saved in the undo stack
   2345          HDR or panorama alignment cycles done (progress indicator)
   +12.3 etc.    alignment offsets: x, y, theta, two y-stretch values
   0.91234       image match (creeps up as alignment improves, reset each stage)

Alignment Algorithm
5000 high-contrast or "edge" pixels are selected to control alignment in HDR and Panorama. The actual pixels used are shown in red during the alignment process, which is also entertaining.

Alpha Channels
Images having alpha channels (transparency information) can be processed, but the alpha channel is lost when the processed file is saved.

Image Deterioration From Repeated Editing
If you save an edited image file and then use this file later to perform additional edits, pixel resolution may be lost. It is better if you do all edits when the image files are first processed, to minimize image deterioration (or go back to the originals if you still have them). The following edit functions reduce resolution about 1/2 pixel, and this error can accumulate from repeated edits: rotate (other than 90 degrees), HDR, panorama, unbend, warp. Resize to a smaller size will of course reduce resolution, but using the fraction 1/2, 1/3, or 1/4 gives the best results. The following functions do not reduce resolution: flatten, brightness/color, red eye, sharpen, reduce noise, trim, all art functions.

Source Code
The C++ source code is heavily commented in the hope that others can understand and use the code for their own projects. If you have a technical question about how something works, or a better idea to pass along, you can write to me at kornelix@yahoo.de.

Questions and Problems
If you have a question or run into a problem, you can write to me at kornelix@yahoo.de. If you send any images that work poorly, I can use these to try to improve fotoxx. If there are any error messages in the log file  /home/<user>/.fotoxx/fotoxx.log  please send these also.

Technical Reference Book
I recommend the book "Introduction to Image Processing and Analysis" by Russ and Russ, CRC Press. It is clear and concise. The following algorithms were adapted from this book: flatten brightness distribution, sharpen (unsharp mask, Laplacian), noise reduction (median smoothing, top hat), simulated embossing.

Acknowledgements
I am grateful for the programs libfreeimage, ufraw, exiftool, and brasero, which have helped fotoxx evolve much faster than otherwise possible. Of course this also applies to Gnome, GTK, GDK, pixbuf library, the Gnu tools and libraries, and Linux in general.