r145: *** empty log message ***
[ctsim.git] / libctsim / imagefile.cpp
index 9ae326f73ed6de8e3bd1038ef736c645d7c7b5b5..3a1483dffd89a6a6b7a6e3f98c548fd9da3ab913 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: imagefile.cpp,v 1.7 2000/07/11 10:32:44 kevin Exp $
+**  $Id: imagefile.cpp,v 1.8 2000/07/13 07:03:21 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -47,22 +47,24 @@ ImageFile::filterResponse (const char* const domainName, double bw, const char*
 }
 
 int
-ImageFile::display (void)
+ImageFile::display (void) const
 {
     double pmin, pmax;
 
-    //    getPixelValueRange (pmin, pmax);
+    getMinMax (pmin, pmax);
 
     return (displayScaling (1, pmin, pmax));
 }
 
 int 
-ImageFile::displayScaling (const int scale, const ImageFileValue pmin, const ImageFileValue pmax)
+ImageFile::displayScaling (const int scale, const ImageFileValue pmin, const ImageFileValue pmax) const
 {
     int grayscale[256];
     int nx = m_nx;
     int ny = m_ny;
-    ImageFileArray v = getArray();
+    ImageFileArrayConst v = getArray();
+    if (v == NULL || nx == 0 || ny == 0)
+      return 0;
 
 #if HAVE_G2_H
     int pens [nx * ny * scale * scale ];
@@ -113,11 +115,14 @@ ImageFile::comparativeStatistics (const ImageFile& imComp, double& d, double& r,
        return false;
     }
     ImageFileArrayConst v = getArray();
+    if (v == NULL || m_nx == 0 || m_ny == 0)
+      return false;
+
     ImageFileArrayConst vComp = imComp.getArray();
 
     double myMean = 0.;
-    for (int ix = 0; ix < m_nx; ix++) {
-       for (int iy = 0; iy < m_ny; iy++) {
+    for (unsigned int ix = 0; ix < m_nx; ix++) {
+       for (unsigned int iy = 0; iy < m_ny; iy++) {
            myMean += v[ix][iy];
        }
     }
@@ -127,8 +132,8 @@ ImageFile::comparativeStatistics (const ImageFile& imComp, double& d, double& r,
     double absErrorSum = 0.;
     double sqDiffFromMeanSum = 0.;
     double absValueSum = 0.;
-    for (int ix = 0; ix < m_nx; ix++) {
-       for (int iy = 0; iy < m_ny; iy++) {
+    for (unsigned int ix = 0; ix < m_nx; ix++) {
+       for (unsigned int iy = 0; iy < m_ny; iy++) {
            double diff = v[ix][iy] - vComp[ix][iy];
            sqErrorSum += diff * diff;
            absErrorSum += fabs(diff);
@@ -169,7 +174,9 @@ ImageFile::printComparativeStatistics (const ImageFile& imComp, ostream& os) con
     os << "  Normalized root mean squared distance (d): " << d << endl;
     os << "      Normalized mean absolute distance (r): " << r << endl;
     os << "Worst case distance (2x2 pixel average) (e): " << e << endl;
+    return true;
   }
+  return false;
 }
 
 
@@ -196,6 +203,9 @@ ImageFile::statistics (double& min, double& max, double& mean, double& mode, dou
     int ny = m_ny;
     ImageFileArrayConst v = getArray();
     
+    if (v == NULL || nx == 0 || ny == 0)
+      return;
+
     mean = 0;
     min = v[0][0];
     max = v[0][0];
@@ -240,6 +250,28 @@ ImageFile::statistics (double& min, double& max, double& mean, double& mode, dou
 }
 
 
+void
+ImageFile::getMinMax (double& min, double& max) const
+{
+    int nx = m_nx;
+    int ny = m_ny;
+    ImageFileArrayConst v = getArray();
+    
+    if (v == NULL || nx == 0 || ny == 0)
+      return;
+
+    min = v[0][0];
+    max = v[0][0];
+    for (int ix = 0; ix < nx; ix++) {
+      for (int iy = 0; iy < ny; iy++) {
+       if (v[ix][iy] > max)
+         max = v[ix][iy];
+       if (v[ix][iy] < min)
+         min = v[ix][iy];
+      }
+    }
+}
+
 void 
 ImageFile::writeImagePGM (const char *outfile, int nxcell, int nycell, double densmin, double densmax)
 {