Loading
Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Le sujet suivant dont nous allons parler pour essayer de faire correspondre les formes ou tout autre modèle sur une image est la méthode connue sous le nom de Hough Transform. Encore une fois, ces diapositives sont également basées sur les excellentes conférences du professeur Yannis, à Inria Ren, ainsi que sur les conférences du professeur Moubarak Shah à l'université de Floride centrale. Nous avons déjà vu quelques méthodes de montage. Nous avons vu la place des moindres carrés et ensuite nous avons vu RANSAC. La question que vous allez poser maintenant est: qu'est-ce que vous faites s'il y a plusieurs lignes placées dans une orientation particulière ou placées dans une configuration particulière dans une image? Il peut s'agir de plusieurs lignes, il peut s'agir d'un polygone, il peut s'agir d'un cercle, alors comment faire pour ajuster une forme à l'ensemble de points de données que vous avez? Et c'est ce à quoi nous allons parler maintenant, quand nous Hough Transform. (1:30) Cette méthode remonte au début des années 60, par Hough, qui a déposé le brevet américain pour cela, mais depuis lors, il y a eu beaucoup d'efforts qui l'ont traduit dans ce que nous voyons aujourd'hui. Au début des années 70, la transformation Hough a été utilisée pour la détection de lignes et de courbes. Puis au début des années 80, il y a eu une méthode qui a été appelée une transformation généralisée et nous allons voir tous ces changements dans les prochaines diapositives. Commençons par l'équation simple d'une ligne et des coordonnées cartésiennes, ce que nous savons tous est y = mx + c, où nous disons que m est la pente et c est l'ordonnée à l'origine. Vous pourriez simplement jouer avec les termes de l'équation un peu, puis écrire ceci comme c = − mx + y. Nous vivons maintenant dans un m, c espace où x est c intercepter, y définir la ligne dans cet espace. Donc, étaient à l'origine dans l'espace x, y, où m définir la pente et c définir l'ordonnée à l'origine. Nous pourrions simplement réorganiser légèrement ces termes pour aller à un m, c espace où − x devient la pente et y devient l'ordonnée à l'origine. Dans ce genre de contexte, chaque point de m, c espace devient l'équation d'une ligne dans l'espace x, y, rappelez-vous pour chaque choix de m et c, vous obtiendrez l'équation d'une droite comme nous le voyons ici. Et chaque point de l'espace x y deviendrait également l'équation d'une ligne dans l'espace m, c. Il y a une double correspondance entre ces deux espaces. Alors que faisons-nous avec ça? (3:35) Nous savons que pour s'adapter à n'importe quel modèle nous avons besoin d'un certain nombre d'échantillons. Par exemple, pour ajuster une ligne, nous avons besoin de deux échantillons. Si c'était un autre modèle, si vous étiez un carré ou un cercle, nous avons besoin d'un nombre de points différent. Pour ajuster une ligne, vous aurez peut-être besoin de deux points. Commençons par cet exemple. Mais même si vous n'aviez qu'un point au lieu de deux points, vous savez qu'il pourrait appartenir à une certaine famille de lignes. Il vous donne quelques informations partielles sur l'équation elle-même. Donc, ce que nous pouvons demander à chaque point de votre x, y est de voter pour certaines configurations de m et c, au cas où vous parlez d'une ligne, si elle est alignée. Chaque point peut voter pour quelle configuration de m et c aurait donné lieu à ce point d'être à cet endroit particulier. Et puis vous collecez des mots pour tous ces points et essayez de rechercher un consensus et, quel que soit le vote à la majorité, vous allez dire que c'est l'équation de la ligne que je cherche. Mettons-nous des détails à ce sujet et allez-y lentement. (4:50) Avant d'aller de l'avant, nous avons parlé des coordonnées cartésiennes sur la diapositive précédente. Malheureusement, la formulation cartésienne peut être problématique pour les lignes verticales. Vous pouvez dire pourquoi? Lorsque vous avez une ligne verticale, votre pente n'est pas bornée, il devient difficile de représenter une telle ligne dans votre m, c espace parce que m doit être infinité. Donc, dans un tel scénario, il peut être plus sage d'utiliser une paramétrisation légèrement différente, la paramétrisation polaire, qui a été écrite en termes de ρ et θ, où ρ est la distance de la ligne à partir de l'origine et θ est l'angle fait par la normale à l'axe X. Vous pouvez aussi écrire ρ = x cos θ + y sin θ. Il s'agit d'une paramétrisation polaire standard utilisée à partir des coordonnées cartésiennes jusqu'aux coordonnées polaires. Nous savons maintenant que dans cet espace, ρ est au moins inférieur délimité par 0 et θ se situe entre 0 et 360. Nous savons que ces quantités sont limitées, ce qui la rend un peu plus facile à utiliser. (6:17) Donc, chaque point de votre espace original, dans votre espace cartésien (x, y) vote pour de nombreux points dans votre espace de paramètres. Donc, si vous aviez une certaine ligne, un certain point x1 dans votre espace cartésien original. Pour le moment, nous allons parler de cette méthode en général, en termes d'espace cartésien et d'ajustement d'une ligne ou d'un cercle, etc. Un peu plus tard dans cette conférence, nous parlerons de la façon dont vous l'utilisez avec des images. Si vous avez déjà une idée de ce qui arrive, nous essayons de savoir comment utiliser Hough Transform pour faire correspondre les lignes ou les cercles ou toute autre forme dans une image. Tel est l'objectif de cette conférence ou de la méthode dont il est question dans cette conférence. Mais avant d'aller à une image, nous allons parler en général des coordonnées cartésiennes. Donc, si vous avez un point x dans l'espace, vous savez qu'il y a une famille de lignes que 1 (x, y) peut passer à travers x, et chacune de ces lignes a un correspondant il va avoir une pente de 1 m, une pente et l'ordonnée à l'ordonnée, et toutes ces lignes se traduiront par des points correspondants dans le m, l'espace c ou l'espace ρ, θ. Si vous accédez à l'espace de journalisation, vous aurez une variation légèrement différente. Ils corresponderont à un point ici dans l'espace r theta. Donc, pour chaque point x, y peut voter pour de nombreux points dans votre espace de paramètres, sur lequel ce point x aurait pu mentir. Donc, chaque ligne à travers ce point, est un 1 (x,) 1 y1 vote pour un point dans un espace de paramètres qui satisfait ρ = x cos θ + y sin θ. Voyons quelques exemples. (8:12) Voici une autre ligne qui passe par x et qui fonctionne pour un point différent dans l'espace de 1 paramètre, qui est ici. (8:23) Voici une autre ligne qui passe par x, qui voterait pour un point différent dans l'espace de 1 paramètre. Rappelez-vous que l'espace de paramètres est maintenant défini dans une paramétrisation polaire. (8:36) Et vous continuez à répéter cela pour plusieurs lignes qui auraient pu passer par x et toutes les 1 d'entre elles obtiennent des votes dans l'espace de paramètres. (8:46) De même, vous pourriez avoir un autre point x dans votre espace d'origine par lequel vous 2 avez un autre ensemble de lignes qui peuvent passer dans votre espace cartésien original et chacune de ces lignes peut voter pour eux pour une paramétrisation différente dans votre espace de paramètres. Vous pouvez voir que là encore, ici, ce ne sont que peu d'exemples pour plusieurs lignes qui passent par x, vous obtenez plusieurs votes dans l'espace de paramètres. (9:17) Essayons de recompter cela au moyen d'un algorithme. Donc, vous avez vos données X, vous avez un ensemble de paramètres quantifiés, theta min à theta max. Par exemple, si vous prenez la paramétrisation polaire, vous ne souhaitez peut-être pas voter pour chaque angle compris entre 0 et 360, vous pouvez vouloir diviser 0 à 360 en intervalles de 10 degrés et ne disposer que de 36 valeurs thêta possibles. C'est ce que nous entendons par un paramètre quantifié ici. Vous initialisez également un tableau d'accumulateurs, qui est simplement un nombre de fréquences. Il s'agit simplement d'un compte de fréquence de vote. Vous pouvez l'examiner de cette façon. Donc, pour chaque point (x, y) dans votre espace cartésien, nous essayons de voir pour thêta appartenant à theta, vous avez 10 possibilités thetas. Si vous écrivez ρ = x cos θ + y sin θ. Nous essayons de voir pour chaque ensemble de paramètres de modèle compatibles avec l'échantillon, de sorte que rho et que theta s'alignerait avec ce X particulier, Y que nous avons pris. Vous augmentez A pour cette thêta et rho. Donc, vous imaginez que l'accumulateur étant une matrice 2D définie par des valeurs thêta sur un axe et des valeurs de rho sur l'autre axe, qui peuvent aussi être quantifiées, vous pouvez quantifier la distance dans, la distance de say un certain nombre d'unités. Et quel que soit le rho et le thêta que nous connaissons correspond à ce X et Y que nous avons, vous allez à ce rho et thêta et dans chacun de ces cas, vous pouvez vérifier la cohérence et incrémenter cette cellule dans la matrice de l'accumulateur par 1. Et vous continuez à le faire pour chaque point X Y qui vous est donné. Ce sont votre ensemble de points qui vous sont donnés et vous continuez à cumuler et à la fin, vous faites une suppression non maximale dans A. Donc, si vous avez de nombreux bacs différents qui ont un vote élevé, vous faites une suppression non maximale locale, non maximale locale pour voir quel bac a les votes les plus élevés et votre définition que thêta et rho correspondent au modèle qui correspond à votre, qui a une incidence directe sur les données de votre matrice X. Ceci vous donne un moyen d'estimer la thêta et le rho ou dans les coordonnées cartésiennes, en trouvant l'équation de la ligne, correspondant à cet ensemble de points qui vous sont donnés. Comme vous pouvez le voir, c'est très similaire à un minimum carré, mais le faire d'une façon légèrement différente. Nous essayons toujours de nous adapter à un ensemble de points qui nous est donné, mais nous le faisons en utilisant l'approche de vote Hough. (11:54) Maintenant, comme je l'ai promis, voici un exemple tiré d'une perspective d'image. Disons que nous avons une image et que l'image a plusieurs lignes et nous voulons trouver les équations de ces lignes. Il pourrait s'agir de plusieurs applications là où cela pourrait être nécessaire. Disons, par exemple, que vous essayez de prendre des images d'une puce informatique et que vous essayez de savoir comment ces lignes sont alignes sur une puce informatique, etc. Vous voulez trouver les équations de ces lignes. (12:24) Donc, en utilisant la même approche que nous venons de parler sur la diapositive précédente, vous assurez une certaine paramétrisation, vous demandez à chaque point de voter auquel la paramétrisation peut avoir généré dans ce point particulier, et vous obtenez des votes sur votre matrice 2D d'accumulateur, disons simplement a ρ et θ. Donc, vous pouvez voir ici que vous avez un tas de votes qui se propage à travers de nombreux bacs d'accumulateurs différents, nous avons dit que l'accumulation comme une matrice qui est rho et thêta. (12:54) Maintenant, vous faites une suppression non maximale pour maintenir uniquement les minima locaux dans votre accumulateur. Et une fois que vous faites ce maxima local, vous trouvez qu'il ya quatre maxima ici qui correspond à quatre valeurs ou quatre paramétrisations de lignes, qui sont les quatre lignes que vous avez en fait dans l'image d'origine. Et ce sont les points qui votaient pour chacun de ces bacs accumulateurs. De cette façon vous pouvez trouver les équations de ces lignes, ainsi que les points de l'image d'origine qui correspondent à ces équations, pour être en mesure d'extraire cette forme dans cette image. Donc, vous pouvez trouver des équations de lignes dans n'importe quelle image qui vous est donnée à l'aide de cette approche. (13:44) Laissez-nous le faire un peu plus maintenant. Disons que nous voulons maintenant trouver des cercles dans une image. Nous avons parlé de la détection des blocs plus tôt, mais maintenant nous voulons exactement trouver le cercle avec son rayon et son centre et être en mesure de le paramétrer parfaitement. Donc, le raccord de cercle est très similaire à l'ajustement de ligne, c'est-à-dire le raccord que vous recherchez (x − x) Y). 0 2 + (− y0 2 − r 2 = 0 Quelles devraient être les dimensions de l'accumulateur? Pour la ligne, l'accumulateur était une matrice 2D. Quelle serait la dimension de l'accumulateur pour l'ajustement du cercle? (14:29) Il s'agit d'un accumulateur 3D tridimensionnel, où vous avez x, y, qui correspond 0 0 au centre du cercle et r qui correspond au rayon du cercle. Ce sont les trois votes que chaque point va voter. Puisque nous avons trois possibilités ici, une option est de fixer un des paramètres et, en général, vous fixez le rayon, puis cherchez le reste, demandez à chaque point de voter ce qui est le centre et ensuite vous pouvez continuer à vous déplacer et aller en rond Robin pour vous assurer que chaque point fonctionne pour les trois paramètres à la fin. Donc, vous continuez à incrémenter l'accumulateur pour chaque vote qu'un point fait à chacune de ces valeurs et à la fin, vous faites une maxima locale en a, et ainsi vous pouvez en fait estimer la paramétrisation du cercle que vous recherchez. Voici une illustration visuelle, où l'on donne un ensemble de pièces dans une image, vous pouvez maintenant savoir où se trouvent ces pièces et quel est le rayon de cette pièce par la première extraction des bords. Donc, dans ce cas, vous devez d'abord extraire des arêtes, puis être en mesure d'utiliser ces informations de bord pour être en mesure de trouver les paramétrisations exactes sur la surface. Donc quand je dis des paramétrisations, je veux dire définir les centres et les rayons de chacun de ces cercles que vous avez, (15:56) Vous n'avez pas besoin d'arrêter avec des lignes ou des cercles, vous pouvez évidemment le faire pour n'importe quelle autre forme. Tant que vous pouvez paramétrer n'importe quelle forme d'une manière analytique, vous pouvez donner un ensemble d'équations pour définir une forme. Tout ce que vous avez à faire est de prendre un point dans votre image d'origine et de vous demander de voter pour ce qui serait les paramètres d'un polygone auquel ce point appartient ou se trouve. Et puis vous comptez simplement quel paramétrisation a obtenu les votes les plus élevés parmi toutes les possibilités dans votre espace de paramètres, et simplement définir cela pour être le polygone ou toute forme que vous recherchez. Mais quoi, si vous cherchez la forme qui n'a pas de description analytique. Par exemple, sur cette diapositive, vous voyez cette forme irrégulière, qui n'a pas de distribution analytique, qui n'a pas de définition analytique. Comment peut-on estimer, comment trouvez-vous de telles formes dans une image? Nous supposons que la forme nous a été donnée. Donc, vous savez qu'il s'agit de la forme que vous recherchez dans une image donnée et qu'elle pourrait être de tailles différentes, qu'elle pourrait être tournée de différentes façons, elle pourrait être réduite, toutes ces transformations sont possibles. Mais nous voulons trouver où dans l'image elle ment. La seule chose que nous savons, c'est que la forme dans ce cas particulier ne peut pas avoir de définition analytique. Vous ne pouvez pas l'écrire comme une équation. Qu'est-ce que vous faites dans ce cas particulier? Vous définissez un point de référence dans la forme. Comme vous pouvez définir, par exemple, un x naught y naught comme point de référence dans cette forme et maintenant chaque point de bord de cette forme peut être défini par rapport à ce point de référence. Donc chaque point ici (x, y) a une certaine longueur à partir de votre point de référence (x,) Et un certain angle par rapport au point de référence 0 y0 (x,). Par exemple, peut être le centroïde de cet objet que vous recherchez. 0 y0 (x,) 0 y0 Mais il n'a pas besoin d'être le centroïde, il pourrait s'agir de n'importe quel point de référence. Donc, une fois que vous avez un centroïde ou tout autre point de référence, pour chaque point d'arête que vous avez, rappelez-vous encore, qu'en vous ayant donné une nouvelle image, vous devez d'abord faire une détection de bord pour obtenir les points de bord. Ensuite, pour chaque point de bord, vous calculez la distance au centroïde. Vous devez d'abord le faire pour l'objet modèle que vous avez avant de l'exécuter sur une nouvelle image. C'est quand vous savez que c'est la forme que vous cherchez, vous définissez un point de référence pour chaque point de bord dans cette forme particulière, vous calculez une distance au centroïde, qui est r et une orientation. I ri i Et puis vous créez quelque chose appelé table r. Et ce que dit la table est que, pour une orientation de bord donnée, quelles sont toutes les possibilités? Quels sont tous les points qui pourraient avoir un certain rayon avec la même orientation, par rapport au point de référence? De même, pour un autre point avec une autre orientation, disons, c'est ce point de bord particulier. Le 2 ° 2 a un certain rayon par rapport au point de référence. De même, il pourrait y avoir un autre point avec le même angle, qui aurait un certain rayon r21, il pourrait y avoir un troisième point avec le même angle, la même orientation d'image et qui pourrait avoir un rayon r et vous créez une table de r 23, qui relie ces orientations et ces distances à ce centroïde du point de référence. Donc une fois que vous avez construit ce tableau, qu'est-ce que nous faisons? (19:31) Voici l'algorithme de ce qui est connu sous le nom de Generalized Hough Transform. Donc, vous avez vos données. Vous avez votre table de r, que vous avez déjà construite à partir de la forme qui vous a été donnée. Rappelez-vous une fois de plus que la forme est définie pour vous. Non défini est donné à vous, il n'est pas bien défini mathématiquement vous est donné. En utilisant cette forme, vous construisez quelque chose appelé la table r et vous construisez également un tableau d'accumulateurs pour combien de dimensions vous avez à estimer. Donc, si ce point de référence a deux coordonnées, vous n'avez que deux coordonnées pour voter. Sinon, vous pouvez avoir d'autres paramètres. Si vous permettez à votre forme de changer de plusieurs façons, vous pourriez avoir d'autres dimensions dans votre accumulateur pour lesquelles les points peuvent également voter. Dans ce cas particulier, pour rester simple, supposons que la forme va être la même, juste que la forme puisse être placée n'importe où dans l'image. Pas de mise à l'échelle, pas de rotation. Supposons que c'est le scénario ici. Donc, la seule chose que nous essayons de trouver est où serait le centroïde de cet objet? Donc, vous avez un tableau accumulé, qui est de deux dimensions allant de X à, cmin Xcmax Y cm à Y c sont les valeurs maximales que le centroïde peut assumer dans l'axe X. In max De même, Y c et. Et vous initialisez l'accumulateur, chaque cellule de l'accumulateur min Y cmax à 0. Ensuite, pour chaque point pour chaque ri, dans votre table, vous essayez d'écrire si votre centroïde peut être écrit comme ce x + r,. I cos éri i y + ri sin éri i Si vous pouvez écrire votre centroïde à ce sujet, donné x y à l'aide de cette formule particulière, vous augmenteriez l'accumulateur pour ce centroïde particulier. Et vous continuez à faire ça pour différentes possibilités centroïdes, où vos possibilités centroïdes viendront de Xc à et vers, où vous discrétissez vos possibilités du centroïde et min Xcmax Y cmin Y cmax vous créez un tableau accumulatif. C'est comme ça que tu ferais ça. Et à la fin, vous obtiendrez un ensemble de valeurs, un ensemble de nombres de fréquence sur ce que chaque x y a voté et vous faites une suppression non maximale pour trouver les maxima locaux et qui va vous donner le xc yc final qui correspondent à ce nouvel ensemble de points qui vous sont donnés. Parlant en termes d'images. Encore une fois, supposons que c'est la forme que vous cherchez. Comme je l'ai dit, nous supposons dans cet exemple que nous ne cherchons que la forme telle qu'elle est, pas de changement d'échelle pas de changement de rotation. Donc, ce qui signifie que la seule chose qui peut changer est le centre de l'objet peut être toutes différentes parties. C'est pourquoi nous ne votons que pour l'endroit où se trouve le centre. Et compte tenu d'une nouvelle image, vous exécutez un détecteur de bord et pour chaque point de bord, qu'il fonctionne pour l'endroit où le centroïde serait et où que vous obtiens le maximum de votes pour le centroïde est l'endroit où votre centroïde pourrait être. Vous pourriez utiliser ce genre d'approche pour dire, trouver une voiture dans une image. Si vous saviez qu'une voiture a une forme particulière, vous avez défini cette forme, vous demandez maintenant à chaque, vous exécutez un détecteur de bord sur la nouvelle image, puis demandez à chaque point sur le bord de voter pour où le centre de la voiture est et en fonction de cela, vous pouvez probablement tracer où la voiture est située dans l'image donnée. Donc, vous pouvez utiliser une telle approche même pour la détection d'objets. Encore une fois, dans les changements soudains de vos formes dans les possibilités de la forme. Si une voiture est complètement modifiée, de toute évidence ce genre d'approche ne fonctionne pas dans ce scénario. Donc, il ne fonctionne qu'avec une certaine tolérance. (23:23) Pour résumer le Hough Transform, c'est une approche efficace pour la détection des formes, des objets, y compris les multiples, même s'il y avait plusieurs voitures, vous pouvez probablement les trouver tous. Vous pouvez avoir plusieurs maxima dans l'endroit où, les bords votent pour les centroïdes des voitures et chacun d'eux peut être des instances différentes d'une voiture dans une image donnée. Vous pouvez également utiliser cela pour la détection de plusieurs instances d'objet dans une image. L'avantage du Hough Transform est qu'il traite assez bien l'occlusion parce qu'il s'agit d'une procédure de vote. Tant que le nombre de votes est élevé, cela n'a pas d'importance si certains votes ont eu tort. Donc, même si une certaine partie de l'objet a été occlus, elle peut fonctionner. De toute évidence, si une partie importante de l'objet est occlus, elle ne fonctionne pas. Il est également robuste pour le bruit pour la même raison, parce que vous n'avez qu'à regarder un certain nombre de pixels, et aussi longtemps qu'ils votent pour une majorité, comme une majorité, vous allez obtenir votre forme ou objet dans l'image. Le problème ici est qu'il peut être coûteux en termes de calcul, car selon la méthode de quantification de votre espace de paramètres. N'oubliez pas que chaque point doit voter pour différentes possibilités dans votre espace de paramètres, ce qui peut prendre beaucoup de temps. La définition de vos paramètres et leur quantification peuvent ne pas être faciles pour différents types de formes. Pour les lignes, les cercles et quelques formes réellement définies, il peut être simple, pour certaines autres formes, cela peut ne pas être facile ou de les quantifier peut ne pas donner des réponses très précises. Ce sont là des limites à travailler ici. (25:02) Voici la visualisation de l'exemple de voiture. Donc, vous avez une image modèle et il y a quelques points clés par rapport à un point de référence au centre de l'image. Ainsi, vous enregistrez les coordonnées par rapport au point de référence dans l'image du modèle et pour chaque image de test, vous recherchez la même configuration des points clés par rapport au centroïde de l'objet. (25:37) Donc, dans ces cas particuliers, la voiture est inversée, mais quand l'image d'essai est de la même conphiguration que l'objet original, vous trouverez une correspondance dans ce scénario particulier. (25:47) Voici un exemple de plus. Donc si vous considérez votre image de modèle comme la tour Eiffel et voici une image de test qui est aussi la Tour Eiffel prise à une autre échelle sur une autre journée avec des conditions d'éclairage différentes. (26:02) Vous avez ensuite votre accumulateur après avoir trouvé vos points d'image de modèle dans votre image d'origine et votre image de test, vous avez votre accumulateur qui vote pour le centroïde de l'objet par rapport aux différents points clés de cet objet. Vous considérez une maxima locale, vous ne voyez pas très clairement ici, mais les maxima locaux sont quelque part au milieu. (26:29) Et sur la base de votre vote pour l'endroit où se trouve la Tour Eiffel dans l'image d'essai. (26:36) Votre travail à domicile pour cette conférence est le chapitre 4.3 du livre de Szeliski et quelques questions à vous poser. Comment pouvez-vous Hough Transform pour détecter les points de suspension, les carrés et les rectangles? Essayez de déterminer ce que sont les paramétrisations ou les formes analytiques de chacune de ces formes, et essayez de découvrir comment le tableau d'accumulateurs examinerait chacun de ces cas. Cela devrait vous aider à résoudre ces problèmes. Et un cas d'utilisation du monde réel. Supposons que votre ami travaillant dans un démarrage de diagnostic vous demande comment compter automatiquement le nombre de globules rouges dans un échantillon de sang? Donc vous avez un échantillon de sang, vous voulez une façon automatisée de compter le nombre de globules rouges à l'aide de Hough Transform. Qu'est-ce que tu lui conseillerais? Quelque chose pour vous de réfléchir. Et voici les références.