# pnmpsnr - compute the difference between two images (the PSNR) - man(1) - [phpMan]

> **TLDR:** Compute the difference between two images.
>
- Compute the difference, i.e. the peak signal-to-noise ratio (PSNR) between two images:
  `pnmpsnr {{path/to/file1.pnm}} {{path/to/file2.pnm}}`
- Compare the color components rather than the luminance and chrominance components of the images:
  `pnmpsnr {{path/to/file1.pnm}} {{path/to/file2.pnm}} -rgb`
- Run in comparison mode, i.e. only output `nomatch` or `match` depending on whether the computing PSNR exceeds `n` or not:
  `pnmpsnr {{path/to/file1.pnm}} {{path/to/file2.pnm}} -target {{n}}`
- Run in comparison mode and compare the individual image components, i.e. Y, Cb, and Cr, to the corresponding thresholds:
  `pnmpsnr {{path/to/file1.pnm}} {{path/to/file2.pnm}} -target1 {{threshold_Y}} -target2 {{threshold_Cb}} -target3 {{threshold_Cr}}`
- Run in comparison mode and compare the individual image components, i.e. red, green, and blue to the corresponding thresholds:
  `pnmpsnr {{path/to/file1.pnm}} {{path/to/file2.pnm}} -rgb -target1 {{threshold_red}} -target2 {{threshold_green}} -target3 {{threshold_blue}}`
- Produce machine-readable output:
  `pnmpsnr {{path/to/file1.pnm}} {{path/to/file2.pnm}} -machine`

*Source: tldr-pages*

---

