From 8a337dbe465aba617242719712607a38a983db91 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 10:55:12 +0100 Subject: [PATCH 1/9] Move canny from filter to feature --- skimage/feature/__init__.py | 4 +++- skimage/{filter => feature}/_canny.py | 0 skimage/feature/tests/__init__.py | 1 + skimage/{filter => feature}/tests/test_canny.py | 2 +- skimage/filter/__init__.py | 3 ++- skimage/viewer/plugins/canny.py | 2 +- 6 files changed, 8 insertions(+), 4 deletions(-) rename skimage/{filter => feature}/_canny.py (100%) create mode 100644 skimage/feature/tests/__init__.py rename skimage/{filter => feature}/tests/test_canny.py (99%) diff --git a/skimage/feature/__init__.py b/skimage/feature/__init__.py index c46fde01..90bb6e53 100644 --- a/skimage/feature/__init__.py +++ b/skimage/feature/__init__.py @@ -1,3 +1,4 @@ +from ._canny import canny from ._daisy import daisy from ._hog import hog from .texture import greycomatrix, greycoprops, local_binary_pattern @@ -17,7 +18,8 @@ from .util import plot_matches from .blob import blob_dog, blob_log, blob_doh -__all__ = ['daisy', +__all__ = ['canny' + 'daisy', 'hog', 'greycomatrix', 'greycoprops', diff --git a/skimage/filter/_canny.py b/skimage/feature/_canny.py similarity index 100% rename from skimage/filter/_canny.py rename to skimage/feature/_canny.py diff --git a/skimage/feature/tests/__init__.py b/skimage/feature/tests/__init__.py new file mode 100644 index 00000000..fc970954 --- /dev/null +++ b/skimage/feature/tests/__init__.py @@ -0,0 +1 @@ +__author__ = 'julien' diff --git a/skimage/filter/tests/test_canny.py b/skimage/feature/tests/test_canny.py similarity index 99% rename from skimage/filter/tests/test_canny.py rename to skimage/feature/tests/test_canny.py index 2c758edf..43db5037 100644 --- a/skimage/filter/tests/test_canny.py +++ b/skimage/feature/tests/test_canny.py @@ -1,7 +1,7 @@ import unittest import numpy as np from scipy.ndimage import binary_dilation, binary_erosion -import skimage.filter as F +import skimage.feature as F class TestCanny(unittest.TestCase): diff --git a/skimage/filter/__init__.py b/skimage/filter/__init__.py index 649eba6b..61b697d7 100644 --- a/skimage/filter/__init__.py +++ b/skimage/filter/__init__.py @@ -1,6 +1,7 @@ from .lpi_filter import inverse, wiener, LPIFilter2D from ._gaussian import gaussian_filter -from ._canny import canny +# Backward compatibility v<0.10 +from ..feature._canny import canny from .edges import (sobel, hsobel, vsobel, scharr, hscharr, vscharr, prewitt, hprewitt, vprewitt, roberts, roberts_positive_diagonal, roberts_negative_diagonal) diff --git a/skimage/viewer/plugins/canny.py b/skimage/viewer/plugins/canny.py index c2294ba8..83e80890 100644 --- a/skimage/viewer/plugins/canny.py +++ b/skimage/viewer/plugins/canny.py @@ -1,7 +1,7 @@ import numpy as np import skimage -from skimage.filter import canny +from skimage.feature import canny from .overlayplugin import OverlayPlugin from ..widgets import Slider, ComboBox From 23a6f0af6c54e3bcab7c58e610e77da8acfdadf3 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 11:00:16 +0100 Subject: [PATCH 2/9] remove auto added __author__ in __init__.py file --- skimage/feature/tests/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/skimage/feature/tests/__init__.py b/skimage/feature/tests/__init__.py index fc970954..e69de29b 100644 --- a/skimage/feature/tests/__init__.py +++ b/skimage/feature/tests/__init__.py @@ -1 +0,0 @@ -__author__ = 'julien' From b13ea2288a05973ac2cf7b8ba8784a220c2fceb9 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 11:01:08 +0100 Subject: [PATCH 3/9] fix wrong version number --- skimage/filter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skimage/filter/__init__.py b/skimage/filter/__init__.py index 61b697d7..a611cb6c 100644 --- a/skimage/filter/__init__.py +++ b/skimage/filter/__init__.py @@ -1,6 +1,6 @@ from .lpi_filter import inverse, wiener, LPIFilter2D from ._gaussian import gaussian_filter -# Backward compatibility v<0.10 +# Backward compatibility v<0.11 from ..feature._canny import canny from .edges import (sobel, hsobel, vsobel, scharr, hscharr, vscharr, prewitt, hprewitt, vprewitt, roberts, roberts_positive_diagonal, From 5ccc0d0000504faa57a6d7d10cd34c5fa7a741e8 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 11:09:42 +0100 Subject: [PATCH 4/9] update api_changes --- doc/source/api_changes.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/source/api_changes.txt b/doc/source/api_changes.txt index 0271bec0..063ab10c 100644 --- a/doc/source/api_changes.txt +++ b/doc/source/api_changes.txt @@ -1,3 +1,7 @@ +Version 0.11 +------------ +- Move ``skimage.filter.canny`` to ``skimage.feature.canny`` + Version 0.10 ------------ - Removed ``skimage.io.video`` functionality due to broken gstreamer bindings From 218eb4e89eaef60124389ba3f7690a526e548b7d Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 11:48:34 +0100 Subject: [PATCH 5/9] fix import inside documentation and update TODO --- TODO.txt | 1 + doc/examples/applications/plot_coins_segmentation.py | 2 +- doc/examples/plot_canny.py | 6 +++--- .../plot_circular_elliptical_hough_transform.py | 11 ++++++----- doc/examples/plot_line_hough_transform.py | 2 +- doc/source/user_guide/tutorial_segmentation.txt | 4 ++-- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/TODO.txt b/TODO.txt index e2fc4218..f17b088f 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,6 +3,7 @@ Remember to list any API changes below in `doc/source/api_changes.txt`. Version 0.13 ------------ * Remove deprecated `None` defaults for `skimage.exposure.rescale_intensity` +* Remove deprecated `skimage.filter.canny` import in __init__.py that is now in `skimage.feature.canny` Version 0.12 ------------ diff --git a/doc/examples/applications/plot_coins_segmentation.py b/doc/examples/applications/plot_coins_segmentation.py index 49ff399f..50eec0bb 100644 --- a/doc/examples/applications/plot_coins_segmentation.py +++ b/doc/examples/applications/plot_coins_segmentation.py @@ -57,7 +57,7 @@ segmentation. To do this, we first get the edges of features using the Canny edge-detector. """ -from skimage.filter import canny +from skimage.feature import canny edges = canny(coins/255.) fig, ax = plt.subplots(figsize=(4, 3)) diff --git a/doc/examples/plot_canny.py b/doc/examples/plot_canny.py index f1caf264..82a930e5 100644 --- a/doc/examples/plot_canny.py +++ b/doc/examples/plot_canny.py @@ -19,7 +19,7 @@ import numpy as np import matplotlib.pyplot as plt from scipy import ndimage -from skimage import filter +from skimage import feature # Generate noisy image of a square @@ -31,8 +31,8 @@ im = ndimage.gaussian_filter(im, 4) im += 0.2 * np.random.random(im.shape) # Compute the Canny filter for two values of sigma -edges1 = filter.canny(im) -edges2 = filter.canny(im, sigma=3) +edges1 = feature.canny(im) +edges2 = feature.canny(im, sigma=3) # display results fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(8, 3)) diff --git a/doc/examples/plot_circular_elliptical_hough_transform.py b/doc/examples/plot_circular_elliptical_hough_transform.py index fbdd4f2c..9b0be0fb 100755 --- a/doc/examples/plot_circular_elliptical_hough_transform.py +++ b/doc/examples/plot_circular_elliptical_hough_transform.py @@ -37,16 +37,16 @@ Its size is extended by two times the larger radius. import numpy as np import matplotlib.pyplot as plt -from skimage import data, filter, color +from skimage import data, color from skimage.transform import hough_circle -from skimage.feature import peak_local_max +from skimage.feature import peak_local_max, canny from skimage.draw import circle_perimeter from skimage.util import img_as_ubyte # Load picture and detect edges image = img_as_ubyte(data.coins()[0:95, 70:370]) -edges = filter.canny(image, sigma=3, low_threshold=10, high_threshold=50) +edges = canny(image, sigma=3, low_threshold=10, high_threshold=50) fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(5, 2)) @@ -106,14 +106,15 @@ References import matplotlib.pyplot as plt -from skimage import data, filter, color +from skimage import data, color +from skimage.feature import canny from skimage.transform import hough_ellipse from skimage.draw import ellipse_perimeter # Load picture, convert to grayscale and detect edges image_rgb = data.coffee()[0:220, 160:420] image_gray = color.rgb2gray(image_rgb) -edges = filter.canny(image_gray, sigma=2.0, +edges = canny(image_gray, sigma=2.0, low_threshold=0.55, high_threshold=0.8) # Perform a Hough Transform diff --git a/doc/examples/plot_line_hough_transform.py b/doc/examples/plot_line_hough_transform.py index bdb05661..4293c409 100644 --- a/doc/examples/plot_line_hough_transform.py +++ b/doc/examples/plot_line_hough_transform.py @@ -58,7 +58,7 @@ References from skimage.transform import (hough_line, hough_line_peaks, probabilistic_hough_line) -from skimage.filter import canny +from skimage.feature import canny from skimage import data import numpy as np diff --git a/doc/source/user_guide/tutorial_segmentation.txt b/doc/source/user_guide/tutorial_segmentation.txt index cff7c651..d183102f 100644 --- a/doc/source/user_guide/tutorial_segmentation.txt +++ b/doc/source/user_guide/tutorial_segmentation.txt @@ -38,11 +38,11 @@ Edge-based segmentation Let us first try to detect edges that enclose the coins. For edge detection, we use the `Canny detector -`_ of ``skimage.filter.canny`` +`_ of ``skimage.feature.canny`` :: - >>> from skimage.filter import canny + >>> from skimage.feature import canny >>> edges = canny(coins/255.) As the background is very smooth, almost all edges are found at the From bfcc27587aad3e0a1ede0a03162bdbd935eda313 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 11:59:32 +0100 Subject: [PATCH 6/9] fix import in filter.__init__ --- skimage/filter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skimage/filter/__init__.py b/skimage/filter/__init__.py index a611cb6c..9d9fea59 100644 --- a/skimage/filter/__init__.py +++ b/skimage/filter/__init__.py @@ -1,7 +1,7 @@ from .lpi_filter import inverse, wiener, LPIFilter2D from ._gaussian import gaussian_filter # Backward compatibility v<0.11 -from ..feature._canny import canny +from ..feature import canny from .edges import (sobel, hsobel, vsobel, scharr, hscharr, vscharr, prewitt, hprewitt, vprewitt, roberts, roberts_positive_diagonal, roberts_negative_diagonal) From 936211bbcb33af609438b543dfc4bc3a5965feac Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 12:15:47 +0100 Subject: [PATCH 7/9] move import to avoid infinte recursion (filter import peak that import feature that import filter) --- skimage/filter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skimage/filter/__init__.py b/skimage/filter/__init__.py index 9d9fea59..4706f258 100644 --- a/skimage/filter/__init__.py +++ b/skimage/filter/__init__.py @@ -1,7 +1,6 @@ from .lpi_filter import inverse, wiener, LPIFilter2D from ._gaussian import gaussian_filter # Backward compatibility v<0.11 -from ..feature import canny from .edges import (sobel, hsobel, vsobel, scharr, hscharr, vscharr, prewitt, hprewitt, vprewitt, roberts, roberts_positive_diagonal, roberts_negative_diagonal) @@ -10,6 +9,7 @@ from ._gabor import gabor_kernel, gabor_filter from .thresholding import (threshold_adaptive, threshold_otsu, threshold_yen, threshold_isodata) from . import rank +from ..feature import canny from skimage._shared.utils import deprecated From f86b6212bc733afe189b26d6fc87be07f1a06c44 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 12:27:02 +0100 Subject: [PATCH 8/9] Canny is now deprecated and will be in api_changes in v0.13 --- TODO.txt | 2 +- doc/source/api_changes.txt | 4 ---- skimage/filter/__init__.py | 7 ++++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/TODO.txt b/TODO.txt index f17b088f..e8e70e6c 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,7 +3,7 @@ Remember to list any API changes below in `doc/source/api_changes.txt`. Version 0.13 ------------ * Remove deprecated `None` defaults for `skimage.exposure.rescale_intensity` -* Remove deprecated `skimage.filter.canny` import in __init__.py that is now in `skimage.feature.canny` +* Remove deprecated `skimage.filter.canny` import in __init__.py that is now in `skimage.feature.canny` (and complete api_changes.txt. `GitHub discuss `__ ) Version 0.12 ------------ diff --git a/doc/source/api_changes.txt b/doc/source/api_changes.txt index 063ab10c..0271bec0 100644 --- a/doc/source/api_changes.txt +++ b/doc/source/api_changes.txt @@ -1,7 +1,3 @@ -Version 0.11 ------------- -- Move ``skimage.filter.canny`` to ``skimage.feature.canny`` - Version 0.10 ------------ - Removed ``skimage.io.video`` functionality due to broken gstreamer bindings diff --git a/skimage/filter/__init__.py b/skimage/filter/__init__.py index 4706f258..75bbb6b9 100644 --- a/skimage/filter/__init__.py +++ b/skimage/filter/__init__.py @@ -1,6 +1,5 @@ from .lpi_filter import inverse, wiener, LPIFilter2D from ._gaussian import gaussian_filter -# Backward compatibility v<0.11 from .edges import (sobel, hsobel, vsobel, scharr, hscharr, vscharr, prewitt, hprewitt, vprewitt, roberts, roberts_positive_diagonal, roberts_negative_diagonal) @@ -9,8 +8,6 @@ from ._gabor import gabor_kernel, gabor_filter from .thresholding import (threshold_adaptive, threshold_otsu, threshold_yen, threshold_isodata) from . import rank -from ..feature import canny - from skimage._shared.utils import deprecated from skimage import restoration @@ -21,6 +18,10 @@ denoise_tv_bregman = deprecated('skimage.restoration.denoise_tv_bregman')\ denoise_tv_chambolle = deprecated('skimage.restoration.denoise_tv_chambolle')\ (restoration.denoise_tv_chambolle) +# Backward compatibility v<0.11 +from ..feature import canny +canny = deprecated('skimage.feature.canny')(canny) + __all__ = ['inverse', 'wiener', From f8a0f272657f95c06911e8d50155f0df4e902317 Mon Sep 17 00:00:00 2001 From: Julien Coste Date: Sun, 31 Aug 2014 15:21:46 +0100 Subject: [PATCH 9/9] hack to avoid circular import when import canny --- TODO.txt | 3 ++- skimage/filter/__init__.py | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/TODO.txt b/TODO.txt index e8e70e6c..3e6b3a7e 100644 --- a/TODO.txt +++ b/TODO.txt @@ -3,7 +3,8 @@ Remember to list any API changes below in `doc/source/api_changes.txt`. Version 0.13 ------------ * Remove deprecated `None` defaults for `skimage.exposure.rescale_intensity` -* Remove deprecated `skimage.filter.canny` import in __init__.py that is now in `skimage.feature.canny` (and complete api_changes.txt. `GitHub discuss `__ ) +* Remove deprecated `skimage.filter.canny` import in filter/__init__.py file (canny is now in `skimage.feature.canny`). + * Don't forget to complete api_changes.txt. (`GitHub discuss `__ ) Version 0.12 ------------ diff --git a/skimage/filter/__init__.py b/skimage/filter/__init__.py index 75bbb6b9..0228957e 100644 --- a/skimage/filter/__init__.py +++ b/skimage/filter/__init__.py @@ -19,8 +19,11 @@ denoise_tv_chambolle = deprecated('skimage.restoration.denoise_tv_chambolle')\ (restoration.denoise_tv_chambolle) # Backward compatibility v<0.11 -from ..feature import canny -canny = deprecated('skimage.feature.canny')(canny) +@deprecated +def canny(*args, **kwargs): + # Hack to avoid circular import + from skimage.feature._canny import canny as canny_ + return canny_(*args, **kwargs) __all__ = ['inverse',