Filter
Started this with rolling stats.
Rolling Statistics for grid data... an alternative
Once you have a filter... kernel whatever you want to call it, all you need is a moving window of some form and shape. I won't go into those details since my previous work covers this. I will just report a few simple ones, and show you some of the possible kernels that you can create.
<SPAN class="comment token"># ---- my input array ----</SPAN>
Input array<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="operator token">-</SPAN>shape <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> ndim <SPAN class="number token">3</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</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>
From the above, you can see that I kept it simple... 4 blocks of values, the perfect study area.
Let's see if we can pick up some lines that divide the raster/array
Sobel horizonal filter<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="operator token">-</SPAN>shape <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> ndim <SPAN class="number token">3</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">2</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">1</SPAN>
Sobel horizontal result<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="operator token">-</SPAN>shape <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> ndim <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> masked array<SPAN class="punctuation token">,</SPAN> fill value <SPAN class="number token">999999</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="number token">8</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</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>
See those 8's! nailed the horizontal divide.
vertical filter<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN>
Sobel vertical result<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="operator token">-</SPAN>shape <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> ndim <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> masked array<SPAN class="punctuation token">,</SPAN> fill value <SPAN class="number token">999999</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</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>
So easy... vertical nailed as well.
One more...
Array<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="operator token">-</SPAN>shape <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> ndim <SPAN class="number token">3</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">1</SPAN>
Emboss vertical result<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN>
<SPAN class="operator token">-</SPAN>shape <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> ndim <SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> masked array<SPAN class="punctuation token">,</SPAN> fill value <SPAN class="number token">999999</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">6</SPAN> <SPAN class="number token">6</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">6</SPAN> <SPAN class="number token">6</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="number token">0</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN>
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</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>
How about some filters that I have found.
n = np.nan
all_f = [1, 1, 1, 1, 1, 1, 1, 1, 1]
no_cnt = [1, 1, 1, 1, n, 1, 1, 1, 1]
cross_f = [1, 0, 1, 0, 0, 0, 1, 0, 1]
plus_f = [0, 1, 0, 1, 0, 1, 0, 1, 0]
grad_e = [1, 0, -1, 2, 0, -2, 1, 0, -1]
grad_n = [-1, -2, -1, 0, 0, 0, 1, 2, 1]
grad_ne = [0, -1, -2, 1, 0, -1, 2, 1, 0]
grad_nw = [2, -1, 0, -1, 0, 1, 0, 1, 2]
grad_s = [1, 2, 1, 0, 0, 0, -1, -2, -1]
grad_w = [-1, 0, 1, -2, 0, 2, -1, 0, 1]
lap_33 = [0, -1, 0, -1, 4, -1, 0, -1, 0]
line_h = [-1, -1, -1, 2, 2, 2, -1, -1, -1]
line_ld = [2, -1, -1, -1, 2, -1, -1, -1, 2]
line_rd = [-1, -1, 2, -1, 2, -1, 2, -1, -1]
line_v = [-1, 0, -1, -1, 2, -1, -1, 2, -1]
high = [-0.7, -1.0, -0.7, -1.0, 6.8, -1.0, -0.7, -1.0, -0.7]
sob_hor = [-1, -2, -1, 0, 0, 0, 1, 2, 1] # sobel y
sob_vert = [-1, 0, 1, -2, 0, 2, -1, 0, 1] # sobel x
emboss = [-1, -1, 0, -1, 0, 1, 0, 1, 1]
sharp1 = [0., -0.25, 0., -0.25, 2.0, -0.25, 0., -0.25, 0.]
sharp2 = [-0.25, -0.25, -0.25, -0.25, 3.0, -0.25, -0.25, -0.25, -0.25]
sharp3 = [-1, -1, -1, -1, 9, -1, -1, -1, -1]
lowpass = [1, 2, 1, 2, 4, 2, 1, 2, 1]
# ---- assemble the dictionary ----
d = {1: all_f, 2: no_cnt, 3: cross_f, 4: plus_f, 5: grad_e,
6: grad_n, 7: grad_ne, 8: grad_nw, 9: grad_s, 10: grad_w,
11: lap_33, 12: line_h, 13: line_ld, 14: line_rd, 15: line_v,
16: high, 17: sob_hor, 18: sob_vert, 19: emboss, 20: sharp1,
21: sharp2, 23: sharp3, 24: lowpass}
filter_ = np.array(d[mode]).reshape(3, 3)<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></SPAN></SPAN>You call the filter using the mode number (ie d[23] is sharp3.
<SPAN class="keyword token">import</SPAN> numpy <SPAN class="keyword token">as</SPAN> np
<SPAN class="keyword token">from</SPAN> numpy<SPAN class="punctuation token">.</SPAN>lib<SPAN class="punctuation token">.</SPAN>stride_tricks <SPAN class="keyword token">import</SPAN> as_strided
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">stride</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> win<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> stepby<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Provide a 2D sliding/moving view of an array.
: There is no edge correction for outputs. Use _pad first.
"""</SPAN>
err <SPAN class="operator token">=</SPAN> <SPAN class="string token">"""Array shape, window and/or step size error.
Use win=(3,3) with stepby=(1,1) for 2D array
or win=(1,3,3) with stepby=(1,1,1) for 3D
---- a.ndim != len(win) != len(stepby) ----
"""</SPAN>
<SPAN class="keyword token">assert</SPAN> <SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">.</SPAN>ndim <SPAN class="operator token">==</SPAN> len<SPAN class="punctuation token">(</SPAN>win<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">and</SPAN> <SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>win<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> len<SPAN class="punctuation token">(</SPAN>stepby<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> err
shape <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">.</SPAN>shape<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># array shape (r, c) or (d, r, c)</SPAN>
win_shp <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>win<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># window (3, 3) or (1, 3, 3)</SPAN>
ss <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>stepby<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># step by (1, 1) or (1, 1, 1)</SPAN>
newshape <SPAN class="operator token">=</SPAN> tuple<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>shape <SPAN class="operator token">-</SPAN> win_shp<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">//</SPAN> ss<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
newshape <SPAN class="operator token">+=</SPAN> tuple<SPAN class="punctuation token">(</SPAN>win_shp<SPAN class="punctuation token">)</SPAN>
newstrides <SPAN class="operator token">=</SPAN> tuple<SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">.</SPAN>strides<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">*</SPAN> ss<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> a<SPAN class="punctuation token">.</SPAN>strides
a_s <SPAN class="operator token">=</SPAN> as_strided<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> shape<SPAN class="operator token">=</SPAN>newshape<SPAN class="punctuation token">,</SPAN> strides<SPAN class="operator token">=</SPAN>newstrides<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>squeeze<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> a_s
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">a_filter</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> mode<SPAN class="operator token">=</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> ignore_nodata<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">,</SPAN> nodata<SPAN class="operator token">=</SPAN>None<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""put the filter stuff below this line"""</SPAN>
<SPAN class="comment token">#</SPAN>
<SPAN class="comment token"># ---- stride the input array ----</SPAN>
a_strided <SPAN class="operator token">=</SPAN> stride<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> ignore_nodata<SPAN class="punctuation token">:</SPAN>
c <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>sum<SPAN class="punctuation token">(</SPAN>a_strided <SPAN class="operator token">*</SPAN> filter_<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
c <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>nansum<SPAN class="punctuation token">(</SPAN>a_strided <SPAN class="operator token">*</SPAN> filter_<SPAN class="punctuation token">,</SPAN> axis<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
pad_ <SPAN class="operator token">=</SPAN> nodata
<SPAN class="keyword token">if</SPAN> nodata <SPAN class="keyword token">is</SPAN> None<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> c<SPAN class="punctuation token">.</SPAN>dtype<SPAN class="punctuation token">.</SPAN>name <SPAN class="keyword token">in</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'int'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'int32'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'int64'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
pad_ <SPAN class="operator token">=</SPAN> min<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">.</SPAN>min<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
pad_ <SPAN class="operator token">=</SPAN> min<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="operator token">-</SPAN><SPAN class="number token">1.0</SPAN><SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">.</SPAN>min<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
c <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>lib<SPAN class="punctuation token">.</SPAN>pad<SPAN class="punctuation token">(</SPAN>c<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"constant"</SPAN><SPAN class="punctuation token">,</SPAN> constant_values<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">(</SPAN>pad_<SPAN class="punctuation token">,</SPAN> pad_<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
m <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>where<SPAN class="punctuation token">(</SPAN>c <SPAN class="operator token">==</SPAN> pad_<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN>
c <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>ma<SPAN class="punctuation token">.</SPAN>array<SPAN class="punctuation token">(</SPAN>c<SPAN class="punctuation token">,</SPAN> mask<SPAN class="operator token">=</SPAN>m<SPAN class="punctuation token">,</SPAN> fill_value<SPAN class="operator token">=</SPAN>None<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> filter_<SPAN class="punctuation token">,</SPAN> c
<SPAN class="comment token"># ----------------------------------------------------------------------</SPAN>
<SPAN class="comment token"># __main__ .... code section</SPAN>
<SPAN class="keyword token">if</SPAN> __name__ <SPAN class="operator token">==</SPAN> <SPAN class="string token">"__main__"</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">"""Optionally...
: - print the script source name.
: - run the _demo
"""</SPAN>
<SPAN class="comment token"># you can put your stuff here... use RasterToNumPyArray to get an array</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></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>
So that is pretty well some other stuff.
I should point out that the same process can be used for statistical calculations, terrain derivatives (slope, aspect, hillshade, curvature etc ) and I have reported on these before.
Now I should point out that none of the above requires the Spatial Analyst extension and the RasterToNumPyArray and NumPyArrayToRaster are provided with arcpy.da 's module. Lots of possibilities, lots of capability is built-in.
More later.