From 45f21d3941c53aeeb027a4871fbc49de1da3c873 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Mar 2015 19:11:29 -0500 Subject: [PATCH 1/7] Fix handling of ImageCollection indexing and add test --- skimage/io/collection.py | 11 +++++++---- skimage/io/tests/test_freeimage.py | 10 ++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/skimage/io/collection.py b/skimage/io/collection.py index 49d6aa25..838a9f90 100644 --- a/skimage/io/collection.py +++ b/skimage/io/collection.py @@ -254,13 +254,16 @@ class ImageCollection(object): if ((self.conserve_memory and n != self._cached) or (self.data[idx] is None)): + kwargs = self.load_func_kwargs if self._frame_index: fname, img_num = self._frame_index[n] - self.data[idx] = self.load_func(fname, img_num=img_num, - **self.load_func_kwargs) + if img_num > 0: + self.data[idx] = self.load_func(fname, img_num=img_num, + **kwargs) + else: + self.data[idx] = self.load_func(fname, **kwargs) else: - self.data[idx] = self.load_func(self.files[n], - **self.load_func_kwargs) + self.data[idx] = self.load_func(self.files[n], **kwargs) self._cached = n return self.data[idx] diff --git a/skimage/io/tests/test_freeimage.py b/skimage/io/tests/test_freeimage.py index 81f8058a..22e09709 100644 --- a/skimage/io/tests/test_freeimage.py +++ b/skimage/io/tests/test_freeimage.py @@ -1,6 +1,7 @@ import os import skimage as si import skimage.io as sio +from skimage import data_dir import numpy as np from numpy.testing import * @@ -12,6 +13,7 @@ try: FI_available = True sio.use_plugin('freeimage') except RuntimeError: + raise FI_available = False np.random.seed(0) @@ -112,5 +114,13 @@ def test_metadata(): assert meta[1][('EXIF_MAIN', 'Software')].startswith('I') +@skipif(not FI_available) +def test_collection(): + pattern = [os.path.join(data_dir, pic) + for pic in ['camera.png', 'color.png']] + images = sio.ImageCollection(pattern) + assert len(images) == 2 + assert len(images[:]) == 2 + if __name__ == "__main__": run_module_suite() From 80555a2bdbf01d229cf0704dcb817ae14c5eb6fe Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Mar 2015 19:14:25 -0500 Subject: [PATCH 2/7] Add a note to the docstring --- skimage/io/collection.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skimage/io/collection.py b/skimage/io/collection.py index 838a9f90..e8cc0656 100644 --- a/skimage/io/collection.py +++ b/skimage/io/collection.py @@ -135,7 +135,8 @@ class ImageCollection(object): ic = ImageCollection('/tmp/*.png', load_func=imread_convert) For files with multiple images, the images will be flattened into a list - and added to the list of available images. + and added to the list of available images. In this case, ``load_func`` + should accept the keyword argument ``img_num``. Examples -------- From 4344817c70b914f5de2ac16058947d92ccd0ecab Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 20 Mar 2015 19:35:17 -0500 Subject: [PATCH 3/7] Remove debug error raise --- skimage/io/tests/test_freeimage.py | 1 - 1 file changed, 1 deletion(-) diff --git a/skimage/io/tests/test_freeimage.py b/skimage/io/tests/test_freeimage.py index 22e09709..7c04bee5 100644 --- a/skimage/io/tests/test_freeimage.py +++ b/skimage/io/tests/test_freeimage.py @@ -13,7 +13,6 @@ try: FI_available = True sio.use_plugin('freeimage') except RuntimeError: - raise FI_available = False np.random.seed(0) From a51d49abe6b3a39b4d801cdbfbdfd87bf94c051d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 21 Mar 2015 09:31:05 -0500 Subject: [PATCH 4/7] Always use _find_images() --- skimage/io/collection.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/skimage/io/collection.py b/skimage/io/collection.py index e8cc0656..a8a890f4 100644 --- a/skimage/io/collection.py +++ b/skimage/io/collection.py @@ -163,11 +163,10 @@ class ImageCollection(object): for pattern in load_pattern: self._files.extend(glob(pattern)) self._files = sorted(self._files, key=alphanumeric_key) - self._numframes = self._find_images() else: self._files = load_pattern - self._numframes = len(load_pattern) - self._frame_index = None + + self._numframes = self._find_images() if conserve_memory: memory_slots = 1 From caea879bfc0e0838024ec49aefc87c8d62fb26b8 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 21 Mar 2015 09:31:34 -0500 Subject: [PATCH 5/7] More specific test in freeimage --- skimage/io/tests/test_freeimage.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/skimage/io/tests/test_freeimage.py b/skimage/io/tests/test_freeimage.py index 7c04bee5..fd5af343 100644 --- a/skimage/io/tests/test_freeimage.py +++ b/skimage/io/tests/test_freeimage.py @@ -116,10 +116,12 @@ def test_metadata(): @skipif(not FI_available) def test_collection(): pattern = [os.path.join(data_dir, pic) - for pic in ['camera.png', 'color.png']] + for pic in ['camera.png', 'color.png', 'multipage.tif']] images = sio.ImageCollection(pattern) - assert len(images) == 2 - assert len(images[:]) == 2 + assert len(images) == 4 + assert len(images[:]) == 4 + # this will fail as freeimage cannot load multi-image tifs + assert_raises(TypeError, images.__getitem__, 3) if __name__ == "__main__": run_module_suite() From 73b19427515f4fa6768fa9374bd681a4d202273d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 23 Mar 2015 15:35:17 -0500 Subject: [PATCH 6/7] Do not attempt to use _frame_index for exotic load_patterns --- skimage/io/collection.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/skimage/io/collection.py b/skimage/io/collection.py index a8a890f4..aab7cb86 100644 --- a/skimage/io/collection.py +++ b/skimage/io/collection.py @@ -163,10 +163,11 @@ class ImageCollection(object): for pattern in load_pattern: self._files.extend(glob(pattern)) self._files = sorted(self._files, key=alphanumeric_key) + self._numframes = self._find_images() else: self._files = load_pattern - - self._numframes = self._find_images() + self._numframes = len(self._files) + self._frame_index = None if conserve_memory: memory_slots = 1 From 9ef99d0bb1a48ae7902f4aee9e4045331dd4fb68 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 23 Mar 2015 19:33:57 -0500 Subject: [PATCH 7/7] Fix freeimage collection test --- skimage/io/tests/test_freeimage.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/skimage/io/tests/test_freeimage.py b/skimage/io/tests/test_freeimage.py index fd5af343..238229d1 100644 --- a/skimage/io/tests/test_freeimage.py +++ b/skimage/io/tests/test_freeimage.py @@ -117,11 +117,13 @@ def test_metadata(): def test_collection(): pattern = [os.path.join(data_dir, pic) for pic in ['camera.png', 'color.png', 'multipage.tif']] + images = sio.ImageCollection(pattern[:-1]) + assert len(images) == 2 + assert len(images[:]) == 2 + images = sio.ImageCollection(pattern) - assert len(images) == 4 - assert len(images[:]) == 4 - # this will fail as freeimage cannot load multi-image tifs - assert_raises(TypeError, images.__getitem__, 3) + assert len(images) == 3 + assert len(images[:]) == 3 if __name__ == "__main__": run_module_suite()