Hi all,
I am fairly new to using ArcGIS Pro, but I am slightly experienced in Python in general. I'm not sure if this is the exact place to post this question, but I am stuck. I have successfully used ArcPy to clip a raster from a shapefile, and I now want to perform the SegmentMeanShift() function on said clipped raster.
This process works in ArcGIS Pro, and I would like to have a script to automate this process for many different rasters. Below is the snippet of my code that gives me issues (most of it was copied from the documentation here)
<SPAN class="comment token"># script to clip and segment a raster</SPAN>
<SPAN class="comment token"># import libraries</SPAN>
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="keyword token">import</SPAN> matplotlib<SPAN class="punctuation token">.</SPAN>pyplot <SPAN class="keyword token">as</SPAN> plt
<SPAN class="keyword token">import</SPAN> numpy <SPAN class="keyword token">as</SPAN> np
<SPAN class="keyword token">import</SPAN> os
<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="comment token">#%% Clip raster</SPAN>
in_ras <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"data\s20180403.tif"</SPAN>
clip_ras <SPAN class="operator token">=</SPAN> in_ras<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">+</SPAN> r<SPAN class="string token">"clip_ras\\"</SPAN> <SPAN class="operator token">+</SPAN> in_ras<SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">+</SPAN> r<SPAN class="string token">"_clip.tif"</SPAN>
feature_template <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"shapefiles\square_domain_0723.shp"</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Clip_management<SPAN class="punctuation token">(</SPAN>
in_ras<SPAN class="punctuation token">,</SPAN> "<SPAN class="comment token">#", clip_ras, feature_template, "0", "ClippingGeometry")</SPAN>
<SPAN class="comment token">#%% Segment raster</SPAN>
<SPAN class="comment token">#check for spatial analyst license</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CheckOutExtension<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Spatial"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># segment mean shift the clipped raster </SPAN>
spec_detail <SPAN class="operator token">=</SPAN> <SPAN class="string token">"10"</SPAN>
spat_detail <SPAN class="operator token">=</SPAN> <SPAN class="string token">"10"</SPAN>
min_seg_size <SPAN class="operator token">=</SPAN> <SPAN class="string token">"20"</SPAN>
band_indexes <SPAN class="operator token">=</SPAN> <SPAN class="string token">"1"</SPAN>
seg_clip_ras <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"data\\seg_clip_ras\\"</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"s20180403"</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"_clip_seg.tif"</SPAN>
seg_ras <SPAN class="operator token">=</SPAN> SegmentMeanShift<SPAN class="punctuation token">(</SPAN>in_ras<SPAN class="punctuation token">,</SPAN> spec_detail<SPAN class="punctuation token">,</SPAN>
spat_detail<SPAN class="punctuation token">,</SPAN> min_seg_size<SPAN class="punctuation token">,</SPAN> band_indexes<SPAN class="punctuation token">)</SPAN>
seg_ras<SPAN class="punctuation token">.</SPAN>save<SPAN class="punctuation token">(</SPAN>seg_clip_ras<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>
The output I receive from running this chunk of the script is:
Traceback (most recent call last):
File "<ipython-input-33-232592bd359c>", line 11, in <module>
spat_detail, min_seg_size, band_indexes)
File "D:\ArcGISPro\Resources\ArcPy\arcpy\sa\Functions.py", line 7768, in SegmentMeanShift
band_indexes)
File "D:\ArcGISPro\Resources\ArcPy\arcpy\sa\Utils.py", line 53, in swapper
result = wrapper(*args, **kwargs)
File "D:\ArcGISPro\Resources\ArcPy\arcpy\sa\Functions.py", line 7761, in Wrapper
band_indexes)
File "D:\ArcGISPro\Resources\ArcPy\arcpy\geoprocessing\_base.py", line 506, in <lambda>
return lambda *args: val(*gp_fixargs(args, True))
ExecuteError: Failed to execute. Parameters are not valid.
ERROR 000735: Output Raster Dataset: Value is required
Failed to execute (SegmentMeanShift).<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>I am unsure what is happening here, when I try to add another argument, the error says that SegmentMeanShift() only takes 5 arguments, not 6, which makes sense and is what I thought originally. So why is a value required for Output Raster Dataset?
Basically, when this script is finished, I would like a raster saved in my directory that is clipped and segmented from the first raster. I have looked over the documentation and other questions and I cannot seem to find this specific issue.
Thanks for help in advance, I have been stuck on this for awhile now.