Thursday, 27 June 2019

arcgis 10.0 - Efficiently check for equal adjacent values in raster calculator


I have a raster consisting of integer values in each cell. I want to check every adjacent cell in a 3x3 grid to see if any one of the adjacent cells has a value EQUAL to the center cell, and if so, give the output raster a value of 1 (else give it a value of 0). I have already accomplished this like so:



Con("raster" == FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)

Where the kernel file looks like this:


3 3 
1 0 0
0 0 0
0 0 0

Then again for another possible combination:


3 3 

0 1 0
0 0 0
0 0 0

And so forth:


3 3 
0 0 1
0 0 0
0 0 0


Then I have to combine all of the rasters at the end to get one final raster.


Is there a more efficient way to accomplish this? It shouldn't be necessary to loop through the raster this many times to get what I need. Raster calculator solutions will work, but ArcObjects solutions are welcome as well as the end result will likely end up being implemented in ArcObjects.



Answer



The focal variety (in a 3 by 3 neighborhood) remains the same when the center is not used (for a focal variety in an annular 3 by 3 neighborhood) if and only if the center cell is duplicated in one of the neighboring positions. This solution requires just two neighborhood calculations and a comparison.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...