diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2009-05-18 18:08:21 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2009-05-18 18:08:21 +0000 |
commit | 09659df8334da2beb4348f3c858c75e451b54b9e (patch) | |
tree | ee9debbd35ed1f782f4709fa6b3044f55b7df16c /analyzer | |
parent | c93bc1c6285eac9c081885acef1718060b0df6b8 (diff) | |
download | netpbm-mirror-09659df8334da2beb4348f3c858c75e451b54b9e.tar.gz netpbm-mirror-09659df8334da2beb4348f3c858c75e451b54b9e.tar.xz netpbm-mirror-09659df8334da2beb4348f3c858c75e451b54b9e.zip |
Don't report images are identical unless they really are
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@926 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'analyzer')
-rw-r--r-- | analyzer/pnmpsnr.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/analyzer/pnmpsnr.c b/analyzer/pnmpsnr.c index fd730606..24517c63 100644 --- a/analyzer/pnmpsnr.c +++ b/analyzer/pnmpsnr.c @@ -100,6 +100,11 @@ reportPsnr(struct pam const pam, double const yPsnr = square(pam.maxval) / (ySumSqDiff / (pam.width * pam.height)); + /* Note that in the important special case that the images are + identical, the sum square differences are identically 0.0. No + precision error; no rounding error. + */ + if (color) { double const cbPsnr = square(pam.maxval) / (cbSumSqDiff / (pam.width * pam.height)); @@ -107,20 +112,20 @@ reportPsnr(struct pam const pam, square(pam.maxval) / (crSumSqDiff / (pam.width * pam.height)); pm_message("PSNR between %s and %s:", filespec1, filespec2); - if (yPsnr < 1e10) + if (ySumSqDiff > 0) pm_message("Y color component: %.2f dB", 10 * log10(yPsnr)); else pm_message("Y color component does not differ."); - if (cbPsnr < 1e10) + if (cbSumSqDiff > 0) pm_message("Cb color component: %.2f dB", 10 * log10(cbPsnr)); else - pm_message("Cb color component does not differ."); - if (crPsnr < 1e10) + pm_message("Cb color component does not differ."); + if (crSumSqDiff > 0) pm_message("Cr color component: %.2f dB", 10 * log10(crPsnr)); else pm_message("Cr color component does not differ."); } else { - if (yPsnr < 1e10) + if (ySumSqDiff == 0) pm_message("PSNR between %s and %s: %.2f dB", filespec1, filespec2, 10 * log10(yPsnr)); else @@ -187,8 +192,8 @@ main (int argc, char **argv) { crSumSqDiff += crSqDiff; } else { - unsigned int yDiffSq; - yDiffSq = square(udiff(tuplerow1[col][0], tuplerow2[col][0])); + unsigned int const yDiffSq = + square(udiff(tuplerow1[col][0], tuplerow2[col][0])); ySumSqDiff += yDiffSq; } } |