Provided by: unpaper_7.0.0-3build1_amd64 bug

NAME

       unpaper - unpaper

SYNOPSIS

       unpaper [options] (input patterns output patterns | input files output files)

OVERVIEW

       unpaper  is  a post-processing tool for scanned sheets of paper, especially for book pages that have been
       scanned from previously created photocopies. The main purpose  is  to  make  scanned  book  pages  better
       readable  on screen after conversion to PDF. Additionally, unpaper might be useful to enhance the quality
       of scanned pages before performing optical character recognition (OCR).

       unpaper tries to clean scanned images by removing dark edges that appeared through scanning or copying on
       areas outside the actual page content (e.g. dark areas between the left-hand-side and the right-hand-side
       of a double- sided book-page scan). The program also tries to detect misaligned centering and rotation of
       pages and will automatically straighten each page by rotating it to the correct angle.  This  process  is
       called  "deskewing".  Note that the automatic processing will sometimes fail. It is always a good idea to
       manually control the results of unpaper and adjust the parameter settings according to  the  requirements
       of the input. Each processing step can also be disabled individually for each sheet.

       Input and output files can be in either .pbm, .pgm or .ppm format, thus generally in .pnm format, as also
       used  by the Linux scanning tools scanimage and scanadf. Conversion to PDF can e.g.  be achieved with the
       Linux tools pgm2tiff, tiffcp and tiff2pdf.

INPUT AND OUTPUT FILES

       Input and output files need to be designed either by using patterns or  an  ordered  list  of  input  and
       output  files;  if  patterns  are  used, such as %04d, then they are substituted for the input and output
       sheet number before opening the file for input or output.

       If you're not using patterns, then the program expects one or two input files depending on what is passed
       as --input-pages and one or two output files depending on what is passed as --output-pages, in order.

       Missing output file names are fatal and will stop processing; missing initial input file names are fatal,
       and so is any missing input file if a range of sheets is defined through --sheet or --end-sheet.

       unpaper accepts files in PNM format, which means they might be in .pbm, .pgm, .ppm or .pnm format,  which
       is what is produced by Linux command line scanning tools such as scanimage and scanadf.

