satdump/src-core/common/image/vegetation_index.cpp

42 lines
1.4 KiB
C++
Raw Normal View History

2021-08-21 19:14:53 +02:00
#include "vegetation_index.h"
2021-08-23 00:52:42 +02:00
namespace image
{
namespace vegetation_index
{
Image<uint16_t> NDVI(Image<uint16_t> redIm, Image<uint16_t> nirIm)
2021-08-23 00:52:42 +02:00
{
Image<uint16_t> out(redIm.width(), redIm.height(), 1);
2022-05-12 18:19:01 +02:00
for (size_t i = 0; i < redIm.size(); i++)
2021-08-23 00:52:42 +02:00
{
2021-08-21 19:14:53 +02:00
float red = redIm[i];
float nir = nirIm[i];
2021-08-23 00:52:42 +02:00
out[i] = (((nir - red) / (nir + red)) + 1) * 32726;
2021-08-21 19:14:53 +02:00
}
return out;
}
Image<uint16_t> EVI2(Image<uint16_t> redIm, Image<uint16_t> nirIm)
2021-08-23 00:52:42 +02:00
{
Image<uint16_t> out(redIm.width(), redIm.height(), 1);
2022-05-12 18:19:01 +02:00
for (size_t i = 0; i < redIm.size(); i++)
2021-08-23 00:52:42 +02:00
{
2021-08-21 19:14:53 +02:00
float red = redIm[i];
float nir = nirIm[i];
2021-08-23 00:52:42 +02:00
out[i] = 2.5 * (((nir - red) / (nir + 2.4 * red + 1)) + 1) * 32726;
2021-08-21 19:14:53 +02:00
}
return out;
}
Image<uint16_t> EVI(Image<uint16_t> redIm, Image<uint16_t> nirIm, Image<uint16_t> blueIm)
2021-08-23 00:52:42 +02:00
{
Image<uint16_t> out(redIm.width(), redIm.height(), 1);
2022-05-12 18:19:01 +02:00
for (size_t i = 0; i < redIm.size(); i++)
2021-08-23 00:52:42 +02:00
{
2021-08-21 19:14:53 +02:00
float red = redIm[i];
float nir = nirIm[i];
float blue = blueIm[i];
2021-08-23 00:52:42 +02:00
out[i] = 2.5 * (((nir - red) / (nir + 6 * red - 7.5 * blue + 1)) + 1) * 32726;
2021-08-21 19:14:53 +02:00
}
return out;
}
}
}