, . , R ^ 6, R - . ! , , ( ) , SciPy , Python, SciPy C, .
OP: " → - O (n log n) ". , . . , , .
, - () , .
, ., A ( ) B, . ( ) , , . , A B, , , 0,5, A B. ( , 0, , , Kukal et al. > 0,5 scipy.ndimage.binary_dilation . , , , ref 1 )
, , , scipy.signal.fftconvolve(A,B,'same') - , , . " " , A, ( B).
, :
from scipy.signal import fftconvolve
def dilate(A,B):
return fftconvolve(A,B,'same')>0.5
: A, B, , . , scipy.ndimage.binary_erosion - 1s , , R B. , , scipy.ndimage.binary_erosion. ( , , .)
from scipy.signal import fftconvolve
import numpy as np
def erode_v1(A,B,R):
A_inv = np.logical_not(A)
A_inv = np.pad(A_inv, R, 'constant', constant_values=1)
tmp = fftconvolve(A_inv, B, 'same') > 0.5
return np.logical_not(tmp[R:-R, R:-R, R:-R])
, ., , > -0,5, - "B ( , ). erode_v1, , :
from scipy.signal import fftconvolve
import numpy as np
def erode_v2(A,B):
thresh = np.count_nonzero(B)-0.5
return fftconvolve(A,B,'same') > thresh
, - . :
- 2D, 3D, , scipy.ndimage ( skimage, ndimage).
- (R = 21) 30 ! 20 .
- , - , .
:
: , erode_v1. 1s , . , , , , . , "", - . ( , ), , , .
: , - . B . , , . (, ), B .
, , , :
- . , . . , . . , . . http://www.cs.utep.edu/vladik/misha5.pdf
- . , . , . . Http://http%3A%2F%2Fwww2.humusoft.cz%2Fwww%2Fpapers%2Ftcp07%2F001_kukal.pdf