OPTIONS

       -l { single | double | none } ; --layout { single | double | none }
              Set default layout options for a sheet:

              single One page per sheet.

              double Two  pages  per  sheet,  landscape  orientation (one page on the left half, one page on the
                     right half).

              none   No auto-layout, mask-scan-points may individually be specified.

              Using single or double automatically sets corresponding --mask-scan-points. The default is single.

       -start sheet ; --start-sheet start-sheet
              Number of first sheet to process in multi-sheet mode. (default: 1)

       -end sheet ; --end-sheet sheet
              Number of last sheet to process in multi-sheet mode. -1 indicates processing until no  more  input
              file with the corresponding page number is available (default: -1)

       -# sheet-range ; --sheet sheet-range
              Optionally specifies which sheets to process in the range between start-sheet and end-sheet.

       -x sheet-range ; --exclude sheet-range
              Excludes sheets from processing in the range between start-sheet and end-sheet.

       --pre-rotate { -90 | 90 }
              Rotates the whole image clockwise (90) or anti-clockwise (-90) before any other processing.

       --post-rotate { -90 | 90 }
              Rotates the whole image clockwise (90) or anti-clockwise (-90) after any other processing.

       -M { v | h | v,h } ; --pre-mirror { v | h | v,h }
              Mirror  the  image,  after  possible  pre-rotation.  Either  v  (for  vertical  mirroring), h (for
              horizontal mirroring) or v,h (for both) can be specified.

       --post-mirror { v | h | v,h }
              Mirror the image, after any other processing except possible post-rotation. Either v (for vertical
              mirroring), h (for horizontal mirroring) or v,h (for both) can be specified.

       --pre-shift h, v
              Shift the image before further processing. Values for h (horizontal shift) and v (vertical  shift)
              can either be positive or negative.

       --post-shift h, v
              Shift the image after other processing. Values for h (horizontal shift) and v (vertical shift) can
              either be positive or negative.

       --pre-wipe left, top, right, bottom
              Manually  wipe  out  an  area  before further processing. Any pixel in a wiped area will be set to
              white. Multiple areas to be wiped may be specified by multiple occurrences of this options.

       --post-wipe left, top, right, bottom
              Manually wipe out an area after processing. Any pixel in a  wiped  area  will  be  set  to  white.
              Multiple areas to be wiped may be specified by multiple occurrences of this options.

       --pre-border left, top, right, bottom
              Clear the border-area of the sheet before further processing. Any pixel in the border area will be
              set to white.

       --post-border left, top, right, bottom
              Clear  the  border-area  of the sheet after other processing. Any pixel in the border area will be
              set to white.

       --pre-mask x1, y1, x2, y2
              Specify masks to apply before any other processing. Any pixel outside a mask will be set to white,
              unless another mask includes this pixel.

              Only pixels inside a mask will remain. Multiple masks may  be  specified.  No  deskewing  will  be
              applied to the masks specified by --pre-mask.

       -s { width, height | size-name } ; --size { width, height | size-name }
              Change  the sheet size before other processing is applied. Content on the sheet gets zoomed to fit
              to the appropriate size, but the aspect ratio is preserved. Instead, if the sheet's  aspect  ratio
              changes, the zoomed content gets centered on the sheet.

              Possible  values  for size-name are: a5, a4, a3, letter, legal. All size names can also be applied
              in rotated landscape orientation, use a4-landscape, letter-landscape etc.

       --post-size { width, height | size-name }
              Change the sheet size preserving the content's aspect  ratio  after  other  processing  steps  are
              applied.

       --stretch { width, height | size-name }
              Change  the  sheet size before other processing is applied. Content on the sheet gets stretched to
              the specified size, possibly changing the aspect ratio.

       --post-stretch { width, height | size-name }
              Change the sheet size after other processing is applied. Content on the sheet  gets  stretched  to
              the specified size, possibly changing the aspect ratio.

       -z factor ; --zoom factor
              Change the sheet size according to the given factor before other processing is done.

       --post-zoom factor
              Change the sheet size according to the given factor after processing is done.

       -bn { v | h | v, h } ; --blackfilter-scan-direction { v | h | v, h }
              Directions  in  which to search for solidly black areas. Either v (for vertical searching), h (for
              horizontal searching) or v,h (for both) can be  specified.  The  blackfilter  works  by  moving  a
              virtual  bar across each page. The darkness inside the virtual bar is determined and if it exceeds
              blackfilter-scan-threshold black pixels in the area are filled. During filling  the  blackness  of
              each pixel is determined by black-threshold. The bar is then moved by blackfilter-scan-step in the
              scanning  direction.  Once a page border is encountered the bar is moved down (horizontal scan) or
              right (vertical scan) by its blackfilter-scan-size.

       -bs { size | h-size, v-size } ; --blackfilter-scan-size { size | h-size, v-size }
              Size of virtual bar in direction of scanning  (meaning  width  for  horizontal  pass,  height  for
              vertical  pass) used for black area detection. Two values may be specified to individually set the
              size for the horizontal scanning-pass and the vertical pass. (default: 20,20)

       -bd { depth | h-depth, v-depth } ; --blackfilter-scan-depth { depth | h-depth, v-depth }
              Depth of virtual bar in non-scanning direction (meaning height  for  horizontal  pass,  width  for
              vertical  pass) used for black area detection. Two values may be specified to individually set the
              depth for the horizontal scanning-pass and the vertical pass. (default: 500,500)

       -bp { step | h-step, v-step } ; --blackfilter-scan-step { step | h-step, v-step }
              Steps to move virtual bar for black area detection. Two values may be  specified  to  individually
              set the step for the horizontal scanning-pass and the vertical pass. (default: 5,5)

       -bt threshold ; --blackfilter-scan-threshold threshold
              Ratio of dark pixels above which a black area gets detected.  (default: 0.95).

       -bx left, top, right, bottom ; --blackfilter-scan-exclude left, top, right, bottom
              Area  on  which  the blackfilter should not operate. This can be useful to prevent the blackfilter
              from working on inner page content. May be specified multiple times to set more than one area.

       -bi intensity ; --blackfilter-intensity intensity
              Intensity with which to delete black areas. This deletes  pixels  around  the  virtual  scan  bar.
              Larger values will leave less noise-pixels around former black areas, but may delete page content.
              (default: 20)

       -ni intensity ; -noisefilter-intensity intensity
              Intensity  with  which  to  delete individual pixels or tiny clusters of pixels. Any cluster which
              only contains intensity dark pixels together will be deleted. (default: 4)

       -ls { size | h-size, v-size } ; --blurfilter-size { size | h-size, v-size }
              Size of blurfilter area to search for "lonely" clusters of pixels.  (default: 100,100)

       -lp { step | h-step, v-step } ; --blurfilter-step { step | h-step, v-step }
              Size of "blurring" steps in each direction. (default: 50,50)

       -li ratio ; --blurfilter-intensity ratio
              Relative intensity with which to delete tiny clusters of pixels. Any blurred area  which  contains
              at most the ratio of dark pixels will be cleared. (default: 0.01)

       -gs { size | h-size, v-size } ; --grayfilter-size { size | h-size, v-size }
              Size of grayfilter mask to search for "gray-only" areas of pixels.  (default: 50,50)

       -gp { step | h-step, v-step } ; --grayfilter-step { step | h-step, v-step }
              Size of steps moving the grayfilter mask in each direction. (default: 20,20)

       -gt ratio ; --grayfilter-threshold ratio
              Relative  intensity  of  grayness  which  is accepted before clearing the grayfilter mask in cases
              where no black pixel is found in the mask.  (default: 0.5)

       -p x, y; --mask-scan-point x, y
              Manually set  starting  point  for  mask-detection.  Multiple  --mask-scan-point  options  may  be
              specified to detect multiple masks.

       -m x1, y1, x2, y2; --mask x1, y1, x2, y2
              Manually  add  a  mask,  in  addition to masks automatically detected around the --mask-scan-point
              coordinates (unless --no-mask-scan is specified).

              Any pixel outside a mask will be set to white, unless another mask covers this pixel.

       -mn { v \| h \| v,h }; --mask-scan-direction { v \| h \| v,h }
              Directions in which to search for  mask  borders,  starting  from  --mask-scan-point  coordinates.
              Either  v  (for  vertical  mirroring),  h  (for  horizontal  mirroring)  or  v,h (for both) can be
              specified. (default: h, as v may cut text- paragraphs on single-page sheets)

       -ms { size \| h-size, v-size }; --mask-scan-size { size \| h-size, v-size }
              Width of the virtual bar used for mask detection. Two values may be specified to individually  set
              horizontal and vertical size. (default: 50,50)

       -md { depth \| h-depth, v-depth }; --mask-scan-depth { depth \| h-depth, v-depth }
              Height  of  the  virtual  bar  used  for mask detection. (default: -1,-1, using the total width or
              height of the sheet)

       -mp { step \| h-step, v-step }; --mask-scan-step { step \| h-step, v-step }
              Steps to move the virtual bar for mask detection. (default: 5,5)

       -mt { threshold \| h-threshold, v-threshold }; --mask-scan-threshold { threshold \| h-threshold,
       v-threshold }
              Ratio of dark pixels below which an  edge  gets  detected,  relative  to  maximum  blackness  when
              counting from the start coordinate heading towards one edge. (default: 0.1)

       -mm w, h; --mask-scan-minimum w, h
              Minimum  allowed size of an auto-detected mask. Masks detected below this size will be ignored and
              set to the size specified by mask-scan-maximum. (default: 100,100)

       -mM w, h; --mask-scan-maximum w, h
              Maximum allowed size of an auto-detected mask. Masks detected above this size will  be  shrunk  to
              the  maximum  value,  each direction individually. (default: sheet size, or page size derived from
              --layout option)

       -mc color; --mask-color color
              Color value with which to wipe out pixels not covered by any mask.  Maybe useful  for  testing  in
              order  to visualize the effect of masking.  (Note that an RGB-value is expected: R*65536 + G*256 +
              B.)

       -dn { left \| top \| right \| bottom },...; --deskew-scan-direction { left \| top \| right \| bottom
       },...
              Edges from which to scan for rotation. Each edge of a mask  can  be  used  to  detect  the  mask's
              rotation.  If multiple edges are specified, the average value will be used, unless the statistical
              deviation exceeds --deskew-scan-deviation. Use left for scanning  from  the  left  edge,  top  for
              scanning  from  the top edge, right for scanning from the right edge, bottom for scanning from the
              bottom. Multiple directions can be separated by commas. (default: left,right)

       -ds pixels; --deskew-scan-size pixels
              Size of virtual line for rotation detection. (default: 1500)

       -dd ratio; --deskew-scan-depth ratio
              Amount of dark pixels to  accumulate  until  scanning  is  stopped,  relative  to  scan-bar  size.
              (default: 0.5)

       -dr degrees; --deskew-scan-range degrees
              Range in which to search for rotation, from -degrees to +degrees rotation. (default: 5.0)

       -dp degrees; --deskew-scan-step degrees
              Steps between single rotation-angle detections. Lower numbers lead to better results but slow down
              processing. (default: 0.1)

       -dv deviation; --deskew-scan-deviation deviation
              Maximum  statistical  deviation  allowed  among  the  results  from detected edges. No rotation if
              exceeded. (default: 1.0)

       -W left, top, right, bottom; --wipe left, top, right, bottom
              Manually wipe out an area. Any pixel in a wiped area will be set to white. Multiple  --wipe  areas
              may be specified. This is applied after deskewing and before automatic border-scan.

       -mw { size \| left, right }; --middle-wipe { size \| left, right }
              If  --layout  is set to double, this may specify the size of a middle area to wipe out between the
              two pages on the sheet. This may be useful if the blackfilter fails to  remove  some  black  areas
              (e.g.  resulting from photo-copying in the middle between two pages).

       -B left, top, right, bottom; --border left, top, right, bottom
              Manually  add  a  border. Any pixel in the border area will be set to white. This is applied after
              deskewing and before automatic border-scan.

       -Bn { v \| h \| v,h }; --border-scan-direction { v \| h \| v,h }
              Directions in which to search for  outer  border.  Either  v  (for  vertical  mirroring),  h  (for
              horizontal mirroring) or v,h (for both) can be specified. (default: v)

       -Bs { size \| h-size, v-size }; --border-scan-size { size \| h-size, v-size }
              Width  of  virtual  bar used for border detection. Two values may be specified to individually set
              horizontal and vertical size. (default: 5,5)

       -Bp { step \| h-step, v-step }; --border-scan-step { step \| h-step, v-step }
              Steps to move virtual bar for border detection. (default: 5,5)

       -Bt threshold; --border-scan-threshold threshold
              Absolute number of dark pixels covered by the border-scan mask above which a border  is  detected.
              (default: 5)

       -Ba { left \| top \| right \| bottom }; --border-align { left \| top \| right \| bottom }
              Direction  where  to shift the detected border-area. Use --border-margin to specify horizontal and
              vertical distances to be kept from the sheet-edge. (default: none)

       -Bm vertical, horizontal; --border-margin vertical, horizontal
              Distance to keep from the sheet edge when aligning a border area.  May  use  measurement  suffices
              such as cm, in.

       -w threshold; --white-threshold threshold
              Brightness ratio above which a pixel is considered white. (default: 0.9)

       -b threshold; --black-threshold threshold
              Brightness  ratio  below  which  a  pixel  is  considered  black  (non-gray).  This is used by the
              gray-filter and the blackfilter. This value is also used when  converting  a  grayscale  image  to
              black-and-white mode (default: 0.33)

       -ip { 1 \| 2 }; --input-pages { 1 \| 2 }
              If  2  is  specified,  read  two  input  images  instead  of  one and internally combine them to a
              doubled-layout sheet before further processing. Before  internally  combining,  --pre-rotation  is
              optionally applied individually to both input images as the very first processing steps.

       -op { 1 \| 2 }; --output-pages { 1 \| 2 }
              If  2  is  specified,  write  two  output  images  instead  of  one,  as  a  result of splitting a
              doubled-layout sheet after processing. After splitting the sheet,  --post-rotation  is  optionally
              applied individually to both output images as the very last processing step.

       -S { width, height \| size-name }; --sheet-size { width, height \| size-name }
              Force  a  fix  sheet  size.  Usually,  the  sheet  size  is determined by the input image size (if
              input-pages=1),  or  by  the  double  size  of  the  first  page  in  a  two-page  input  set  (if
              input-pages=2).  If  the  input  image  is  smaller  than  the size specified here, it will appear
              centered and surrounded with a white border on the sheet. If the input image is bigger, it will be
              centered and the edges will be cropped. This option may also  be  helpful  to  get  regular  sized
              output images if the input image sizes differ. Standard size-names like a4-landscape, letter, etc.
              may be used (see --size).  (default: as in input file)

       --sheet-background { black \| white }
              Sets  a  color  with which the sheet is filled before any image is loaded and placed onto it. This
              can be useful when the sheet size and the image size differ.

       --no-blackfilter sheet-range
              Disables black area scan. Individual sheet indices can be specified.

       --no-noisefilter sheet-range
              Disables the noisefilter. Individual sheet indices can be specified.

       --no-blurfilter sheet-range
              Disables the blurfilter. Individual sheet indices can be specified.

       --no-grayfilter sheet-range
              Disables the grayfilter. Individual sheet indices can be specified.

       --no-mask-scan sheet-range
              Disables mask-detection. Masks explicitly set by --mask will still have effect.  Individual  sheet
              indices can be specified.

       --no-mask-center sheet-range
              Disables  auto-centering  of  each  mask.  Auto-centering  is performed by default if the --layout
              option has been set. Individual sheet indices can be specified.

       --no-deskew sheet-range
              Disables deskewing. Individual sheet indices can be specified.

       --no-wipe sheet-range
              Disables explicit  wipe-areas.  This  means  the  effect  of  parameter  --wipe  can  be  disabled
              individually per sheet.

       --no-border sheet-range
              Disables  explicitly  set  borders.  This  means  the effect of parameter --border can be disabled
              individually per sheet.

       --no-border-scan sheet-range
              Disables border-scanning from the edges of the sheet. Individual sheet indices can be specified.

       --no-border-align sheet-range
              Disables aligning of the area detected by border-scanning (see --border-align).  Individual  sheet
              indices can be specified.

       -n sheet-range; --no-processing sheet-range
              Do  not  perform  any processing on a sheet except pre/post rotating and mirroring, and file-depth
              conversions on saving. This option has the same effect as setting all --no-xxx  options  together.
              Individual sheet indices can be specified.

       --interpolate { nearest \| linear \| cubic }
              Set  the  interpolation  function used for deskewing and stretching. The cubic option provides the
              best image quality, while nearest is the fastest. (default: cubic)

       --no-multi-pages
              Disable multi-page processing even if the input filename contains  a  %  (usually  indicating  the
              start of a placeholder for the page counter).

       --dpi dpi
              Dots  per inch used for conversion of measured size values, like e.g.  21cm,27.9cm. Mind that this
              parameter should occur before specifying any size value with measurement suffix. (default: 300)

       -t { pbm \| pgm \| ppm }; --type { pbm \| pgm> \| ppm }
              Output file type (and bit depth). If not specified, the one  with  the  same,  or  closest,  pixel
              format as the original input files will be used.

              pbm    Portable Bit Map, monochrome raw image.

              pgm    Portable Grayscale Map, 8-bit per pixel grayscale raw image.

              ppm    Portable Pixel Map, 24-bit per pixel RGB raw image.

       -T ; --test-only
              Do  not write any output. May be useful in combination with --verbose to get information about the
              input.

       -si nr; --start-input nr
              Set the first page number to substitute for '%d' in input filenames.  Every time  the  input  file
              sequence is repeated, this number gets increased by 1. (default: (startsheet-1)*inputpages+1)

       -so nr; --start-output nr
              Set  the first page number to substitute for '%d' in output filenames.  Every time the output file
              sequence is repeated, this number gets increased by 1. (default: (startsheet-1)*outputpages+1)

       --insert-blank nr [,nr...]
              Use blank input instead  of  an  input  file  from  the  input  file  sequence  at  the  specified
              index-positions.  The  input  file sequence will be interrupted temporarily and will continue with
              the next input file afterwards. This can be useful to insert blank  content  into  a  sequence  of
              input images.

       --replace-blank nr [,nr...]
              Like --insert-blank, but the input images at the specified index positions get replaced with blank
              content and thus will be ignored.

       --overwrite
              Allow overwriting existing files. Otherwise the program terminates with an error if an output file
              to be written already exists.

       -q ; --quiet
              Quiet mode, no output at all.

       -v ; --verbose
              Verbose output, more info messages.

       -vv    Even more verbose output, show parameter settings before processing.

       -V ; --version
              Output version and build information.

AUTHOR

       The unpaper authors

COPYRIGHT

       2023, The unpaper Authors

                                                  Jul 29, 2023                                        UNPAPER(1)