move rank/ into filter/

This commit is contained in:
Olivier Debeir
2012-10-18 10:00:10 +02:00
parent 8d219d1427
commit e618c1d454
31 changed files with 83 additions and 75 deletions
+1
View File
@@ -0,0 +1 @@
__author__ = 'olivier'
@@ -19,13 +19,14 @@ import numpy as np
import matplotlib.pyplot as plt
import time
from scipy.ndimage.filters import percentile_filter
from skimage import data
from skimage.morphology import dilation,disk
from skimage.filter import median_filter
from scipy.ndimage.filters import percentile_filter
import skimage.rank as rank
import skimage.filter.rank as rank
def log_timing(func):
def exec_and_timeit(func):
""" Decorator that returns both function results and execution time
(result, ms)
"""
@@ -38,23 +39,23 @@ def log_timing(func):
return wrapper
@log_timing
@exec_and_timeit
def cr_med(image,selem):
return rank.median(image=image,selem = selem)
@log_timing
@exec_and_timeit
def cr_max(image,selem):
return rank.maximum(image=image,selem = selem)
@log_timing
@exec_and_timeit
def cm_dil(image,selem):
return dilation(image=image,selem = selem)
@log_timing
@exec_and_timeit
def ctmf_med(image,radius):
return median_filter(image=image,radius=radius)
@log_timing
@exec_and_timeit
def ndi_med(image,n):
return percentile_filter(image,50,size=n*2-1)
@@ -84,8 +85,6 @@ def compare_dilate():
plt.title('increasing element size')
plt.plot(e_range,rec)
plt.legend(['crank.maximum','cmorph.dilate'])
plt.figure()
plt.imshow(np.hstack((rc,rcm)))
r = 9
elem = disk(r+1)
+5 -3
View File
@@ -11,7 +11,7 @@ import matplotlib.pyplot as plt
from skimage import data
from skimage.morphology import disk
import skimage.rank as rank
import skimage.filter.rank as rank
a8 = (data.coins()).astype('uint8')
@@ -23,11 +23,13 @@ selem = disk(50)
f3 = rank.equalize(a16,selem = selem)
# display results
fig, axes = plt.subplots(nrows=3, figsize=(15,5))
fig, axes = plt.subplots(nrows=3, figsize=(15,15))
ax0, ax1, ax2 = axes
ax0.imshow(np.hstack((a8,f1)))
ax0.set_title('percentile mean')
ax1.imshow(np.hstack((a16,f2)))
ax1.set_title('bilateral mean')
ax2.imshow(np.hstack((a16,f3)))
ax2.set_title('local equalization')
plt.show()
+1 -1
View File
@@ -18,7 +18,7 @@ import numpy as np
import matplotlib.pyplot as plt
from skimage import data, color, img_as_ubyte
from skimage.rank import bilateral_mean
from skimage.filter.rank import bilateral_mean
from skimage.morphology import disk
l = img_as_ubyte(color.rgb2gray(data.lena()))
+1 -1
View File
@@ -13,7 +13,7 @@ import numpy as np
from skimage import data
from skimage.rank import percentile_autolevel,autolevel
from skimage.filter.rank import percentile_autolevel,autolevel
from skimage.morphology import disk
+1 -1
View File
@@ -17,12 +17,12 @@ The local version [2]_ of the histogram equalization emphasized every local gray
from skimage import data
from skimage.util.dtype import dtype_range
from skimage import exposure
from skimage import rank
from skimage.morphology import disk
import matplotlib.pyplot as plt
import numpy as np
from skimage.filter import rank
def plot_img_and_hist(img, axes, bins=256):
"""Plot an image along with its histogram and cumulative histogram.
+1 -1
View File
@@ -27,7 +27,7 @@ import matplotlib.pyplot as plt
from skimage import data
from skimage.filter import threshold_otsu, threshold_adaptive
from skimage.rank import threshold,morph_contr_enh
from skimage.filter.rank import threshold,morph_contr_enh
from skimage.morphology import disk
+2 -3
View File
@@ -14,15 +14,14 @@ See Wikipedia_ for more details on the algorithm.
"""
import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt
from skimage.morphology import watershed,disk
from skimage import rank
from skimage import data
from scipy import ndimage
# original data
from skimage.filter import rank
image = data.camera()
# denoise image
@@ -15,7 +15,7 @@ import numpy as np
cimport numpy as np
# import main loop
from _core16 cimport _core16
from skimage.filter.rank._core16 cimport _core16
# -----------------------------------------------------------------
# kernels uint16 take extra parameter for defining the bitdepth
@@ -15,7 +15,7 @@ import numpy as np
cimport numpy as np
# import main loop
from _core16 cimport _core16
from skimage.filter.rank._core16 cimport _core16
# -----------------------------------------------------------------
# kernels uint16 take extra parameter for defining the bitdepth
@@ -7,7 +7,7 @@ import numpy as np
cimport numpy as np
# import main loop
from _core16 cimport _core16, int_min, int_max
from skimage.filter.rank._core16 cimport _core16, int_min, int_max
# -----------------------------------------------------------------
# kernels uint16 (SOFT version using percentiles)
@@ -15,7 +15,7 @@ import numpy as np
cimport numpy as np
# import main loop
from _core8 cimport _core8
from skimage.filter.rank._core8 cimport _core8
# -----------------------------------------------------------------
# kernels uint8
@@ -7,7 +7,7 @@ import numpy as np
cimport numpy as np
# import main loop
from _core8 cimport _core8, uint8_max, uint8_min
from skimage.filter.rank._core8 cimport _core8, uint8_max, uint8_min
# -----------------------------------------------------------------
# kernels uint8 (SOFT version using percentiles)
@@ -1,17 +1,32 @@
"""
"""bilateral_rank.py - approximate bilateral rankfilter for local (custom kernel) mean
note: 8 bit images are casted into 16 bit image here
The local histogram is computed using a sliding window similar to the method described in
Reference: Huang, T. ,Yang, G. ; Tang, G.. "A fast two-dimensional median filtering algorithm",
IEEE Transactions on Acoustics, Speech and Signal Processing, Feb 1979. Volume: 27 , Issue: 1, Page(s): 13 - 18.
input image can be 8 bit or 16 bit with a value < 4096 (i.e. 12 bit),
8 bit images are casted in 16 bit
the number of histogram bins is determined from the maximum value present in the image
The pixel neighborhood is defined by:
* the given structuring element
* an interval [g-s0,g+s1] in gray level around g the processed pixel gray level
The kernel is flat (i.e. each pixel belonging to the neighborhood contributes equally)
result image is 16 bit with respect to the input image
"""
import warnings
from skimage import img_as_ubyte
import numpy as np
from skimage.filter.rank import _crank16_bilateral
from generic import find_bitdepth
import _crank16_bilateral
from skimage.filter.rank.generic import find_bitdepth
__all__ = ['bilateral_mean', 'bilateral_pop']
@@ -67,7 +82,7 @@ def bilateral_mean(image, selem, out=None, mask=None, shift_x=False, shift_y=Fal
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -131,7 +146,7 @@ def bilateral_pop(image, selem, out=None, mask=None, shift_x=False, shift_y=Fals
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -1,10 +1,9 @@
import numpy as np
import matplotlib.pyplot as plt
from pprint import pprint
from skimage import data
from skimage.morphology.selem import disk
import skimage.rank as rank
import skimage.filter.rank as rank
def plot_all():
a8 = data.camera()
@@ -1,10 +1,9 @@
import numpy as np
import matplotlib.pyplot as plt
from pprint import pprint
from skimage import data
from skimage.morphology.selem import disk
import skimage.rank as rank
import skimage.filter.rank as rank
if __name__ == '__main__':
Binary file not shown.
@@ -3,7 +3,7 @@ import matplotlib.pyplot as plt
import gdal
from skimage.morphology import disk
import skimage.rank as rank
import skimage.filter.rank as rank
filename = 'iko_pan_Ja1.tif'
im16 = gdal.Open(filename).ReadAsArray().astype(np.uint16)
@@ -3,7 +3,7 @@ import matplotlib.pyplot as plt
from skimage import data
from skimage.morphology.selem import disk
import skimage.rank as rank
import skimage.filter.rank as rank
print dir(rank)
@@ -14,14 +14,11 @@ result image is 8 or 16 bit with respect to the input image
"""
import warnings
from skimage import img_as_ubyte
import numpy as np
from generic import find_bitdepth
import _crank16_percentiles
import _crank8_percentiles
from skimage.filter.rank.generic import find_bitdepth
from skimage.filter.rank import _crank16_percentiles, _crank8_percentiles
__all__ = ['percentile_autolevel', 'percentile_gradient',
'percentile_mean', 'percentile_mean_substraction',
@@ -77,7 +74,7 @@ def percentile_autolevel(image, selem, out=None, mask=None, shift_x=False, shift
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -141,7 +138,7 @@ def percentile_gradient(image, selem, out=None, mask=None, shift_x=False, shift_
to be updated
>>> # Local gradient
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -205,7 +202,7 @@ def percentile_mean(image, selem, out=None, mask=None, shift_x=False, shift_y=Fa
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -269,7 +266,7 @@ def percentile_mean_substraction(image, selem, out=None, mask=None, shift_x=Fals
to be updated
>>> # Local mean_substraction
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -333,7 +330,7 @@ def percentile_morph_contr_enh(image, selem, out=None, mask=None, shift_x=False,
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -397,7 +394,7 @@ def percentile(image, selem, out=None, mask=None, shift_x=False, shift_y=False,
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 128*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -462,7 +459,7 @@ def percentile_pop(image, selem, out=None, mask=None, shift_x=False, shift_y=Fal
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -526,7 +523,7 @@ def percentile_threshold(image, selem, out=None, mask=None, shift_x=False, shift
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -12,14 +12,11 @@ result image is 8 or 16 bit with respect to the input image
"""
import warnings
from skimage import img_as_ubyte
import numpy as np
from skimage.filter.rank import _crank8, _crank16
from generic import find_bitdepth
import _crank16
import _crank8
from skimage.filter.rank.generic import find_bitdepth
__all__ = ['autolevel', 'bottomhat', 'equalize', 'gradient', 'maximum', 'mean', 'meansubstraction', 'median', 'minimum', 'modal', 'morph_contr_enh', 'pop', 'threshold', 'tophat']
@@ -71,7 +68,7 @@ def autolevel(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -133,7 +130,7 @@ def bottomhat(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -194,7 +191,7 @@ def equalize(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -255,7 +252,7 @@ def gradient(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local gradient
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -317,7 +314,7 @@ def maximum(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local maximum
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 0, 0, 0, 0],
... [0, 0, 1, 0, 0],
@@ -379,7 +376,7 @@ def mean(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -441,7 +438,7 @@ def meansubstraction(image, selem, out=None, mask=None, shift_x=False, shift_y=F
to be updated
>>> # Local meansubstraction
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -503,7 +500,7 @@ def median(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local median
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 0, 1, 0],
@@ -565,7 +562,7 @@ def minimum(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local minimum
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -628,7 +625,7 @@ def modal(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local modal
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 5, 6, 0],
@@ -691,7 +688,7 @@ def morph_contr_enh(image, selem, out=None, mask=None, shift_x=False, shift_y=Fa
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -753,7 +750,7 @@ def pop(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -815,7 +812,7 @@ def threshold(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -878,7 +875,7 @@ def tophat(image, selem, out=None, mask=None, shift_x=False, shift_y=False):
to be updated
>>> # Local mean
>>> from skimage.morphology import square
>>> import skimage.rank as rank
>>> import skimage.filter.rank as rank
>>> ima8 = 255*np.array([[0, 0, 0, 0, 0],
... [0, 1, 1, 1, 0],
... [0, 1, 1, 1, 0],
@@ -1,12 +1,12 @@
import unittest
import numpy as np
from skimage.filter import rank
from skimage.rank import _crank8,_crank8_percentiles
from skimage.rank import _crank16,_crank16_bilateral,_crank16_percentiles
from skimage.morphology import cmorph,disk
from skimage import data
from skimage import rank
from skimage.morphology import cmorph,disk
from skimage.filter.rank import _crank8, _crank16
from skimage.filter.rank import _crank16_percentiles
class TestSequenceFunctions(unittest.TestCase):
View File