_Pnmpsnr_ _User_ [_Manual_(1)](https://www.chedong.com/phpMan.php/man/Manual/1/markdown)                 General Commands Manual                _Pnmpsnr_ _User_ [_Manual_(1)](https://www.chedong.com/phpMan.php/man/Manual/1/markdown)

## NAME
       pnmpsnr - compute the difference between two images (the PSNR)


## SYNOPSIS
### pnmpsnr

       [_pnmfile1_]

       [_pnmfile2_]

       [**-rgb**] [**-machine**] [**-max=_**n_] [**-target=_**n_] [**-target1=_**n_] [**-target2=_**n_] [**-target3=_**n_]

       Minimum  unique  abbreviations of options are acceptable.  You may use double hyphens instead
       of single hyphen to denote options.  You may use white space in place of the equals  sign  to
       separate an option name from its value.



## DESCRIPTION
       This program is part of [**Netpbm**(1)](https://www.chedong.com/phpMan.php/man/Netpbm/1/markdown).

       **pnmpsnr  **reads two PBM, PGM, or PPM files, or PAM equivalents, as input and computes the mag‐
       nitude of difference between the two images as a peak signal-to-noise ratio (PSNR) This  met‐
       ric is typically used in image compression papers to rate the distortion between original and
       decoded image.

       **pnmpsnr **either prints these values or compares them to thresholds you specify.


       The PSNR of a given component is the ratio of the maximum mean square difference of component
       values  that  could  exist between the two images (a measure of the information content in an
       image) to the actual mean square difference for the two subject images.  It is expressed as a
       decibel value.

       The mean square difference of a component for two images is the mean square difference of the
       component value, comparing each pixel with the pixel in the same position of the other image.
       For the purposes of this computation, components are normalized to the scale [0..1].

       The maximum mean square difference is identically 1.

       So the higher the PSNR, the closer the images are.  A luminance PSNR of  20  means  the  mean
       square difference of the luminances of the pixels is 100 times less than the maximum possible
       difference, i.e. 0.01.

       Note  that the word "peak" is a misnomer; there is no maximum involved; the metric is a mean.
       But "peak signal to noise ratio" is for some reason the common term for this measurement.

       If the inputs are PBM or PGM, **pnmpsnr **computes the PSNR of the luminance only.  Otherwise, it
       computes three separate PSNRs: either the luminance, and chrominance (Cb and  Cr)  components
       of the colors or the red, green, and blue components.

       By default, the program prints the PSNRs to Standard Output in human-friendly form.

       With the **-machine **option, the program prints the PSNRs, but in machine-friendly form.

       With  a **-target**[_x_] option, the program just prints 'match' or 'nomatch', depending on whether
       the PSNRs exceed targets you specify.


       **pnmpsnr **reports the PSNR either in human-friendly form or in machine-friendly form (see  **-ma‐**
       **chine**).



## OPTIONS
       In  addition  to  the options common to all programs based on libnetpbm (most notably **-quiet**,
       see [ Common Options](index.html#commonoptions) ), **pnmpsnr **recognizes the following command line options:



### -rgb   
              rather than the luminance and chrominance components.  It has no effect on a  monotone
              image.

              This option was new in Netpbm 10.71 (June 2015).


### -machine
              This  option  causes  **pnmpsnr **to report the PSNRs in machine-friendly form, so another
              program can easily use the information.

              The output is a single line.  It contains one floating point decimal number  for  each
              color  component, with a single space between every two.  (This means there are either
              1 or 3 numbers).  For the YCbCr color space (no **-rgb**), they are in the  order  Y,  Cb,
              Cr.  For the RGB color space (**-rgb**), they are in R, G, B order.  For a monotone image,
              there is one number.

              Where  the  component does not differ between the images, so the PSNR is infinite, the
              number is **inf**

              But note that the number displayed is also modified by the effect of **-max**.  In partic‐
              ular, with **-max**, you will never see **inf**.

              This option has no effect when you also specify **-target**[_n_].

              This option was new in Netpbm 10.74 (March 2016).


### -max=_ -machine

              It specifies the maximum number **pnmpsnr **will print as a PSNR.  If the PSNR is  greater
              than  _n_,  **pnmpsnr  **just  prints _n_.  _n_ is a decimal floating point number.  An infinite
              PSNR is considered greater than any number.

              This is mainly useful to deal with infinite PSNRs.  It is often much  more  convenient
              to have a program process only numbers than to make it deal with infinity, and often a
              very large number has the same effect on a program as infinity.

              Note that the output is logarithmic, which means you will not see really large but fi‐
              nite  numbers.  If you specify **-max=1000**, the only way you will see 1000 in the output
              is if the PSNR is really infinite.  Two images with as many pixels as there are  elec‐
              trons  in  the  universe, differing in only one pixel, and only in the smallest amount
              representable in the Netpbm format, have a PSNR less than 1000.

              This option was new in Netpbm 10.74 (March 2016).


### -target

              This option causes **pnmpsnr **to run in comparison mode - rather than print the PSNRs, it
              just tells you whether the PSNRs exceed _n_ (a floating point number), i.e. whether  the
              compared  images  are  the  same  within a given margin of error.  If all the computed
              PSNRs (luminance for a PBM or PGM; luminance and chrominance or red, green,  and  blue
              for  PPM)  exceed  _n_,  the  program  prints 'match' to Standard Output.  Otherwise, it
              prints 'nomatch'.

              If you also specify any of **-target1**, **-target2**, or **-target3**, and the images are  color,
              **pnmpsnr **ignores **-target**.

              This  is  mainly useful for use in a program.  If you're running **pnmpsnr **manually, you
              could just run **pnmpsnr **without **-target **and compare the PSNRs to your targets yourself.

              This option was new in Netpbm 10.82 (March 2018).


### -target
              Like **-target**, these options cause **pnmpsnr **to run in comparison mode.  But they provide
              separate targets for the individual color component PSNRs.   **-target1**,  **target-2**,  and
              **-target3 **are for either the Y, Cb, and Cr components, respectively, or the red, green,
              and blue components, respectively, depending upon whether you specified **-rgb**.

              If  you  don't  specify the corresponding **-target_**n_ option for a component, **pnmpsnr **ig‐
              nores the PSNR of that component in deciding whether the images match.

              If the image is a PBM or PGM, these options have no effect, except that it stilll  se‐
              lects  comparison  mode, so if you don't _also_ specify **-target**, and the image is PBM or
              PGM, the program fails.

              Note that the options are defined so that you could code a **pnmpsnr **command in  a  pro‐
              gram  that works on both color and monotone images, specifying individual PSNR targets
              for use on the color images and the single target for use on the monotone images.

              These options were new in Netpbm 10.82 (March 2018).





## SEE ALSO
       [**pnm**(1)](https://www.chedong.com/phpMan.php/man/pnm/1/markdown)

## DOCUMENT SOURCE
       This manual page was generated by the Netpbm tool 'makeman' from  HTML  source.   The  master
       documentation is at

              **<http://netpbm.sourceforge.net/doc/pnmpsnr.html>**

netpbm documentation                       06 January 2018                    _Pnmpsnr_ _User_ [_Manual_(1)](https://www.chedong.com/phpMan.php/man/Manual/1/markdown)
