遥感影像处理-NDVI
? ? ? 在遙感中,常常會提到NDVI,它的全稱是 Normalized Difference Vegetation Index,也就是歸一化差分植被指數,是反映農作物長勢和營養信息的重要參數之一,它的計算原理很簡單,就是近紅外波段的反射值與紅光波段的反射值之差比上兩者之和。
? ? ? 即 NDVI=(NIR-R)/(NIR+R),
? ? ? NIR為近紅外波段的反射值,R為紅光波段的反射值。
1、NDVI的應用:檢測植被生長狀態、植被覆蓋度和消除部分輻射誤差等;
2、-1<=NDVI<=1,負值表示地面覆蓋為云、水、雪等,對可見光高反射;0表示有巖石或裸土等,NIR和R近似相等;正值,表示有植被覆蓋,且隨覆蓋度增大而增大;
3、NDVI的局限性表現在,用非線性拉伸的方式增強了NIR和R的反射率的對比度。對于同一幅圖象,分別求RVI和NDVI時會發現,RVI值增加的速度高于NDVI增加速度,即NDVI對高植被區具有較低的靈敏度;
4、NDVI能反映出植物冠層的背景影響,如土壤、潮濕地面、雪、枯葉、粗糙度等,且與植被覆蓋有關。
? ? ? 下面來看一個具體的事例。下面兩張圖分別是TM影像的三波段(紅光,左圖)和四波段(近紅外,右圖),將對應位置的像素值進行運算就行了。
? ? ? ? ??? ? ? ?
?
經過計算后,按照得到的NDVI值進行重新賦值,讓NDVI值越大的區域綠色越深,反之越淺,若NDVI小于0,則置為0。效果圖如下:
?
下面是我從高德地圖上截取的衛星影像,可以看到NDVI的結果與實際情況基本一致。
下面來看一下實現的代碼:
環境:VS2017+OPENCV4
Mat NDVI(Mat tm3, Mat tm4) {//tm3=imread("tm3.bmp"),tm4=imread("tm4.bmp");int rows = tm3.rows, cols = tm3.cols;Mat ndvi(rows, cols, CV_8UC3);double band3, band4;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {band3 = (double)tm3.at<Vec3b>(i, j)[0];band4 = (double)tm4.at<Vec3b>(i, j)[0];ndvi.at<Vec3b>(i, j)[0] = 0;ndvi.at<Vec3b>(i, j)[1] = (255 - 255 * (band4 - band3) / (band3 + band4));//綠色層,NDVI越大,綠色越深ndvi.at<Vec3b>(i, j)[2] = 0;if (band3 > band4)//NDVI小于0則顯示白色ndvi.at<Vec3b>(i, j)[0] = ndvi.at<Vec3b>(i, j)[1] = ndvi.at<Vec3b>(i, j)[2] = 255;}}imwrite("NDVI.bmp", ndvi);return ndvi; }?
總結
以上是生活随笔為你收集整理的遥感影像处理-NDVI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湖南师范大学2018年大学生程序设计竞赛
- 下一篇: 计算机主板bos不存信息的原因,电脑主板