Dear All,
I am trying to calculate NDVI for a list of Landsat images. First i identified the path of the input images and the output results as well. Then I created a loop to read each input raster and trying to extract band 4 and 5 from the raster then calculate the NDVI and finally save the NDVI result of landsat image.
However, I might be doing something not acceptable in extracting bands, and I did search online how to extract a band from an image in python but I could not fixed.
Any help would be highly appreicated. The script is shown below along with the error.
<SPAN class="keyword token">import</SPAN> os<SPAN class="punctuation token">,</SPAN> arcpy<SPAN class="punctuation token">,</SPAN> string
<SPAN class="keyword token">from</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa <SPAN class="keyword token">import</SPAN> <SPAN class="operator token">*</SPAN>
<SPAN class="keyword token">from</SPAN> arcpy <SPAN class="keyword token">import</SPAN> env
arcpy<SPAN class="punctuation token">.</SPAN>CheckOutExtension<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Spatial"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN>r<SPAN class="string token">"E:\test\Landsat"</SPAN>
out_workspace <SPAN class="operator token">=</SPAN>r<SPAN class="string token">"E:\test\Results"</SPAN>
<SPAN class="comment token"># Get a list of grids in the workspace.</SPAN>
rasters <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListRasters<SPAN class="punctuation token">(</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"TIF"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> raster <SPAN class="keyword token">in</SPAN> rasters<SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># Set the outputname for each output to be the same as the input.</SPAN>
output_path <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>out_workspace<SPAN class="punctuation token">,</SPAN>raster<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#create raster object</SPAN>
raster_path <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace<SPAN class="punctuation token">,</SPAN>raster<SPAN class="punctuation token">)</SPAN>
raster_object <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Raster<SPAN class="punctuation token">(</SPAN>raster_path<SPAN class="punctuation token">)</SPAN>
inRaster <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>raster_object<SPAN class="punctuation token">)</SPAN>
red <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa<SPAN class="punctuation token">.</SPAN>Raster<SPAN class="punctuation token">(</SPAN>inRaster<SPAN class="operator token">+</SPAN><SPAN class="string token">'\Band_4'</SPAN><SPAN class="punctuation token">)</SPAN>
NIR <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa<SPAN class="punctuation token">.</SPAN>Raster<SPAN class="punctuation token">(</SPAN>inRaster<SPAN class="operator token">+</SPAN><SPAN class="string token">'\Band_5'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># NDVI Calculation</SPAN>
num <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa<SPAN class="punctuation token">.</SPAN>Float<SPAN class="punctuation token">(</SPAN>NIR<SPAN class="operator token">-</SPAN>red<SPAN class="punctuation token">)</SPAN>
denom <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa<SPAN class="punctuation token">.</SPAN>Foat<SPAN class="punctuation token">(</SPAN>NIR<SPAN class="operator token">+</SPAN>red<SPAN class="punctuation token">)</SPAN>
NDVI <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa<SPAN class="punctuation token">.</SPAN>Divide<SPAN class="punctuation token">(</SPAN>num<SPAN class="punctuation token">,</SPAN> denom<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#save it</SPAN>
<SPAN class="comment token">#con_raster.save(output_path)</SPAN>
NDVI<SPAN class="punctuation token">.</SPAN>Save<SPAN class="punctuation token">(</SPAN>output_path<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CheckInExtension<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Spatial"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>The errors are:
Traceback <SPAN class="punctuation token">(</SPAN>most recent call last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
File <SPAN class="string token">"E:\test\NDVI20200404.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">24</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> <SPAN class="operator token"><</SPAN>module<SPAN class="operator token">></SPAN>
red <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa<SPAN class="punctuation token">.</SPAN>Raster<SPAN class="punctuation token">(</SPAN>inRaster<SPAN class="operator token">+</SPAN><SPAN class="string token">'\Band_4'</SPAN><SPAN class="punctuation token">)</SPAN>
File <SPAN class="string token">"C:\Program Files (x86)\ArcGIS\Desktop10.7\ArcPy\arcpy\sa\Functions.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">4409</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> Plus
in_raster_or_constant2<SPAN class="punctuation token">)</SPAN>
File <SPAN class="string token">"C:\Program Files (x86)\ArcGIS\Desktop10.7\ArcPy\arcpy\sa\Utils.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">53</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> swapper
result <SPAN class="operator token">=</SPAN> wrapper<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>args<SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">**</SPAN>kwargs<SPAN class="punctuation token">)</SPAN>
File <SPAN class="string token">"C:\Program Files (x86)\ArcGIS\Desktop10.7\ArcPy\arcpy\sa\Functions.py"</SPAN><SPAN class="punctuation token">,</SPAN> line <SPAN class="number token">4406</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> Wrapper
<SPAN class="punctuation token">[</SPAN><SPAN class="string token">"Plus"</SPAN><SPAN class="punctuation token">,</SPAN> in_raster_or_constant1<SPAN class="punctuation token">,</SPAN> in_raster_or_constant2<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
RuntimeError<SPAN class="punctuation token">:</SPAN> ERROR <SPAN class="number token">000732</SPAN><SPAN class="punctuation token">:</SPAN> Input Raster<SPAN class="punctuation token">:</SPAN> Dataset \Band_4 does <SPAN class="operator token">not</SPAN> exist <SPAN class="operator token">or</SPAN> <SPAN class="keyword token">is</SPAN> <SPAN class="operator token">not</SPAN> supported<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>