1. 程式人生 > >遙感影象處理 | 利用GDAL繪製統計直方圖

遙感影象處理 | 利用GDAL繪製統計直方圖

GDAL獲取直方圖的函式叫做GDALRasterBand::GetHistogram()。定義如下:

CPLErrGDALRasterBand::GetHistogram   (
double dfMin,
double dfMax,
int nBuckets,
int *     panHistogram,
int bIncludeOutOfRange,
int bApproxOK,
GDALProgressFunc   pfnProgress,
void *   pProgressData  
)

關於繪製統計圖的程式碼

               
                Band band = ds.GetRasterBand(bandn);
                
                double dfmin; double dfmax; double pdfMean; double pdfStdDev;
                band.GetStatistics(1, 1, out dfmin, out dfmax, out pdfMean, out pdfStdDev);
                
                int nBuckets = 512;//表示直方圖統計的份數
                int[] panHistogram = new int[512];//儲存直方圖的陣列
                int include_out_of_range = 0;//如果這個引數設定為TRUE,那麼影象中的像元值小於最小值的像元值將被統計到直方圖陣列中的第一個裡面去,影象中的像元值大於最大值的像元會被統計到直方圖陣列中的最後一個裡面去。如果設定為FALSE,那麼影象中的像元值小於最小值的像元不進行統計,同樣,像元值超過最大值的像元值也不進行統計。
                int approx_ok = 1;
                Gdal.GDALProgressFuncDelegate callback = null;
                string callback_data = null;
                band.GetHistogram(dfmin, dfmax, nBuckets, panHistogram, include_out_of_range, approx_ok, callback, callback_data);
                Graphics g = panel1.CreateGraphics();
                g.Clear(Color.White);
                drawhistogram(panHistogram, dfmax, dfmin);


 根據已知的最大最小值和統計值的陣列便可畫出最後的統計直方圖