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