From efea865cc32e0923d72e875a7e03037796ca054d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 17:00:08 +0200 Subject: [PATCH 01/30] Let Travis run all examples --- .travis.yml | 3 ++- Makefile | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3a127d3d..91924afa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,4 +26,5 @@ script: - mkdir for_test - cd for_test - nosetests-$PYVER --exe -v --cover-package=skimage skimage - + - cd .. + - make run-all-examples diff --git a/Makefile b/Makefile index a0ca9745..985136d3 100644 --- a/Makefile +++ b/Makefile @@ -11,3 +11,6 @@ test: coverage: nosetests skimage --with-coverage --cover-package=skimage + +run-all-examples: + for f in doc/examples/*.py; do python "$f"; done From f51adcd66c5d3f2f13bfd52947ea2fe1580f11b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 18:08:58 +0200 Subject: [PATCH 02/30] Escape dollar-sign in makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 985136d3..1b77f1a1 100644 --- a/Makefile +++ b/Makefile @@ -13,4 +13,4 @@ coverage: nosetests skimage --with-coverage --cover-package=skimage run-all-examples: - for f in doc/examples/*.py; do python "$f"; done + for f in doc/examples/*.py; do python "$$f"; done From 05b15a6debaac7e5318619e9e14d2f9648f4b4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 18:14:53 +0200 Subject: [PATCH 03/30] Add matplotlib to Travis dependencies --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 91924afa..74bd770b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ install: - sudo apt-get install $PYTHON-dev - sudo apt-get install $PYTHON-numpy - sudo apt-get install $PYTHON-scipy + - sudo apt-get install $PYTHON-matplotlib - sudo apt-get install $PYTHON-setuptools - sudo apt-get install $PYTHON-nose - sudo easy_install$PYSUF pip From 1fd26cceb743718b216c37aa3bddb61d19858fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 18:40:53 +0200 Subject: [PATCH 04/30] Set matplotlib backend to Agg --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 74bd770b..9f45b7bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,5 +27,7 @@ script: - mkdir for_test - cd for_test - nosetests-$PYVER --exe -v --cover-package=skimage skimage + # run all examples - cd .. + - echo 'backend : Agg' > matplotlibrc - make run-all-examples From baf313202aec01eecb0f6c9e88364454accf28f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 18:50:33 +0200 Subject: [PATCH 05/30] Use current matplotlib version Python 3 --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9f45b7bd..7c2a9b9c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,8 @@ install: - sudo apt-get install $PYTHON-dev - sudo apt-get install $PYTHON-numpy - sudo apt-get install $PYTHON-scipy - - sudo apt-get install $PYTHON-matplotlib + - if [[ ${TRAVIS_PYTHON_VERSION:0:1} == '2' ]]; then sudo apt-get install $PYTHON-matplotlib; fi + - if [[ ${TRAVIS_PYTHON_VERSION:0:1} == '3' ]]; then sudo pip install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - sudo apt-get install $PYTHON-setuptools - sudo apt-get install $PYTHON-nose - sudo easy_install$PYSUF pip From 2ca44073168b32c42511afd2f71eec067caee7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 18:59:33 +0200 Subject: [PATCH 06/30] Escape greather-than symbol --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7c2a9b9c..7f31bc61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,5 +30,5 @@ script: - nosetests-$PYVER --exe -v --cover-package=skimage skimage # run all examples - cd .. - - echo 'backend : Agg' > matplotlibrc + - echo 'backend : Agg' >> matplotlibrc - make run-all-examples From c8942b1d216b67ccaa7414734ba688f5d9c580a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 19:07:54 +0200 Subject: [PATCH 07/30] Escape double-colon symbol --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7f31bc61..972ce3e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,5 +30,5 @@ script: - nosetests-$PYVER --exe -v --cover-package=skimage skimage # run all examples - cd .. - - echo 'backend : Agg' >> matplotlibrc + - echo 'backend :: Agg' >> matplotlibrc - make run-all-examples From 99d56b92f8bc97db7208f0993f46768b84d792d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sat, 27 Apr 2013 19:10:20 +0200 Subject: [PATCH 08/30] Change python version test --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 972ce3e9..4969a7d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,8 +14,8 @@ install: - sudo apt-get install $PYTHON-dev - sudo apt-get install $PYTHON-numpy - sudo apt-get install $PYTHON-scipy - - if [[ ${TRAVIS_PYTHON_VERSION:0:1} == '2' ]]; then sudo apt-get install $PYTHON-matplotlib; fi - - if [[ ${TRAVIS_PYTHON_VERSION:0:1} == '3' ]]; then sudo pip install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi + - if [[ $PYVER == '2.7' ]]; then sudo apt-get install $PYTHON-matplotlib; fi + - if [[ $PYVER == '3.2' ]]; then sudo pip install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - sudo apt-get install $PYTHON-setuptools - sudo apt-get install $PYTHON-nose - sudo easy_install$PYSUF pip From 249fdcae94ecb293b01c74727655402178b9d0ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 08:34:01 +0200 Subject: [PATCH 09/30] Fix wrong escaping --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4969a7d2..3eda401f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,5 +30,5 @@ script: - nosetests-$PYVER --exe -v --cover-package=skimage skimage # run all examples - cd .. - - echo 'backend :: Agg' >> matplotlibrc + - "echo 'backend \: Agg' > matplotlibrc" - make run-all-examples From cc95173a69d2aa693c07044881b667b6ec55c2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 08:36:34 +0200 Subject: [PATCH 10/30] Add missing python version to pip --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3eda401f..587967b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ install: - sudo apt-get install $PYTHON-numpy - sudo apt-get install $PYTHON-scipy - if [[ $PYVER == '2.7' ]]; then sudo apt-get install $PYTHON-matplotlib; fi - - if [[ $PYVER == '3.2' ]]; then sudo pip install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi + - if [[ $PYVER == '3.2' ]]; then sudo pip-$PYVER install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - sudo apt-get install $PYTHON-setuptools - sudo apt-get install $PYTHON-nose - sudo easy_install$PYSUF pip From e4e47e22c57dd0c6ea1b2f7585c9af30e4478f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 08:40:27 +0200 Subject: [PATCH 11/30] Remove escaping --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 587967b8..3b2751a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,5 +30,5 @@ script: - nosetests-$PYVER --exe -v --cover-package=skimage skimage # run all examples - cd .. - - "echo 'backend \: Agg' > matplotlibrc" + - "echo 'backend : Agg' > matplotlibrc" - make run-all-examples From 401803bb3dfad18d7cb397fcf88dd17a38309947 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 08:49:46 +0200 Subject: [PATCH 12/30] Change invalid install order --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3b2751a0..818d938e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,11 +14,11 @@ install: - sudo apt-get install $PYTHON-dev - sudo apt-get install $PYTHON-numpy - sudo apt-get install $PYTHON-scipy - - if [[ $PYVER == '2.7' ]]; then sudo apt-get install $PYTHON-matplotlib; fi - - if [[ $PYVER == '3.2' ]]; then sudo pip-$PYVER install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - sudo apt-get install $PYTHON-setuptools - sudo apt-get install $PYTHON-nose - sudo easy_install$PYSUF pip + - if [[ $PYVER == '2.7' ]]; then sudo apt-get install $PYTHON-matplotlib; fi + - if [[ $PYVER == '3.2' ]]; then sudo pip-$PYVER install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - sudo pip-$PYVER install cython - sudo apt-get install libfreeimage3 - $PYTHON setup.py build From 7b77861a7554930972eadbc6264ddab9c76a0ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 08:50:26 +0200 Subject: [PATCH 13/30] Move example runner loop to Travis config --- .travis.yml | 2 +- Makefile | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 818d938e..1d3c58ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,4 +31,4 @@ script: # run all examples - cd .. - "echo 'backend : Agg' > matplotlibrc" - - make run-all-examples + - for f in doc/examples/*.py; do python "$$f"; done diff --git a/Makefile b/Makefile index 1b77f1a1..a0ca9745 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,3 @@ test: coverage: nosetests skimage --with-coverage --cover-package=skimage - -run-all-examples: - for f in doc/examples/*.py; do python "$$f"; done From c390070080301715e7fa5235626743b76c444c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 09:37:50 +0200 Subject: [PATCH 14/30] Unescape dollar sign --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1d3c58ea..78169daa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,4 +31,4 @@ script: # run all examples - cd .. - "echo 'backend : Agg' > matplotlibrc" - - for f in doc/examples/*.py; do python "$$f"; done + - for f in doc/examples/*.py; do $PYTHON "$f"; done From eec4aff913aa52e1a22c179478ccebc51d7ad633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 09:39:56 +0200 Subject: [PATCH 15/30] Add better description for example runner --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 78169daa..37e00683 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,7 @@ script: - mkdir for_test - cd for_test - nosetests-$PYVER --exe -v --cover-package=skimage skimage - # run all examples + # Change back to repository root directory and run all doc examples - cd .. - "echo 'backend : Agg' > matplotlibrc" - for f in doc/examples/*.py; do $PYTHON "$f"; done From 5f4dd4ed5f5fbc4c46ca95802dc5aa7ed221f5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 10:06:43 +0200 Subject: [PATCH 16/30] Fix print statement for Python 3 --- doc/examples/applications/plot_geometric.py | 8 +++++--- doc/examples/plot_gabor.py | 16 +++++++++------- doc/examples/plot_local_binary_pattern.py | 17 ++++++++++------- doc/examples/plot_polygon.py | 4 ++-- doc/examples/plot_segmentations.py | 1 + 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/doc/examples/applications/plot_geometric.py b/doc/examples/applications/plot_geometric.py index 337ecad7..141ef51f 100644 --- a/doc/examples/applications/plot_geometric.py +++ b/doc/examples/applications/plot_geometric.py @@ -7,6 +7,8 @@ In this example, we will see how to use geometric transformations in the context of image processing. """ +from __future__ import print_function + import math import numpy as np import matplotlib.pyplot as plt @@ -31,7 +33,7 @@ First we create a transformation using explicit parameters: tform = tf.SimilarityTransform(scale=1, rotation=math.pi / 2, translation=(0, 1)) -print tform._matrix +print(tform._matrix) """ Alternatively you can define a transformation by the transformation matrix @@ -49,8 +51,8 @@ systems: """ coord = [1, 0] -print tform2(coord) -print tform2.inverse(tform(coord)) +print(tform2(coord)) +print(tform2.inverse(tform(coord))) """ Image warping diff --git a/doc/examples/plot_gabor.py b/doc/examples/plot_gabor.py index c335016d..b3526943 100644 --- a/doc/examples/plot_gabor.py +++ b/doc/examples/plot_gabor.py @@ -12,6 +12,8 @@ kernels. The mean and variance of the filtered images are then used as features for classification, which is based on the least squared error for simplicity. """ +from __future__ import print_function + import matplotlib import matplotlib.pyplot as plt import numpy as np @@ -69,19 +71,19 @@ ref_feats[0, :, :] = compute_feats(brick, kernels) ref_feats[1, :, :] = compute_feats(grass, kernels) ref_feats[2, :, :] = compute_feats(wall, kernels) -print 'Rotated images matched against references using Gabor filter banks:' +print('Rotated images matched against references using Gabor filter banks:') -print 'original: brick, rotated: 30deg, match result:', +print('original: brick, rotated: 30deg, match result:', end='') feats = compute_feats(nd.rotate(brick, angle=190, reshape=False), kernels) -print image_names[match(feats, ref_feats)] +print(image_names[match(feats, ref_feats)]) -print 'original: brick, rotated: 70deg, match result:', +print('original: brick, rotated: 70deg, match result:', end='') feats = compute_feats(nd.rotate(brick, angle=70, reshape=False), kernels) -print image_names[match(feats, ref_feats)] +print(image_names[match(feats, ref_feats)]) -print 'original: grass, rotated: 145deg, match result:', +print('original: grass, rotated: 145deg, match result:', end='') feats = compute_feats(nd.rotate(grass, angle=145, reshape=False), kernels) -print image_names[match(feats, ref_feats)] +print(image_names[match(feats, ref_feats)]) def power(image, kernel): diff --git a/doc/examples/plot_local_binary_pattern.py b/doc/examples/plot_local_binary_pattern.py index d32a642f..5bb4359e 100644 --- a/doc/examples/plot_local_binary_pattern.py +++ b/doc/examples/plot_local_binary_pattern.py @@ -9,9 +9,12 @@ textures. For simplicity the histogram distributions are then tested against each other using the Kullback-Leibler-Divergence. """ +from __future__ import print_function + import numpy as np import matplotlib import matplotlib.pyplot as plt + from skimage.transform import rotate from skimage.feature import local_binary_pattern from skimage import data @@ -57,13 +60,13 @@ refs = { } # classify rotated textures -print 'Rotated images matched against references using LBP:' -print 'original: brick, rotated: 30deg, match result:', -print match(refs, rotate(brick, angle=30, resize=False)) -print 'original: brick, rotated: 70deg, match result:', -print match(refs, rotate(brick, angle=70, resize=False)) -print 'original: grass, rotated: 145deg, match result:', -print match(refs, rotate(grass, angle=145, resize=False)) +print('Rotated images matched against references using LBP:') +print('original: brick, rotated: 30deg, match result:', end='') +print(match(refs, rotate(brick, angle=30, resize=False))) +print('original: brick, rotated: 70deg, match result:', end='') +print(match(refs, rotate(brick, angle=70, resize=False))) +print('original: grass, rotated: 145deg, match result:', end='') +print(match(refs, rotate(grass, angle=145, resize=False))) # plot histograms of LBP of textures fig, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3, diff --git a/doc/examples/plot_polygon.py b/doc/examples/plot_polygon.py index 078bb6cf..c605f12a 100644 --- a/doc/examples/plot_polygon.py +++ b/doc/examples/plot_polygon.py @@ -45,7 +45,7 @@ for _ in range(5): # approximate subdivided polygon with Douglas-Peucker algorithm appr_hand = approximate_polygon(new_hand, tolerance=0.02) -print "Number of coordinates:", len(hand), len(new_hand), len(appr_hand) +print("Number of coordinates:", len(hand), len(new_hand), len(appr_hand)) fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(9, 4)) @@ -70,7 +70,7 @@ for contour in find_contours(img, 0): ax2.plot(coords[:, 1], coords[:, 0], '-r', linewidth=2) coords2 = approximate_polygon(contour, tolerance=39.5) ax2.plot(coords2[:, 1], coords2[:, 0], '-g', linewidth=2) - print "Number of coordinates:", len(contour), len(coords), len(coords2) + print("Number of coordinates:", len(contour), len(coords), len(coords2)) ax2.axis((0, 800, 0, 800)) diff --git a/doc/examples/plot_segmentations.py b/doc/examples/plot_segmentations.py index 418a0903..55bb6082 100644 --- a/doc/examples/plot_segmentations.py +++ b/doc/examples/plot_segmentations.py @@ -58,6 +58,7 @@ of Quickshift, while ``n_segments`` chooses the number of centers for kmeans. Pascal Fua, and Sabine Suesstrunk, SLIC Superpixels Compared to State-of-the-art Superpixel Methods, TPAMI, May 2012. """ +from __future__ import print_function import matplotlib.pyplot as plt import numpy as np From 9487ba7913e0a2e6c1250a93f060d65fe7cd1844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 10:08:00 +0200 Subject: [PATCH 17/30] Add missing future import --- doc/examples/plot_polygon.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/examples/plot_polygon.py b/doc/examples/plot_polygon.py index c605f12a..821c4558 100644 --- a/doc/examples/plot_polygon.py +++ b/doc/examples/plot_polygon.py @@ -7,8 +7,11 @@ This example shows how to approximate (Douglas-Peucker algorithm) and subdivide (B-Splines) polygonal chains. """ +from __future__ import print_function + import numpy as np import matplotlib.pyplot as plt + from skimage.draw import ellipse from skimage.measure import find_contours, approximate_polygon, \ subdivide_polygon From fd4716340e978d72dbcffe7f06fd56b51c6cf517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 10:31:17 +0200 Subject: [PATCH 18/30] Add missing trailing space to print statement --- doc/examples/plot_gabor.py | 6 +++--- doc/examples/plot_local_binary_pattern.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/examples/plot_gabor.py b/doc/examples/plot_gabor.py index b3526943..db1ff7d6 100644 --- a/doc/examples/plot_gabor.py +++ b/doc/examples/plot_gabor.py @@ -73,15 +73,15 @@ ref_feats[2, :, :] = compute_feats(wall, kernels) print('Rotated images matched against references using Gabor filter banks:') -print('original: brick, rotated: 30deg, match result:', end='') +print('original: brick, rotated: 30deg, match result: ', end='') feats = compute_feats(nd.rotate(brick, angle=190, reshape=False), kernels) print(image_names[match(feats, ref_feats)]) -print('original: brick, rotated: 70deg, match result:', end='') +print('original: brick, rotated: 70deg, match result: ', end='') feats = compute_feats(nd.rotate(brick, angle=70, reshape=False), kernels) print(image_names[match(feats, ref_feats)]) -print('original: grass, rotated: 145deg, match result:', end='') +print('original: grass, rotated: 145deg, match result: ', end='') feats = compute_feats(nd.rotate(grass, angle=145, reshape=False), kernels) print(image_names[match(feats, ref_feats)]) diff --git a/doc/examples/plot_local_binary_pattern.py b/doc/examples/plot_local_binary_pattern.py index 5bb4359e..8c9cabae 100644 --- a/doc/examples/plot_local_binary_pattern.py +++ b/doc/examples/plot_local_binary_pattern.py @@ -61,11 +61,11 @@ refs = { # classify rotated textures print('Rotated images matched against references using LBP:') -print('original: brick, rotated: 30deg, match result:', end='') +print('original: brick, rotated: 30deg, match result: ', end='') print(match(refs, rotate(brick, angle=30, resize=False))) -print('original: brick, rotated: 70deg, match result:', end='') +print('original: brick, rotated: 70deg, match result: ', end='') print(match(refs, rotate(brick, angle=70, resize=False))) -print('original: grass, rotated: 145deg, match result:', end='') +print('original: grass, rotated: 145deg, match result: ', end='') print(match(refs, rotate(grass, angle=145, resize=False))) # plot histograms of LBP of textures From 7232f912dc8828fa829519f83965ff5cff481e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 10:35:22 +0200 Subject: [PATCH 19/30] Install matplotlib after freeimage --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 37e00683..5560843b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,10 +17,10 @@ install: - sudo apt-get install $PYTHON-setuptools - sudo apt-get install $PYTHON-nose - sudo easy_install$PYSUF pip - - if [[ $PYVER == '2.7' ]]; then sudo apt-get install $PYTHON-matplotlib; fi - - if [[ $PYVER == '3.2' ]]; then sudo pip-$PYVER install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - sudo pip-$PYVER install cython - sudo apt-get install libfreeimage3 + - if [[ $PYVER == '2.7' ]]; then sudo apt-get install $PYTHON-matplotlib; fi + - if [[ $PYVER == '3.2' ]]; then sudo pip-$PYVER install git+git://github.com/matplotlib/matplotlib.git@v1.2.x; fi - $PYTHON setup.py build - sudo $PYTHON setup.py install script: From 3a2b0cbbf9161aa2d945638719c95d4cbee296bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Apr 2013 10:58:55 +0200 Subject: [PATCH 20/30] Use png rather than jpg for chelsea image --- skimage/data/chelsea.jpg | Bin 86610 -> 0 bytes skimage/data/chelsea.png | Bin 0 -> 240512 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 skimage/data/chelsea.jpg create mode 100644 skimage/data/chelsea.png diff --git a/skimage/data/chelsea.jpg b/skimage/data/chelsea.jpg deleted file mode 100644 index 7692c1f5cf388689895bd73cde1acad673f8b245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86610 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

sQV6!4^%-P1IUST}cik3*6Y_CgwTB?NFe5rn(yN zU~H7R{_SWFiuGq-b*K#$ptyA09=@OBgjI5t$c)++o2_G2uY3Nz@NURL-}r^s6_6CG z;-$BT_*)F!x0GgqS4_Rtpjz8@_1hSZQ!HF z->D;Vag4ff>!b@CSc7Z^v6j6Gy(-Epp>*SG>ACju-`A!w*Gx814fPiw4afd*0RcjC zx6{{!eKT&R)zZ3I1y)AqwYuNm9R`@72+~I2uX|e-0o?%gm)ET8>k=ZmjWf1_Y%OuH z{{S3w7J`@-`Bi1h>*y=gjb57L8uWq+hUfFb=4?p`Q7H<(uAo}j=&LcEx)qH;BQCP6 zm@%X*fV3*swaDA^!t;uGOi#N^$TEo{1@fU1@H2YBv4)v=4mpTeCNDYOn>M#rWXoJ`7d-lf0x zZ6=#hss;;;yAer>rLw%(m_qrtXAc39KtG^K8-E@c#k%FX6%rz6ElqE4kbIYAX# zeAa_(%LPDcOPwwT_wRYG_K|{|0WVRLwLAW;3M*h2Ew&uLA zmE%?(pk@~)!KlEFl~b#=6s|2YvWqB|lywwq3BQz`UR#Z@8ibOB7*a=sh|;8jq(YUc z8FQreWZ`;f>T@||`lKmz*gUg1hxARSvak>q*d9kxN|WXnw{m*odo1NBbEH)nnEZxS zDjJj}Hop@N?~9imWSt=nfB{f8N`>||z*vXUcUNu)#6`X6=C^<%E