Emmanuelle Gouillart (CNRS): “Introduction to scikit-image”
Abstract: scikit-image is a general-purpose image processing module for the Python programming language. It is designed to interact efficiently with other popular scientific Python libraries, such as NumPy and SciPy. In particular, scikit-image leverages the powerful data array container of NumPy, that can store images of various dimensions (2-D, 2D RGB, 3D, 4D…).
Bio: I’m a researcher in physics, working in the joint unit between the French institute CNRS and the company Saint-Gobain. I’m a member of the core development team of scikit-image, and I’ve been focussing in particular on implementing segmentation and denoising algorithms. I’m also a member of the PSF.
4. A flood of images
several 108 images uploaded on Facebook each day
5. A flood of images
hundreds of terabytes of scientific data for scientific experiment
http://sdo.gsfc.nasa.gov/
6. A flood of images
hundreds of terabytes of scientific data for scientific experiment
http://sdo.gsfc.nasa.gov/
Image processing
Manipulating images in order to
retrieve new images or image
characteristics (features,
measurements, ...)
Often combined with machine learning
7. Why use scikit-image?
Lots of excellent tools available: OpenCV (computer vision),
ImageJ (GUI-based software), ITK, ...
Native NumPy
compatibility
Gentle learning curve
Variety of features
Versatile - 3D-friendly
8. Datasheet
Package statistics
http://scikit-image.org/
Release 0.11 (1 - 2 release per year)
Available in most Scientific Python
Distributions: Canopy, Anaconda, . . .
Packaged on Ubuntu/Debian
Among 1000 best ranked packages on
PyPi
Development model
Mature algorithms
Only Python + Cython code for
easier maintainability
Thorough code review by others:
readability, PEP8, efficiency, ...
Core team of 5 − 10 persons
(close to applications)
9. Manipulating images as numerical (numpy) arrays
Pixels are arrays elements
import numpy as np
image = np. ones ((5, 5))
image [0, 0] = 0
image [2, :] = 0
x
10. Manipulating images as numerical (numpy) arrays
Pixels are arrays elements
import numpy as np
image = np. ones ((5, 5))
image [0, 0] = 0
image [2, :] = 0
x
>>> coffee.shape
(400, 600, 3)
>>> red channel =
coffee[..., 0]
>>> image 3d =
np.ones((100, 100, 100))
11. NumPy-native: images as NumPy arrays
NumPy arrays as arguments and outputs
>>> from skimage import io , f i l t e r s
>>> c am er a a rr ay = i o . imread ( ’ camera image . png ’ )
>>> type( c am er a a rr ay )
<type ’numpy . ndarray ’ >
>>> c am er a a rr ay . dtype
dtype ( ’ uint8 ’ )
>>> f i l t e r e d a r r a y = f i l t e r s . g a u s s i a n f i l t e r (
camera array , sigma =5)
>>> type( f i l t e r e d a r r a y )
<type ’numpy . ndarray ’ >
>>> import m a t p l o t l i b . p y p l o t as p l t
>>> p l t .imshow( f i l t e r e d a r r a y , cmap= ’ gray ’ )
x
12. An API relying mostly on functions
skimage . f i l t e r s . g a u s s i a n f i l t e r (image , sigma , output =
None, mode= ’ n ea re st ’ , c v a l =0, m u l t i c h a n n e l =None)
Multi - d i m e n s i o n a l Gaussian filter
Parameters
----------
image : array - l i k e
input image ( g r a y s c a l e or c o l o r ) to filter.
sigma : s c a l a r or sequence of s c a l a r s
standard d e v i a t i o n f o r Gaussian k e r n e l . The
standard
d e v i a t i o n s of the Gaussian filter are g i v e n f o r
each a x i s as a
sequence , or as a s i n g l e number , in which case i t
i s equal f o r
all axes .
output : array , o p t i o n a l
The ‘‘ output ‘‘ parameter p a s s e s an a r r a y in which
to s t o r e the
filter output .
18. Feature extraction followed by classification
Combining scikit-image and scikit-learn
Extract features (skimage.feature)
Pixels intensity values (R, G, B)
Local gradients
More advanced descriptors: HOGs, Gabor, ...
Train classifier with known regions
here, random forest classifier
Classify pixels
22. Versatile use for 2D, 2D-RGB, 3D...
>>> from skimage import measure
>>> l a b e l s 2 d = measure . l a b e l ( image 2d )
>>> l a b e l s 3 d = measure . l a b e l ( image 3d )
x
23. Try it out! http://scikit-image.org/
Feedback welcome
github.com/scikit-image/scikit-image
Please cite the paper