256 shades of grey www.psi945.fr Stéphane Gonnord – Stéphane Gonnord

publicité
256 shades of grey
Stéphane Gonnord
256 shades of grey
Du pixel au fichier
Pixels
Formats de fichiers image
Stéphane Gonnord – www.psi945.fr
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Jeudi 30 avril 2015
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Plan
Du pixel au fichier
Pixels
Formats de fichiers image
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Manipulations avec Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Qu’est-ce qu’une image ?
I
I
256 shades of grey
Stéphane Gonnord
Un rectangle/une matrice de pixels (PICture
ELements).
Du pixel au fichier
Un pixel = nuance de gris (...) entre 0 et 255... ou
entre 0 et 1.
Manipulations avec
Python
Pixels
Formats de fichiers image
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
I
I
Ou bien (RGB) : trois niveaux Red/Green/Blue de 0 à
255.
Stockage dans un fichier : pixel par pixel, ou après
compression.
I
Compression : destructive ou non (avec ou sans
perte d’information).
I
Poids d’un fichier BitMaP (pixel par pixel sans
compression) en RGB :
3 × L × H octets ;
trois fois moins en noir et blanc !
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
256 shades of grey
Quelques formats d’image
Stéphane Gonnord
Du pixel au fichier
Chat : image 2048 × 1536 pixels ; poids en kilo-octets.
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Ext.
destr.
compr.
chat (RGB)
chat (N&B)
bmp
png
gif
jpg
NON
NON
NON
OUI
NON
OUI
OUI
OUI
9437
4999
3336
400
3147
1533
3367
366
Trois niveaux d’abstraction
I
Le fichier, support « physique », sur le disque.
I
L’objet Python « image » intermédiaire. Contient les
informations sur l’encodage... et les données.
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
I
La matrice des pixels.
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Fichier
Objet Python
Matrice de pixels
’baroudeur.bmp’
<PIL.BmpImage...
...
image mode=RGB
...>
<PIL.JpegImage...
...
image mode=RGB
...>
<PIL.JpegImage...
...
image mode=L
...>
array([[[ 12, 16, 25],
...
[80, 86, 60]]],
dtype=uint8)
array([[[ 12, 16, 25],
...
[80, 86, 60]]],
dtype=uint8)
array([[14, 15, 15, ...,
...
... 80, 80, 80]],
dtype=uint8)
’baroudeur.jpg’
’baroudeurBW.jpg’
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Du fichier aux pixels
I
Image.open : objet image à partir du fichier.
I
numpy.array : tableau/matrice de pixels à partir de l’objet
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
image.
Manipulations avec
Python
I Exemple :
Trois niveaux d’abstraction
Définition de l’objet et de la matrice
>>> chat = im.open(’images_out/baroudeurBW.jpg’)
>>> pixels_chat = np.array(chat)
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Résultat
Floutage
Détection de contours
>>> chat
<PIL.JpegImagePlugin.JpegImageFile image mode=L
size=2048x1536 at 0xB5F911AC>
>>> pixels_chat
array([[ 14, 15, 15, ..., 208, 212, 215],
[ 14, 15, 15, ..., 211, 212, 214],
...,
[208, 206, 203, ..., 80, 80, 80]], dtype=uint8)
Des pixels au fichier
I Image.fromarray : des pixels à l’objet image.
I Méthode save des objets image : pour sauver sous différents formats.
I Exemple :
Que fais-je ?
pixels_chat = np.array( im.open(’baroudeurBW.jpg’) )
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
pixels_chat[ 100:200 , 500:1500 ] =
255*np.ones((100, 1000),dtype=’uint8’)
im.fromarray(pixels_chat).save(’mystere.jpg’)
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Quelques points techniques
256 shades of grey
Stéphane Gonnord
I Slicing : tableau[ a:b , c:d ] en lecture ou écriture.
I numpy.zeros( (a,b) ) et numpy.ones( (a,b) ) attention aux types.
Du pixel au fichier
I Conversion en niveaux (Levels) de gris :
image.open(’image_couleur.jpg’).convert(’L’).save(’image_BW.png’)
I Appliquer une fonction aux pixels : deux approches
Manipulations avec
Python
Appliquons f à M :
pixels1 = np.array(im.open(’baroudeur.jpg’))
Pixel par pixel ; 48 secondes
Pixels
Formats de fichiers image
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
(H, L, _) = pixels1.shape # hauteur * largeur * 3
pixels2 = np.copy(pixels1)
Éclaircissement
Floutage
Détection de contours
for i in range( H ):
for j in range( L ):
pixels2[i][j] = contraste( pixels2[i][j] )
Par application d’une fonction « vectorisée » au tableau ; 3 secondes
contraste_vecto = np.vectorize( contraste )
pixels2 = contraste_vecto( pixels1 )
# en fait : pixels2 = np.array( ... , dtype=’uint8’)
im.fromarray(pixels2).save(’baroudeurBW2.jpg’)
256 shades of grey
Fonction de contraste
I
I
Stéphane Gonnord
On applique f : {0, 1, ..., 255} → {0, 1, ..., 255} à
chaque pixel.
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Pour contraster/décontraster :
Trois niveaux d’abstraction
f1 (x ) = 128 + 2 ×(x − 128)
f2 (x ) = 128 +(x − 128)/2
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
On revient à {0, 1, ..., 255} en cas de dépassement !
Gestion du contraste
Éclaircissement
255
Floutage
y = f1 (x)
y = f2 (x)
Détection de contours
192
y
I
Quelques
traitements d’image
128
64
0
0
64
128
x
192
255
Que devient le chat ?
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Un goutte contrastée 5 fois
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Un autre, aux bords moins nets
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Éclaircissement ou assombrissement
Fonction pour éclaircir/assombrir :
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
f3 (x ) = 255 − (255 − x )/2
255
f4 (x ) = x /2
Trois niveaux d’abstraction
y = f3 (x)
y = f4 (x)
Du fichier aux pixels
Des pixels au fichier
192
y
Formats de fichiers image
Manipulations avec
Python
Un peu de technique
Quelques
traitements d’image
128
Gestion du contraste
64
Éclaircissement
0
0
Floutage
64
128
x
192
255
Détection de contours
256 shades of grey
Floutons πR 2 !
Stéphane Gonnord
Du pixel au fichier
Mi ,j ←
1
9
Pixels
(Mi −1,j −1 + · · · + Mi +1,j +1 )
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
256 shades of grey
Détection de contours
Stéphane Gonnord
On noircit les pixels (i , j ) tels que :
Du pixel au fichier
Pixels
2
2
(Pi −1,j − Pi +1,j ) + (Pi ,j −1 − Pi ,j +1 ) > s,
avec un seuil... à fixer ! On contraste d’abord l’image
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
C’est fini !
Merci de votre attention
256 shades of grey
Stéphane Gonnord
Du pixel au fichier
Pixels
Formats de fichiers image
Manipulations avec
Python
Trois niveaux d’abstraction
Du fichier aux pixels
Des pixels au fichier
Un peu de technique
Quelques
traitements d’image
Gestion du contraste
Éclaircissement
Floutage
Détection de contours
Téléchargement