pydata paris 2015 - track 1.1 emmanuelle gouillart

23
Image processing with scikit-image Emmanuelle Gouillart Surface, Glass and Interfaces, CNRS/Saint-Gobain @EGouillart

Upload: pole-systematic-paris-region

Post on 15-Jul-2015

145 views

Category:

Data & Analytics


1 download

TRANSCRIPT

Page 1: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Image processing with scikit-image

Emmanuelle GouillartSurface, Glass and Interfaces, CNRS/Saint-Gobain

@EGouillart

Page 2: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

The revolution of images

Page 3: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

The revolution of images

Page 4: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

A flood of images

several 108 images uploaded on Facebook each day

Page 5: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

A flood of images

hundreds of terabytes of scientific data for scientific experimenthttp://sdo.gsfc.nasa.gov/

Image processingManipulating images in order toretrieve new images or imagecharacteristics (features,measurements, ...)Often combined with machine learning

Page 6: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

A flood of images

hundreds of terabytes of scientific data for scientific experimenthttp://sdo.gsfc.nasa.gov/

Image processingManipulating images in order toretrieve new images or imagecharacteristics (features,measurements, ...)Often combined with machine learning

Page 7: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Why use scikit-image?

Lots of excellent tools available: OpenCV (computer vision),ImageJ (GUI-based software), ITK, ...

Native NumPycompatibility

Gentle learning curve

Variety of features

Versatile - 3D-friendly

Page 8: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

DatasheetPackage statistics

http://scikit-image.org/

Release 0.11 (1 - 2 release per year)Available in most Scientific PythonDistributions: Canopy, Anaconda, . . .Packaged on Ubuntu/DebianAmong 1000 best ranked packages onPyPi

Development modelMature algorithmsOnly Python + Cython code foreasier maintainabilityThorough code review by others:readability, PEP8, efficiency, ...Core team of 5 − 10 persons(close to applications)

Page 9: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Manipulating images as numerical (numpy) arrays

Pixels are arrays elementsimport numpy as npimage = np. ones ((5, 5))image [0, 0] = 0image [2, :] = 0x

>>> coffee.shape(400, 600, 3)>>> red channel =coffee[..., 0]>>> image 3d =np.ones((100, 100, 100))

Page 10: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Manipulating images as numerical (numpy) arrays

Pixels are arrays elementsimport numpy as npimage = np. ones ((5, 5))image [0, 0] = 0image [2, :] = 0x

>>> coffee.shape(400, 600, 3)>>> red channel =coffee[..., 0]>>> image 3d =np.ones((100, 100, 100))

Page 11: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

NumPy-native: images as NumPy arrays

NumPy arrays as arguments and outputs

>>> from sk image import i o , f i l t e r s>>> c a m e r a a r r a y = i o . imread ( ’ camera image . png ’ )>>> type( c a m e r a a r r a y )<type ’numpy . ndarray ’ >>>> c a m e r a a r r a y . dtypedtype ( ’ u in t8 ’ )>>> 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 (

came ra a r r a y , s igma =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

Page 12: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

An API relying mostly on functionssk image . f i l t e r s . g a u s s i a n f i l t e r ( image , s igma , outpu t =

None , mode= ’ n e a r e s t ’ , c v a l =0, m u l t i c h a n n e l =None)

Mult i - d i m e n s i o n a l G a u s s i a n filter

Paramete r s----------

image : a r r a y - l i k einput image ( g r a y s c a l e or c o l o r ) to filter .

s igma : s c a l a r or s equence o f s c a l a r ss t a n d a r d d e v i a t i o n f o r G a u s s i a n k e r n e l . The

s t a n d a r dd e v i a t i o n s o f the G a u s s i a n filter a r e g i v e n f o r

each a x i s as asequence , or as a s i n g l e number , i n which c a s e i t

i s e q u a l f o rall ax e s .

outpu t : a r r a y , o p t i o n a lThe ‘‘ output ‘‘ pa ramete r p a s s e s an a r r a y i n which

to s t o r e thefilter outpu t .

mode : { ’ r e f l e c t ’ , ’ c ons tant ’ , ’ n e a r e s t ’ , ’ m i r ro r ’ , ’wrap ’ }, o p t i o n a lThe ‘mode‘ pa ramete r d e t e r m i n e s how the a r r a y

b o r d e r s a r ehand led , where ‘ c v a l ‘ i s the v a l u e when mode i s

e q u a l to’ c ons tant ’ . D e f a u l t i s ’ n e a r e s t ’ .

c v a l : s c a l a r , o p t i o n a lVa lue to f i l l p a s t edge s o f input i f ‘mode‘ i s ’

c ons tant ’ . D e f a u l ti s 0.0

m u l t i c h a n n e l : bool , o p t i o n a l ( d e f a u l t : None)Whether the l a s t a x i s o f the image i s to be

i n t e r p r e t e d as m u l t i p l ec h a n n e l s . I f True , each c h a n n e l i s f i l t e r e d

s e p a r a t e l y ( c h a n n e l s a r enot mixed t o g e t h e r ). Only 3 c h a n n e l s a r e s u p p o r t e d

. I f ‘None ‘,the f u n c t i o n w i l l a t t empt to g u e s s t h i s , and r a i s e

a warn ing i fambiguous , when the a r r a y has shape (M, N, 3).

Retu rn s-------

f i l t e r e d i m a g e : n d a r r a ythe f i l t e r e d a r r a y

”””x

Page 13: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Getting started: finding documentation

Page 14: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Gallery of examples

Page 15: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Getting started: finding documentation

Page 16: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Filtering: transforming image data

skimage.filter, skimage.exposure, skimage.restoration

Page 17: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Extracting features

skimage.feature, skimage.filter

Page 18: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Feature extraction followed by classificationCombining scikit-image and scikit-learn

Extract features (skimage.feature)Pixels intensity values (R, G, B)Local gradientsMore advanced descriptors: HOGs, Gabor, ...

Train classifier with known regionshere, random forest classifier

Classify pixels

Page 19: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Geometrical transformations

skimage.transformscale, zoom, rotate, swirl, warp, ...

Page 20: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Segmentation: labelling regions

skimage.segmentation

Page 21: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Measures on images

skimage.measure

Page 22: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Versatile use for 2D, 2D-RGB, 3D...

>>> from sk image 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

Page 23: PyData Paris 2015 - Track 1.1 Emmanuelle Gouillart

Try it out! http://scikit-image.org/

Feedback welcomegithub.com/scikit-image/scikit-image

Please cite the paper ,