我有四张单独的图片 - 2-projected.tif,3-projected.tif,4-projected.tif和5-projected.tif。这些是四张Landsat图像。 Image 2-projected.tif对应蓝色通道,图像3-projection.tif-对应绿色通道,图像4-projection.tif对应红色通道,5-projection.tif-对应红外通道。现在我想创建NDVI图像。为此,我首先使用ImageMagic创建一个组合的RGB图像:
var original = [
{
"productID": "C05M01P001",
"productName": "Aashirvaad Atta - Whole Wheat (முழு கோதுமை)",
"productUnit": "1 kg",
"productPrice": "Rs.50.00",
"productSellingPrice": "",
"productSID": "",
"productImage": "http://www.thechennaikart.com/image/cache/Product_Images_2016/asvd-attaplain-atta-large-500x500.jpg",
"productDescription": "Ashirvaad Atta - Whole Wheat 1 kg..",
"productCID": "C05",
"productMID": "M01"
}
];
var updated = original.reduce(function(obj, entry) {
obj[entry.productID] = entry;
return obj;
}, {});
console.log(updated);
到目前为止,这么好。然后我尝试按照this教程中的命令,该命令应该创建NDVI图像。我是这样做的:
$ convert 4-projected.tif 3-projected.tif 2-projected.tif -combine RGB.tif
但结果是,我收到以下错误消息:
convert:无法解析表达式
$ convert 5-projected.tif RGB.tif -channel RGB -fx '(u.r-v.r)/(u.r+v.r+0.001)' -normalize NDVI.tif
'(u.r-1.0 * v.r)/(u.r + v.r + 0.001)''@ error / fx.c / FxEvaluat eSubexpression / 2159。
我不知道如何解决它。
答案 0 :(得分:2)
感兴趣的两个频段是red
和NIR
,而NDVI的公式是:
NDVI = (NIR-red)/(NIR+red)
您有两种选择。首先,如果你有两个单独的单通道图像中的红色和NIR,你可以这样做:
convert red.tif NIR.tif -fx '(u.r-v.r)/(u.r+v.r+0.001)' -normalize -compress lzw NDVI.tif
此处,我使用u.r
来引用第一张图片的第一个频道,使用v.r
来引用第二张图片的第一个频道。
或者,如果红色和NIR是RGB图像中的前两个通道(即 ImageMagick 将其称为红色和绿色通道):
convert RGB.tif -fx '(u.r-u.g)/(u.r+u.g+0.001)' -normalize -compress lzw NDVI.tif
此处我使用u.r
来引用第一张图片的第一个频道,使用u.g
来引用第一张图片的第二个频道。
-fx
方法功能非常强大,但速度非常慢。下面的方法应该给你相同的答案,但我没有彻底检查过:
convert 4-projected.tif -write MPC:red +delete \
5-projected.tif -write MPC:NIR +delete \
\( mpc:red mpc:NIR -evaluate-sequence subtract \) \
\( mpc:red mpc:NIR -evaluate-sequence add \) \
-evaluate-sequence divide -normalize -compress lzw NDVI.tif
如果要使用假色对图像进行着色,可以生成颜色查找表(CLUT)并将NDVI图像中的灰度值映射到这些颜色。所以,让我们假设您想要将NDVI图像中最黑的黑色映射为黑色,将相当暗的值映射为红色,将相当明亮的值映射为橙色,将最亮的值映射为绿色,您可以将这样的CLUT映射为:
convert xc:black xc:red xc:orange xc:lime +append clut.png
并将上面的灰度结果应用于此:
convert NDVI.tif -normalize clut.png -clut falsecolour.jpg
如果你想让橙色和绿色的色调更长(更普遍),你可以改变它们的长度,使它们在CLUT中更长:
convert -size 30x1 xc:black -size 40x1 xc:red -size 80x1 xc:orange -size 100x1 xc:lime +append clut.png
然后重新应用CLUT:
convert NDVI.tif -normalize clut.png -clut result.jpg