使用C++计算NDVI并导入ENVI显示

本文介绍如何使用C++代码计算遥感影像的NDVI值,并将计算结果导入ENVI软件中进行可视化展示。

代码实现

以下C++代码示例演示了如何读取影像数据,计算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();
}

代码说明:

  1. 该代码首先根据影像数据类型确定红光波段和近红外波段的索引。
  2. 然后,分别读取红光波段和近红外波段的数据。
  3. 循环计算每个像素的NDVI值,并将结果存储在NDVIWr数组中。
  4. 最后,将NDVIWr数组写入文件。

在ENVI中展示NDVI

  1. 打开ENVI软件: 点击 File -> Open Image File,选择计算出的NDVI文件。
  2. 显示NDVI: 点击 Display 按钮,选择NDVI文件。可以选择将NDVI显示为灰度图或伪彩色图。
  3. 选择颜色映射方案(可选): 如果选择伪彩色图,可以点击 Color Map 按钮,选择不同的颜色映射方案。
  4. 调整图像质量(可选): 可以通过调整图像的对比度和亮度来改善图像质量。点击 Enhance 按钮,选择 Contrast StretchHistogram Equalization 等增强选项。
  5. 保存NDVI图像(可选): 最后可以将NDVI图像保存为ENVI格式或其他常见格式,如TIFF、JPEG等。点击 File -> Save As Image File,选择保存格式和路径。

通过以上步骤,您就可以使用C++代码计算NDVI,并在ENVI软件中进行可视化展示了。

使用C++计算NDVI并导入ENVI显示

原文地址: https://www.cveoy.top/t/topic/jlNQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录