Refactor masking

This commit is contained in:
Tony S Yu
2012-09-03 22:50:57 -04:00
parent bd2f8ac3d3
commit 6c9810c6e9
+22 -28
View File
@@ -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)