[gdal-dev] Compute statistis and ignoring nodata value

Michael ODonnell odonnems at yahoo.com
Wed Apr 14 22:39:52 EDT 2010


Even,

Thank you for your help. It took me a few attempts but you were correct. I was trying to use the minimum value for a 32bit floating data set as my null data value and my number was not exact--as you suggested.

I was using: -3.4028235e+038
And needed to use: -3.4028234663852886e+038

Once I made this correction, everything worked as expected.

Thanks again for your assistance,
Mike

--- On Wed, 4/14/10, Even Rouault <even.rouault at mines-paris.org> wrote:

> From: Even Rouault <even.rouault at mines-paris.org>
> Subject: Re: [gdal-dev] Compute statistis and ignoring nodata value
> To: gdal-dev at lists.osgeo.org
> Cc: "Michael ODonnell" <odonnems at yahoo.com>
> Date: Wednesday, April 14, 2010, 2:31 PM
> Michael,
> 
> ComputeStatistics() is supposed to ignore pixels whose
> value is the nodata 
> value. I've tried the following test code to try to
> reproduce your issue :
> 
> #include <gdal.h>
> 
> int main(int argc, char* argv[])
> {
>     GDALAllRegister();
>     GDALDatasetH hDS =
> GDALCreate(GDALGetDriverByName("GTiff"), "test.tif", 3, 
> 1, 1, GDT_Byte, NULL);
>     GDALRasterBandH hBand =
> GDALGetRasterBand(hDS, 1);
>     char chVal;
>     chVal = 0;
>     GDALRasterIO(hBand, GF_Write, 0, 0, 1, 1,
> &chVal, 1, 1, GDT_Byte, 0, 0);
>     chVal = 100;
>     GDALRasterIO(hBand, GF_Write, 1, 0, 1, 1,
> &chVal, 1, 1, GDT_Byte, 0, 0);
>     chVal = 2;
>     GDALRasterIO(hBand, GF_Write, 2, 0, 1, 1,
> &chVal, 1, 1, GDT_Byte, 0, 0);
>     GDALSetRasterNoDataValue(hBand, 100.0);
>     double min, max, mean, stddev;
>     GDALComputeRasterStatistics(hBand, FALSE,
> &min, &max, &mean, &stddev, 
> NULL, NULL);
>     printf("min=%f max=%f mean=%f stddev=%f\n",
> min, max, mean, stddev);
>     return 0;
> }
> 
> (a 3x1 dataset with pixels values being 0, 100 and 2 and
> 100 set as the nodata 
> value)
> 
> The results I get are : min=0.000000 max=2.000000
> mean=1.000000 
> stddev=1.000000. Which is the expected values.
> 
> I'd advise you to check that the nodata value that you set
> at the band level 
> matches exactly the value used by the nodata pixels in the
> imagery. 
> ComputeStatistics() uses strict equality comparison, so
> even a very slight 
> difference might result in not recognizing the pixels as
> being nodata. 
> 
> Best regards,
> 
> Even
> 
> Le Wednesday 14 April 2010 19:35:47 Michael ODonnell, vous
> avez écrit :
> > I am trying to compute and set the statistics for a
> data set that I have
> > created using GDAL, but the no data values are being
> included. Is there a
> > way to ignore the no data value when computing the
> statistics. The
> > documentation does not say anything about this, to the
> best of my
> > knowledge, and it appears to be included in my
> results. Everything is
> > working except that no data is included during the use
> of
> > ComputeStatistics.
> >
> > Here are the steps I am using:
> >
> > g_MBand->SetNoDataValue(g_nulldata2);
> > g_MBand->ComputeStatistics(FALSE, &pdfMin2,
> &pdfMax2, &pdfMean2,
> > &pdfStdDev2, NULL, NULL);
> g_InBand->SetStatistics(pdfMin2, pdfMax2,
> > pdfMean2, pdfStdDev2);
> >
> > Thank your for your help!
> > Mike
> >
> >
> >
> > _______________________________________________
> > gdal-dev mailing list
> > gdal-dev at lists.osgeo.org
> > http://lists.osgeo.org/mailman/listinfo/gdal-dev
> 
> 
> 


      


More information about the gdal-dev mailing list