Frei-Chen Edge Detector
Umesh Sharma
usharma01 at gmail.com
Wed Apr 24 05:43:20 EDT 2013
Hi Stefan,
Here is my code which i have written in edges.py
##############
def freiChen(image,mask=None):
"""Find the edge magnitude using FreiChen Filter.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen edge .
"""
return np.sqrt(freiChen_edge1(image, mask)**2 +\
freiChen_edge2(image, mask)**2 +\
freiChen_edge3(image, mask)**2 +\
freiChen_edge4(image, mask)**2 +\
freiChen_line1(image, mask)**2 +\
freiChen_line2(image, mask)**2 +\
freiChen_line3(image, mask)**2 +\
freiChen_line4(image, mask)**2 )
#freiChen_average(image, mask)**2)
def freiChen_edge1(image, mask):
"""Find the horizontal edges of an image using the FreiChen operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen horizontal edge.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
1 sqrt(2) 1
0 0 0
-1 -sqrt(2) -1
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ 1, sqrt(2), 1],
[ 0, 0, 0],
[-1,-sqrt(2),-1]]).\
astype(float) / sqrt(8)))
return _mask_filter_result(result, mask)
def freiChen_edge2(image, mask):
"""Find the vertical edges of an image using the FreiChen operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChan edges .
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
1 0 -1
sqrt(2) 0 -sqrt(2)
1 0 -1
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ 1, 0, -1 ],
[sqrt(2), 0, -sqrt(2)],
[ 1, 0, -1]]).\
astype(float) / sqrt(8)))
return _mask_filter_result(result, mask)
def freiChen_edge3(image, mask):
"""Find the edges in an image having slope 135 degree FreiChen operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen edges.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
0 -1 sqrt(2)
1 0 -1
-sqrt(2) 1 0
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ 0,-1, sqrt(2)],
[ 1, 0, -1],
[-sqrt(2), 1, 0]]).\
astype(float) / sqrt(8)))
return _mask_filter_result(result, mask)
def freiChen_edge4(image, mask):
"""Find the edges of an image having slope 45 degree using the FreiChen
operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The Freichen edges.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
sqrt(2) -1 0
-1 0 1
0 1 -sqrt(2)
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[sqrt(2), -1, 0],
[ -1, 0, 1],
[ 0, 1, -sqrt(2)]]).\
astype(float) / sqrt(8)))
return _mask_filter_result(result, mask)
def freiChen_line1(image, mask):
"""Find the edge intersection in an image using the FreiChen operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen lines.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
0 1 0
-1 0 -1
0 1 0
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ 0, 1, 0],
[-1, 0, -1],
[ 0, 1, 0]]).astype(float) / 2.0))
return _mask_filter_result(result, mask)
def freiChen_line2(image, mask):
"""Find the intersection of edges in an image using the FreiChen
operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen lines.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
-1 0 1
0 0 0
1 0 -1
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[-1, 0, 1 ],
[ 0, 0, 0],
[ 1, 0, -1]]).astype(float) / 2.0))
return _mask_filter_result(result, mask)
def freiChen_line3(image, mask):
"""Find the lines of an image using the FreiChen operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen lines.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
1 -2 1
-2 4 -2
1 -2 1
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ 1, -2, 1 ],
[-2, 4, -2 ],
[ 1, -2, 1]]).astype(float) / 6.0))
return _mask_filter_result(result, mask)
def freiChen_line4(image, mask):
"""Find the lines of an image using the FreiChen operator.
The kernel is applied to the input image, to produce separate
measurements
of the gradient component one orientation.
Parameters
----------
image : 2-D array
Image to process.
mask : 2-D array, optional
An optional mask to limit the application to a certain area.
Note that pixels surrounding masked regions are also masked to
prevent masked regions from affecting the result.
Returns
-------
output : ndarray
The FreiChen lines.
Notes
-----
We use the following kernel and return the absolute value of the
result at each point::
-2 1 -2
1 4 1
-2 1 -2
"""
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ -2, 1, -2 ],
[ 1, 4, 1 ],
[ -2, 1, -2 ]]).astype(float) / 6.0))
return _mask_filter_result(result, mask)
def freiChen_average(image, mask):
image = img_as_float(image)
result = np.abs(convolve(image,
np.array([[ 1, 1, 1 ],
[ 1, 1, 1 ],
[ 1, 1, 1 ]]).astype(float) / 3.0))
return _mask_filter_result(result, mask)
##############
Should i commit and upload to Git because it is easy to read ???
Regards ,
Umesh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20130424/64525953/attachment.html>
More information about the scikit-image
mailing list