使用C++计算NDVI并导入ENVI显示
使用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();
}
代码说明:
- 该代码首先根据影像数据类型确定红光波段和近红外波段的索引。
- 然后,分别读取红光波段和近红外波段的数据。
- 循环计算每个像素的NDVI值,并将结果存储在
NDVIWr数组中。 - 最后,将
NDVIWr数组写入文件。
在ENVI中展示NDVI
- 打开ENVI软件: 点击
File -> Open Image File,选择计算出的NDVI文件。 - 显示NDVI: 点击
Display按钮,选择NDVI文件。可以选择将NDVI显示为灰度图或伪彩色图。 - 选择颜色映射方案(可选): 如果选择伪彩色图,可以点击
Color Map按钮,选择不同的颜色映射方案。 - 调整图像质量(可选): 可以通过调整图像的对比度和亮度来改善图像质量。点击
Enhance按钮,选择Contrast Stretch或Histogram Equalization等增强选项。 - 保存NDVI图像(可选): 最后可以将NDVI图像保存为ENVI格式或其他常见格式,如TIFF、JPEG等。点击
File -> Save As Image File,选择保存格式和路径。
通过以上步骤,您就可以使用C++代码计算NDVI,并在ENVI软件中进行可视化展示了。
原文地址: https://www.cveoy.top/t/topic/jlNQ 著作权归作者所有。请勿转载和采集!