IndexaBon et Recherche Vidéo

Transcription

IndexaBon et Recherche Vidéo
Indexa'on et Recherche Vidéo Descripteurs d’images Introduc'on •  Historique : –  1950-­‐1970 : Images Rayons X Améliora'on d’images –  1970-­‐1980 : Extrac'on automa'que d’informa'ons Seuillage Segmenta'on Extrac'on de contours Introduc'on –  1980-­‐ : Image 2D ⇒ Modèle 3D Analyse du mouvement Applica'on : Robo'que et guidage de véhicule –  Perspec'ves : Acquisi'on Analyse et interpréta'on de l’informa'on Image : la structure de donnée •  Un tableau de NxM pixels –  Une matrice 2D NxM –  Exemple : Image en niveaux de gris N
L valeurs possibles
M
•  Un pixel est un élément atomique de l’image –  Binaire, Intensité, Couleur (RGB), … –  Dimension? –  Distance Noir = 0 ≤ l < L = Blanc
avec L=256, 1 pixel = 1 octet
Représenta'on et correspondance •  Représenta'on, descripteurs : –  Couleur, –  Texture, –  Points d’intérêts, –  Forme, –  Structure … + -­‐ •  Mesures de correspondance associées : – Dépendent du descripteur et du contexte d’applica'on -­‐ •  A^en'on à la taille des descripteurs  Temps de calcul ! Objec'f (de ce cours) Analyse d’images pour l’indexa'on ! •  Descripteurs d’images •  Présenta'on des bibliothèques Java Descripteurs globaux ou locaux •  Descripteur global : sur l’image complète •  Descripteur local : par bloc, région, pixel –  Un histogramme (mono-­‐ ou mul'dimensionnel par bloc), –  Le descripteur est la concaténa'on des histogrammes des différents blocs. –  Typiquement : blocs de 4 x 4 complémentaires mais des choix non symétriques et non complémentaires sont également possibles : par exemple 2 x 2 + image complète + centre. –  Par régions d’images (lesquelles?) –  Problème de taille → peu de « bins » par dimension ou beaucoup de « bins » au total. Descripteurs de couleur •  Espaces de couleurs •  Moments •  Histogrammes Quelques espaces de couleur •  Linéaires : –  RGB : Rouge, vert, bleu. •  Système de couleur addi'f –  YCbCr : Luminance, Chrominances (L-­‐rouge, L-­‐bleu). •  Non linéaires : –  HSV : Hue, Satura'on, Value, –  LAB : Luminance, Chrominance •  Les distances euclidiennes entre couleurs sont plus proches des différences perçues par les humains. Histogrammes de couleur •  Monodimensionnel : –  Histogramme composante par composante ou histogramme unique si l’image est monochrome, –  L’espace des valeurs de l’intensité est décomposé en intervalles complémentaires (cases ou « bins »), –  Pour chaque intervalle, on calcule le pourcentage de pixels de l’image dont l’intensité s’y trouve, –  H[k] = ( Σ ((I >= Ck) && (I < Ck+1)) )/N pour l’intervalle (le « bin ») [Ck,Ck+1[ –  Le vecteur de ces pourcentages est le descripteur, –  Possibilité de considérer trois histogrammes monodimensionnels pour les images en couleur Histogrammes de couleur •  Mul'dimensionnels : –  L’espace des valeurs de pixels est mul'dimensionnel (en général de dimension 3), –  L’espace des valeurs est décomposé (discré'sé) en parallélépipèdes complémentaires (« bins »), –  Exemple avec 4 x 4 x 4 bins : –  Pour chaque parallélépipède, on calcule le pourcentage de pixels de l’image dont l’intensité s’y trouve, –  Ce tableau est le descripteur (on peut toujours le voir comme un vecteur si on sérialise les composantes). Moments de couleur •  Moyennes (image (R[i][j],G[i][j],B[i][j]), N pixels): mR = (ΣR[i][j])/N, mG = (ΣG[i][j])/N, mB = (ΣB[i][j])/N) •  Moyennes + variances + covariances : mRR = (Σ(R-­‐mR)2)/N, mGB = (Σ(G-­‐mG)(B-­‐mB))/N, … •  Moments associés aux composantes spa'ales : mRX = (Σ(R-­‐mR)(X-­‐
mX))/N, mRGX, mBXY, … •  Avantages : faciles/rapides à calculer, descripteurs très compacts, •  Inconvénients : peu discriminants •  Peuvent être calculés par bloc Fonc'ons de correspondance pour la couleur •  Vecteurs de moments : –  Distance euclidienne : recherche d’égalité l
∑
xi − yi
2
i=1
–  Angle entre vecteurs : recherche de similarité robuste aux varia'ons d’éclairement, –  Distance du Chi-­‐2 2
(
x
−
y
)
∑€i= 0 ( xi + yi )
i
i
l
•  Histogrammes : –  Distance euclidienne, Chi-­‐2 €
–  Histogrammes par blocs : somme des plus pe'tes distances seulement (8 sur 16 typiquement) : permet une recherche portant sur une par'e seulement de l’image, Descripteurs à base de points d’intérêt •  Points de « haute courbure » ou « coins », –  Points géométriques « singuliers » de la surface I[i][j] •  Extraits par divers filtres [Schmid 2000] : –  Calcul des dérivées spa'ales à une échelle donnée, –  Convolu'on par des dérivées de gaussienne (Sobel, …) –  Construc'on d’invariants par une combinaison appropriée de ces diverses dérivées (module du gradient par exemple), –  Chaque point est sélec'onné puis représenté par un ensemble de valeurs de ces invariants (histogramme de direc'ons) •  L’ensemble des points sélec'onnés est organisé topologiquement (rela'ons entre points « voisins ») : SIFT –  Descrip'ons très volumineuses ! Filtrage •  Le traitement d’un pixel dépend de ses voisins •  Permet de nombreuses opéra'ons sur les images –  Flou, points d’intérêt, contour, réhaussement, … •  Espace Fourier / Spa'al –  Une mul'plica'on dans le domaine de Fourier équivaut à une convolu'on dans le domaine spa'al •  Opérateur de convolu'on Filtrage : convolu'on • 
Opérateur de convolu'on –  Parcourt de l’image en glissant une fenêtre : le noyau de convolu'on • 
Approxima'on dans un voisinage de pixels –  Typiquement 3x3 • 
Exemple en 1D [1 2 3 4 5 6 7] [2 3 1]
 2 + 6 + 3 = 11 [1 2 3 4 5 6 7] [2 3 1]  4 + 9 + 4 = 14 [1 2 3 4 5 6 7] [2 3 1]  6 + 12 + 5 = 23 Et ainsi de suite... à la fin, la réponse de la convolu'on est: [11 14 23 29 35] Quelques noyaux •  Filtre « Moyenneur » •  Alterna've plus précise 1
1
1
1
1
1
1
1
1
1
2
1
2
4
2
1
2
1
•  Intègre plus de 80% des approxima'ons discrètes d’une gaussienne •  Génère du « flou »  diminue le contraste Détec'on d’orienta'ons •  Noyaux des gradients horizontaux et ver'caux : Opérateurs de Roberts
Opérateurs de Préwitt
Opérateurs de Sobel
Rx’
Px
Sx
-1
0
0
1
Ry’
-1
0
1
-1
0
1
-1
0
1
-1
0
1
-2
0
2
-1
0
1
•  Direc'on : •  Descripteur : Histogramme des direc'ons Py
Sy
0
1
-1
0
-1
-1
-1
0
0
0
1
1
1
-1
-2
-1
0
0
0
1
2
1
Détec'on de contours •  Norme du gradiant : •  Direc'on du gradiant : •  Si G(x,y) > c alors (x, y) est un point d’intérêt •  Suivre le gradiant pour détecter le contour •  Alterna've : Noyaux Laplaciens •  Intérêt : Opérateur unique 0
-1
0
-1 -1
-1
-1
4
-1
-1
4
-1
-1
8
-1
4
-12
4
0
-1
0
-1 -1
-1
-1
4
-1
•  Très sensible au bruit  Faire un flou au préalable Descripteurs de texture •  Calculés sur la luminance seulement (en général) •  Concept un peu flou … •  Nombreuses approches –  Composi'on fréquen'elle ou variabilité locale –  Transformées de Fourier –  Filtres de Gabor –  Filtres neuronaux –  Matrices de cooccurrences •  Représenta'on: vecteur de caractéris'ques •  Fonc'ons de correspondances adaptées Transformées de Gabor Elliptique :
σλ
Circulaire :
θ
θ
σ
σ
σθ
λ
λ
Transformée de Gabor Transformées de Gabor •  Circulaire : –  échelle λ, angle θ, écart type σ, –  σ mul'ple de λ, typiquement : σ = 1.25 λ, •  Ellip'que : –  échelle λ, angle θ, écarts types σλ et σθ, –  σλ et σθ mul'ples de λ, typiquement : σλ = 0.8 λ et σθ = 1.6 λ, •  2 variables indépendantes : –  échelle λ : N valeurs (typiquement 4 à 8) sur une échelle logarithmique (rapport typique √2 à 2) –  angle θ : P valeurs (typiquement 8), •  Descripteur de N x P dimensions Transformées de Gabor •  40 exemples de filtres de Gabor circulaires •  8 direc'ons •  5 échelles Textures de Tamura •  6 textures nommées, sélec'onnées à par'r d’une étude psychologique (1977) – 
– 
– 
– 
– 
– 
coarseness, contrast, direc'onality, linelikeness, regularity, Roughness •  Seulement 6 dimensions !  H. Tamura, S. Mori, and T. Yamawaki. Texture features corresponding to visual percep'on. IEEE Transac'ons on Systems, Man, and Cyberne'cs, vol. SMC-­‐8, no. 6, 1978, 460 -­‐ 473. Textures de libnetpbm • 
pgmtexture lit une image PGM et calcule les caractéris'ques de texture à différentes orienta'ons (0, 45, 90, 135) : – 
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 
• 
Angular Second Moment Contrast Correla'on Variance Inverse Difference Moment Sum Average Sum Variance Sum Entropy Entropy Difference Variance Difference Entropy Informa'on Measures of Correla'on Maximal Correla'on Coefficient Descripteur à 13 x 4 dimensions (possibilité de ne considérer que la moyenne des orienta'ons)  Haralick, R.M., K. Shanmugam, and I. Dinstein. 1973. Textural features for image classifica'on. IEEE Transac'ons on Systems, Man, and Cyber'ne'cs, SMC-­‐3(6):
610-­‐621. Fonc'ons de correspondance pour la texture •  Distance euclidienne : recherche d’égalité, •  Angle entre vecteurs : recherche de similarité robuste aux varia'ons d’éclairement Bibliothèques Java •  Introduc'on aux bibliothèques Java pour l’analyse d’images – 
– 
– 
– 
Les bases java.awt.image Image I/O API JAI •  TP : Manipula'on des bibliothèques Java Image APIs • 
• 
• 
• 
Java AWT Imaging Java 2D Java Advanced Imaging Java 3D AWT : Les bases •  « Push Model » –  Une image est chargée en'èrement •  3 interfaces –  ImageProducer –  ImageConsumer –  ImageObserver Java.awt.Image •  Classe Image (abstraite) -­‐> BufferedImage •  Image Producer Classes (ImageProducer) –  FilteredImageSource, MemoryImageSource •  Image Consumer Classes (ImageConsumer) –  PixelGrabber , Filter , CropImageFilter •  Color Model classes •  DirectColorModel , IndexColorModel La classe BufferedImage Color Model Raster ColorSpace SampleModel DataBuffer La classe BufferedImage •  Raster : tableau de pixels –  Data Buffer : les données –  SampleModel : groupe les valeurs en pixels •  ColorModel : définie les méthodes pour conver'r les pixels en couleur Créer une image •  A par'r d’un fichier –  Toolkit.getDefaultToolit().getImage(…) •  A par'r d’une URL –  Toolkit.getDefaultToolit().getImage(new URL(…)) •  A par'r d’un Producer … 1: Créer un DataBuffer intdata[] = new int[imageWidth * imageHeight]; for ( int i = 0; i < imageHeight; i++ ) { for ( int j = 0; j < imageWidth; j++ ) { data[i*imageWidth+j] = 00xFFFF0000; } } DataBuffer dataBuffer = new DataBufferByte ( (short[])data , imageWidth ); Create Sample Model ComponentSampleModel csm = new ComponentSampleModel ( DataBuffer.TYPE_USHORT , imageWidth , imageHeight , 1 , // pixel stride imageWidth , // scanline stride new int[]{0} // bandoffsets ); Create Color Model ComponentColorModel ccm = new ComponentColorModel (ColorSpace.getInstance(ColorSpace.CS_GRAY) , new int[] {imageDepth } , // bits false , // alpha false , // alpha pre-­‐mul'plied Transparency.OPAQUE , DataBuffer.TYPE_USHORT ); Crea'ng the Image WritableRaster wr = Raster.createWritableRaster( csm, dataBuffer, new Point(0,0)); Hashtable ht = new Hashtable(); BufferedImage image = new BufferedImage(ccm,wr,true,ht); Créer (simplement) une image bleue int width = 100;
int height = 100;
BufferedImage img = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
int [] t = new int[3];
for(int i = 0; i<width; i++)
for(int j = 0; j<height; j++) {
t[0] = 0;
t[1] = 0;
t[2] = 255;
img.getRaster().setPixel(i, j,t);
}
try{ ImageIO.write(img, "JPEG", new File("./image.jpg")); }
catch( Exception ex ) { /* handle exception */ }
Un pixel en Java •  Plusieurs formats –  byte, int, float, double
•  Couleur en sRGB codée sur un seul int
–  00xFF00FF00
int c = image.getRGB(x,y);
int red = (c & 0x00ff0000) >> 16;
int green = (c & 0x0000ff00) >> 8;
int blue = c & 0x000000ff;
Créer une image int
int
int
int
w = 100;
h = 100;
pix[] = new int[w * h];
index = 0;
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
int red = 255;
int blue = 0;
int green = 0;
pix[index++] = (255 << 24) | (red << 16) | green << 8 | blue;
}
}
Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
Lire une image : PixelGrabber •  Grabs the Pixels ! PixelGrabber (Image img, int x, int y,int w,
int h, boolean forceRGB)
•  Méthode “Object getPixels ()“ pixels = new int[width*height];
PixelGrabber pg = new PixelGrabber(im, 0, 0, width,
height, pixels, 0, width);
try { pg.grabPixels(); }
catch (InterruptedException e) { }
for (int i=0; i<10; i++) {
int c = pixels[i]; // or pixels[x * width + y]
int red = (c & 0x00ff0000) >> 16;
int green = (c & 0x0000ff00) >> 8;
int blue = c & 0x000000ff;
}
SampleModel samplemodel = RasterFactory.createBandedSampleModel
(DataBuffer.TYPE_BYTE,width,height,3);
ColorModel colormodel = PlanarImage.createColorModel(samplemodel);
DataBufferByte databuffer = new DataBufferByte(width * height, 3);
WritableRaster wraster = RasterFactory.createWritableRaster
(samplemodel, databuffer, new Point(0,0));
TiledImage tiledImage = new TiledImage(0,0,width, height,
0,0,samplemodel,colormodel);
La bibliothèque JAI •  Traitements d’images avancé •  Ges'on de très grandes images (Tiles) –  javax.media.jai.TiledImage
•  Traitements par chaîne d’opérateurs –  javax.media.jai.operator
Exemple de chaîne d’opérateurs File Load File Load BandSelect BandSelect Rotate Invert Add Display JAI et les images •  PlanarImage –  Classe abstraite –  Lecture seulement •  TiledImage –  Accès à des blocs d’images –  Lecture / Ecriture Catégories d’opérateurs • 
• 
• 
• 
• 
• 
• 
• 
File operators Point operators Area operators Geometric operators Color quan'za'on operators Sta's'cal operators Edge detec'on operators Frequency operators File operators PlanarImage img = JAI.create("fileload", "file.jpg");
JAI.create("filestore",tiledImage,"test.png","PNG");
Point operators •  Arithme'c operators –  Add, subtract, mul'ply, divide •  Logical –  And,or,Xor,Not •  Composite –  Composite , overlay •  Crea'on –  Constant, pa^ern •  Func'onal –  Exp , Log, MatchCDF, PieceWise, Clamp, Threshold, Lookup, Invert •  Color Conversion –  ColorConvert, BandCombine, BandSelect Area operators •  Border •  Crop •  Spa'al Filters: –  Convolve, BoxFilter, MedianFilter Sta's'cal operators •  Mean •  Extrema •  Histogram Fonc'onnement des opérateurs ParameterBlock pb = new ParameterBlock();
int[] bins = { 256 };
double[] low = { 0.0D };
double[] high = { 256.0D };
pb.addSource(image);
pb.add(null);
pb.add(1);
pb.add(1);
pb.add(bins);
pb.add(low);
pb.add(high);
RenderedOp op = JAI.create("histogram", pb, null);
Histogram histogram = (Histogram)
op.getProperty("histogram");
La classe JAI •  javax.media.jai.JAI •  Créer des RenderedOps •  Exemple: –  RenderedOp im = JAI.create
("convolve", paramBlock,
renderHints);
La classe ParameterBlock •  U'lisée pour paramétrer les opérateurs •  Fonc'onne comme un vecteur –  Les paramètres doivent être passé dans l’ordre correspondant à ceux du constructeur de l’opérateurs … Apprenons par la pra'que ! h^p://java.sun.com/products/java-­‐media/jai/
index.html