mirror of
https://github.com/wassname/scikit-image.git
synced 2026-08-12 12:30:16 +08:00
Refactor masking
This commit is contained in:
+22
-28
@@ -13,6 +13,24 @@ from skimage import img_as_float
|
||||
from scipy.ndimage import convolve, binary_erosion, generate_binary_structure
|
||||
|
||||
|
||||
EROSION_SELEM = generate_binary_structure(2, 2)
|
||||
|
||||
|
||||
def _mask_filter_result(result, mask):
|
||||
"""Return result after masking.
|
||||
|
||||
Input masks are eroded so that mask areas in the original image don't
|
||||
affect values in the result.
|
||||
"""
|
||||
if mask is None:
|
||||
mask = np.zeros(result.shape, bool)
|
||||
mask[1:-1, 1:-1] = True
|
||||
else:
|
||||
mask = binary_erosion(mask, EROSION_SELEM, border_value=0)
|
||||
result[mask == False] = 0
|
||||
return result
|
||||
|
||||
|
||||
def sobel(image, mask=None):
|
||||
"""Calculate the absolute magnitude Sobel to find edges.
|
||||
|
||||
@@ -70,17 +88,11 @@ def hsobel(image, mask=None):
|
||||
|
||||
"""
|
||||
image = img_as_float(image)
|
||||
if mask is None:
|
||||
mask = np.ones(image.shape, bool)
|
||||
big_mask = binary_erosion(mask,
|
||||
generate_binary_structure(2, 2),
|
||||
border_value=0)
|
||||
result = np.abs(convolve(image,
|
||||
np.array([[ 1, 2, 1],
|
||||
[ 0, 0, 0],
|
||||
[-1,-2,-1]]).astype(float) / 4.0))
|
||||
result[big_mask == False] = 0
|
||||
return result
|
||||
return _mask_filter_result(result, mask)
|
||||
|
||||
|
||||
def vsobel(image, mask=None):
|
||||
@@ -111,17 +123,11 @@ def vsobel(image, mask=None):
|
||||
|
||||
"""
|
||||
image = img_as_float(image)
|
||||
if mask is None:
|
||||
mask = np.ones(image.shape, bool)
|
||||
big_mask = binary_erosion(mask,
|
||||
generate_binary_structure(2, 2),
|
||||
border_value=0)
|
||||
result = np.abs(convolve(image,
|
||||
np.array([[1, 0, -1],
|
||||
[2, 0, -2],
|
||||
[1, 0, -1]]).astype(float) / 4.0))
|
||||
result[big_mask == False] = 0
|
||||
return result
|
||||
return _mask_filter_result(result, mask)
|
||||
|
||||
|
||||
def prewitt(image, mask=None):
|
||||
@@ -177,17 +183,11 @@ def hprewitt(image, mask=None):
|
||||
|
||||
"""
|
||||
image = img_as_float(image)
|
||||
if mask is None:
|
||||
mask = np.ones(image.shape, bool)
|
||||
big_mask = binary_erosion(mask,
|
||||
generate_binary_structure(2, 2),
|
||||
border_value=0)
|
||||
result = np.abs(convolve(image,
|
||||
np.array([[ 1, 1, 1],
|
||||
[ 0, 0, 0],
|
||||
[-1,-1,-1]]).astype(float) / 3.0))
|
||||
result[big_mask == False] = 0
|
||||
return result
|
||||
return _mask_filter_result(result, mask)
|
||||
|
||||
|
||||
def vprewitt(image, mask=None):
|
||||
@@ -218,14 +218,8 @@ def vprewitt(image, mask=None):
|
||||
|
||||
"""
|
||||
image = img_as_float(image)
|
||||
if mask is None:
|
||||
mask = np.ones(image.shape, bool)
|
||||
big_mask = binary_erosion(mask,
|
||||
generate_binary_structure(2, 2),
|
||||
border_value=0)
|
||||
result = np.abs(convolve(image,
|
||||
np.array([[1, 0, -1],
|
||||
[1, 0, -1],
|
||||
[1, 0, -1]]).astype(float) / 3.0))
|
||||
result[big_mask == False] = 0
|
||||
return result
|
||||
return _mask_filter_result(result, mask)
|
||||
|
||||
Reference in New Issue
Block a user