基于C++的遥感影像NDVI计算方法
基于C++的遥感影像NDVI计算方法
本代码片段展示了如何使用C++语言计算遥感影像的归一化植被指数(NDVI)。NDVI是一种常用的植被指数,用于表征植被的生长状况和覆盖度。
void CBandMath::NDVICal(CString m_pathname, int Bands, int Width, int Height, int DataType)
{
int fRed, fNearRed;
if (DataType == 1) //TM
{
fRed = 3;
fNearRed = 5;
}
CString m_OutFile;
float* NDVIWr = new float[Height * Width];
unsigned char* Red = new unsigned char[Height * Width];
unsigned char* NearRed = new unsigned char[Height * Width];
CFile fReadFile, fWriteFile;
if (!fReadFile.Open(m_pathname, CFile::modeReadWrite)) //打开图像文件(参数)
{
AfxMessageBox('不能打开所读文件!');
return;
}
//打开写入文件(其它类的变量)
if (!fWriteFile.Open('NDVI', CFile::modeCreate | CFile::modeWrite))
{
AfxMessageBox('请选择输出文件!');
return;
}
fReadFile.Seek((fRed - 1) * Height * Width, CFile::begin);
fReadFile.Read(Red, Height * Width);
fReadFile.Seek((fNearRed - 1) * Height * Width, CFile::begin);
fReadFile.Read(NearRed, Height * Width);
for (int k = 0; k < Height * Width; k++)
NDVIWr[k] = ((float)NearRed[k] - Red[k]) / (NearRed[k] + Red[k]);
fWriteFile.Write(NDVIWr, sizeof(float) * Height * Width);
delete[] NDVIWr;
delete[] Red;
delete[] NearRed;
fReadFile.Close();
fWriteFile.Close();
}
函数解释:
- 函数
CBandMath::NDVICal接收图像文件路径、波段数、宽度、高度和数据类型作为输入参数。 - 首先,根据数据类型确定红波段和近红外波段的波段号。
- 然后,打开输入和输出文件。
- 读取红波段和近红外波段的像素值。
- 循环计算每个像素的NDVI值,并将结果存储在
NDVIWr数组中。 - 将
NDVIWr数组写入输出文件。 - 最后,释放内存并关闭文件。
NDVI 波段信息:
计算出的NDVI结果为单波段影像,每个像素值代表该位置的NDVI值,取值范围为-1到1。
原文地址: https://www.cveoy.top/t/topic/jlN4 著作权归作者所有。请勿转载和采集!