for a example: I have array a
JavaScript
x
11
11
1
import numpy as np
2
import scipy.ndimage as nd
3
a=np.array( [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
4
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
5
[0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
6
[0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0],
7
[0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0],
8
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
9
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
11
my current code
JavaScript
1
11
11
1
def border_selection(inp_array):
2
s2 = nd.generate_binary_structure(rank=2,connectivity=2)
3
lab, nlab = nd.label(input=inp_array,structure= s2)
4
for i in range(1, nlab + 1):
5
region_i = lab == i
6
expanded = nd.binary_dilation(region_i, iterations=1, structure=s2)
7
8
border = np.logical_xor(region_i, expanded)
9
print(border)
10
l=border_selection(a)
11
Current output:
JavaScript
1
19
19
1
[[False False False False False False False False False False False]
2
3
4
[False True True True True True False False False False False]
5
[False True False False False True False False False False False]
6
[False True False False False True False False False False False]
7
[False True False False False True False False False False False]
8
[False True True True True True False False False False False]
9
[False False False False False False False False False False False]
10
[False False False False False False False False False False False]]
11
[[False False False False False False False False False False False]
12
[False False False False False False False False False False False]
13
[False False False False False False False True True True True]
14
[False False False False False False False True False False True]
15
[False False False False False False False True False False True]
16
[False False False False False False False True True True True]
17
[False False False False False False False False False False False]
18
[False False False False False False False False False False False]]
19
Required output: 1)If i return the variable border in the above function it onlx gives the value of first array, so its returns both the arrays with print function. 2)How to combine both the array like mentioned below expected ouput
JavaScript
1
10
10
1
[[False False False False False False False False False False False]
2
[False True True True True True False False False False False]
3
[False True False False False True False True True True True ]
4
[False True False False False True False True False False True]
5
[False True False False False True False True False False True]
6
[False True True True True True False True True True True]
7
[False False False False False False False False False False False]
8
[False False False False False False False False False False False]]
9
10
Advertisement
Answer
You could use an array to collect the True values:
JavaScript
1
17
17
1
def border_selection(inp_array):
2
s2 = nd.generate_binary_structure(rank=2,connectivity=2)
3
lab, nlab = nd.label(input=inp_array,structure= s2)
4
5
# set up output array initialized with False
6
out = np.zeros_like(inp_array, dtype=bool)
7
8
for i in range(1, nlab + 1):
9
region_i = lab == i
10
expanded = nd.binary_dilation(region_i, iterations=1, structure=s2)
11
12
border = np.logical_xor(region_i, expanded)
13
out |= border # append new True values to the output
14
return out
15
16
print(border_selection(a))
17
output:
JavaScript
1
9
1
[[False False False False False False False False False False False]
2
[False True True True True True False False False False False]
3
[False True False False False True False True True True True]
4
[False True False False False True False True False False True]
5
[False True False False False True False True False False True]
6
[False True True True True True False True True True True]
7
[False False False False False False False False False False False]
8
[False False False False False False False False False False False]]
9