La vision stéréoscopique est une méthode fondamentale en vision par ordinateur et en robotique pour acquérir des informations de profondeur et reconstruire la structure tridimensionnelle des scènes. Cet article explore en détail plusieurs techniques clés, notamment l'affinement du pic de parallaxe, le nettoyage et la reconstruction d'images, l'affichage par mappage de textures 3D, les méthodes d'affichage d'images stéréoscopiques, la correction d'image, l'ajustement de plans et le matching de points 3D.
1. Affinement du Pic de Parallaxe
Dans la correspondance stéréoscopique, la parallaxe pour chaque pixel est un entier (d ∈ [dmin, dmax]), où la similarité optimale est trouvée. Pour estimer la position du pic plus précisément, nous pouvons utiliser des techniques d'affinement du pic de parallaxe.
- Ajustement parabolique : Ajustez une parabole (y = A(x - x0)2 + B(x - x0) + C) aux valeurs de parallaxe du pic optimal et de ses voisins. Comme la similarité ZNCC optimale est un maximum, la parabole est inversée (A < 0).
- Calcul du maximum interpolé : Le maximum interpolé est obtenu lorsque la dérivée de la parabole est nulle, estimant ainsi la position horizontale du pic de la parabole ajustée.
- Rejet des pics larges : Pour les pics aigus, le coefficient A sera plus grand. Un seuil simple peut être utilisé pour rejeter les pics trop larges.
En MATLAB, l'option 'interp' permet d'activer l'affinement du pic de parallaxe :
[di,sim,peak] = istereo(L, R, [40 90], 3, 'interp');
idisp(di)
L'image de parallaxe résultante est plus lisse. Le paramètre de sortie optionnel peak est une structure contenant les coefficients paraboliques (A) et (B) pour chaque pixel.
2. Nettoyage et Reconstruction d'Images
Les résultats de la correspondance stéréoscopique présentent souvent des imperfections. Pour obtenir des informations de profondeur fiables, nous devons nettoyer et reconstruire l'image de parallaxe. Voici les étapes :
- Création d'une matrice d'état : Créez une matrice d'état
statusde la même taille que la matrice de parallaxed, initialisée à zéro.
status = zeros(size(d));
- Marquage des éléments invalides ou peu fiables : Les éléments de la matrice d'état sont définis sur des valeurs non nulles en fonction de conditions d'échec spécifiques.
[U,V] = imeshgrid(L);
status(isnan(d)) = 4;
status(U<=90) = 1;
status(sim<0.8) = 2;
status(peak.A>=-0.1) = 3;
- Affichage de la matrice d'état : Utilisez la fonction
idispavec une palette de couleurs personnalisée.
idisp(status)
colormap( colorname({'lightgreen', 'cyan', 'blue', 'orange', 'red'}) )
Signification de la palette de couleurs :
| Couleur | Signification |
|---|---|
| Vert clair | Correspondance stéréoscopique correcte |
| Cyan | Recherche de parallaxe hors de la zone d'image droite |
| Bleu | Similarité du pic trop faible |
| Orange | Pic trop large |
| Rouge | Modèle de recherche hors des bords de l'image |
- Invalidation des valeurs de parallaxe peu fiables : Définissez les valeurs de parallaxe peu fiables sur
NaN.
di(status>0) = NaN;
- Affichage de l'image de parallaxe marquée : Utilisez
ipixswitchpour afficher l'image de parallaxe mise à jour, avec les pixels peu fiables en rouge.
ipixswitch(isnan(di), 'red', di/90);
- Reconstruction 3D : La conversion des valeurs de parallaxe des pixels en coordonnées mondiales (en mètres) est appelée reconstruction 3D. Pour une caméra stéréoscopique à axes parallèles, la profondeur est inversement proportionnelle à la parallaxe.
[U,V] = imeshgrid(L);
u0 = size(L,2)/2; v0 = size(L,1)/2;
b = 0.160; % Baseline (distance entre les caméras)
X = b*(U-u0) ./ di; Y = b*(V-v0) ./ di; Z = 3740 * b ./ di; % Distance focale F = 3740
surf(Z)
shading interp; view(-150, 75)
set(gca,'ZDir', 'reverse'); set(gca,'XDir', 'reverse')
colormap(flipud(hot))
3. Affichage par Mappage de Textures 3D
Pour rendre la représentation de surface 3D moins rugueuse, on peut utiliser le mappage de textures 3D.
- Création d'une image filtrée par médiane : Appliquez un filtre médian à l'image de parallaxe interpolée pour combler les petits trous.
dimf = irank(di, 41, ones(9,9));
- Insertion des valeurs filtrées : Insérez les valeurs filtrées par médiane uniquement là où il y a des
NaN.
di = ipixswitch(isnan(di), dimf, di);
- Reconstruction à nouveau : Calculez les coordonnées 3D en utilisant l'image de parallaxe mise à jour.
X = b*(U-u0) ./ di; Y = b*(V-v0) ./ di; Z = 3740 * b ./ di;
- Mappage de textures : Superposez l'image gauche sur la surface 3D.
Lcolor = iread('rocks2-l.png');
surface(X, Y, Z, Lcolor, 'FaceColor', 'texturemap', ...
'EdgeColor', 'none', 'CDataMapping', 'direct')
xyzlabel
set(gca,'ZDir', 'reverse'); set(gca,'XDir', 'reverse')
view(-160, 75)
4. Méthodes d'Affichage d'Images Stéréoscopiques
La perception humaine de la profondeur en 3D résulte de la visualisation de scènes sous des angles légèrement différents par chaque œil. Plusieurs méthodes existent pour afficher des images stéréoscopiques.
4.1 Histoire et Techniques Modernes
Depuis l'invention de la photographie, l'intérêt pour les images et films 3D n'a cessé de croître. Les premières méthodes nécessitaient des dispositifs de visualisation binoculaire ou des techniques de fixation du regard. Les méthodes modernes incluent les lunettes à cristaux liquides (LCD) actives ou les lunettes polarisées.
4.2 Méthodes d'Affichage
- Anaglyphes : Méthode traditionnelle utilisant des lunettes de couleurs différentes (généralement rouge/cyan) pour superposer les images gauche et droite.
- Lunettes LCD actives et polarisées : Permettent la visualisation en couleur d'images et de films stéréoscopiques.
En MATLAB, la fonction anaglyph peut être utilisée pour afficher une paire stéréoscopique en anaglyphe :
anaglyph(L, R, 'rc')
5. Correction d'Image
L'alignement précis des axes optiques et des capteurs des caméras stéréoscopiques est difficile à réaliser mécaniquement, et la distorsion des lentilles introduit des erreurs. La déformation d'une ou des deux images pour corriger ces erreurs est appelée correction d'image.
- Détection de points caractéristiques : Utilisez la fonction
isurfpour trouver les points caractéristiques SURF dans les images gauche et droite.
sL = isurf(L);
sR = isurf(R);
- Détermination des correspondances candidates : Utilisez la méthode
match.
m = sL.match(sR);
- Détermination de la relation épipolaire : Utilisez la méthode
ransacpour trouver la matrice fondamentaleF.
F = m.ransac(@fmatrix,1e-4, 'verbose');
- Correction des images : Utilisez la fonction
irectifypour obtenir les images corrigéesLretRr.
[Lr,Rr] = irectify(F, m, L, R);
- Affichage des images corrigées : Utilisez la fonction
stdisp.
stdisp(Lr, Rr)
Les images corrigées sont ensuite utilisées pour la correspondance stéréoscopique dense :
d = istereo(Lr, Rr, [5 120], 4);
6. Ajustement de Plans
La vision stéréoscopique produit un ensemble de points 3D (Pi), appelé nuage de points. Un problème courant est d'ajuster un plan à cet ensemble de points. Une méthode simple et efficace est d'ajuster une "assiette elliptique", c'est-à-dire un ellipsoïde avec un rayon très petit dans la direction perpendiculaire au plan.
- Calcul de la matrice d'inertie : Calculez la matrice d'inertie (J) du nuage de points.
T = transl(1,2,3) * rpy2tr(0.3, 0.4, 0.5);
P = mkgrid(10, 1, T);
P = P + 0.02*randn(size(P));
x0 = mean(P');
P = bsxfun(@minus, P, x0');
J = 0;
for x = P, J = J + x*x'; end
- Calcul des valeurs et vecteurs propres : Les valeurs et vecteurs propres de la matrice d'inertie sont calculés. Le vecteur propre correspondant à la plus petite valeur propre donne la normale au plan.
[x,lambda] = eig(J);
diag(lambda)'
n = x(:,1)';
- Calcul de l'équation du plan : L'équation du plan est donnée par n ⋅ (x - x0) = 0, où n est la normale et x0 est le centroïde.
Des méthodes pondérées ou RANSAC peuvent être utilisées pour gérer les données aberrantes qui influencent fortement l'estimation.
7. Matcihng de Points 3D
Étant donné un modèle d'objet représenté par un ensemble de points 2D ou 3D, et une observation de cet objet dans le monde sous forme d'un autre ensemble de points, la tâche consiste à trouver la pose relative (ξ) qui transforme les points du modèle en points observés.
- Création des points modèle et de données : Créez un modèle de 100 points aléatoires et un ensemble de données résultant d'une rotation et translation du modèle.
M = rand(3,100) - 0.5;
T_unknown = transl(1, 2, 3) * rpy2tr(0.2, 0.3, 0.4);
D = homtrans(T_unknown, M);
- Utilisation de l'algorithme ICP (Iterative Closest Point) : Pour chaque point de données Di, on suppose que le point modèle Mj le plus proche est son correspondant, minimisant |Di - Mj|. L'algorithme itère pour mettre à jour la pose relative jusqu'à convergence.
En MATLAB, la fonction icp implémente cet algorithme :
[T,d] = icp(M, D, 'plot');
En résumé, les techniques de vision stéréoscopique sont cruciales en vision par ordinateur et en robotique. Grâce à l'affinement du pic de parallaxe, au nettoyage et reconstruction d'images, au mappage de textures 3D, aux méthodes d'affichage, à la correction d'image, à l'ajustement de plans et au matching de points 3D, on peut obtenir des informations de profondeur précises et une structure 3D, essentielles pour la planification de trajectoire et l'évitement d'obstacles des robots.
8. Comparaison et Résumé des Techniques
Le tableau suivant compare les caractéristiques et les applications des techniques de vision stéréoscopique.
| Technique | Rôle Principle | Scénarios d'Application | Étapes Clés | Avantages | Inconvénients |
|---|---|---|---|---|---|
| Affinement du Pic de Parallaxe | Estimation précise de la position du pic de parallaxe | Amélioration de la précision de la correspondance stéréoscopique | Ajustement parabolique, calcul du max interpolé, rejet des pics larges | Améliore la précision de l'estimation de la parallaxe, rend les images plus lisses | Complexité de calcul plus élevée |
| Nettoyage et Reconstruction d'Images | Suppression des informations de parallaxe peu fiables, conversion en coordonnées mondiales | Fournir des informations de profondeur fiables aux robots | Création matrice d'état, marquage d'éléments invalides, invalidation des valeurs peu fiables, reconstruction 3D | Élimine efficacement le bruit et les informations peu fiables, produit une structure 3D | Processus complexe |
| Affichage par Mappage de Textures 3D | Lissage des représentations de surface 3D | Visualisation intuitive de scènes 3D | Création image filtrée médiane, insertion des valeurs filtrées, reconstruction, mappage de textures | Améliore l'effet de visualisation des scènes 3D | Peut introduire un certain flou |
| Méthodes d'Affichage d'Images Stéréoscopiques | Permettre l'affichage d'images stéréoscopiques | Présentation visuelle stéréoscopique | Choix de la méthode d'affichage (ex: anaglyphe) | Plusieurs options d'affichage, faible coût | Certaines méthodes (ex: anaglyphes) entraînent une perte de couleur |
| Correction d'Image | Correction des erreurs d'alignement des images stéréoscopiques | Amélioration de la précision de la correspondance stéréoscopique | Détection de points caractéristiques, détermination des correspondances, relation épipolaire, correction d'image | Assure que les points correspondants ont la même coordonnée verticale, facilite la correspondance | Peut générer des pixels indéfinis |
| Ajustement de Plans | Ajuster un plan à un nuage de points 3D | Analyse de la structure planaire d'une scène | Calcul matrice d'inertie, valeurs et vecteurs propres, équation du plan | Simple et efficace, permet d'estimer la normale au plan | Fortement influencé par les points aberrants |
| Matching de Points 3D | Détermination de la pose relative entre deux ensembles de points 3D | Localisation et reconnaissance d'objets | Création points modèle et données, algorithme ICP | Peut gérer des problèmes complexes de correspondance de nuages de points | La convergence peut être lente |
9. Diagramme de Flux des Techniques de Vision Stéréoscopique
Le diagramme suivant, au format mermaid, illustre le flux général des techniques de vision stéréoscopique, de l'entrée des images au matching final des points 3D.
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([Entrée Images Gauche/Droite]):::startend --> B(Affinement Pic Parallaxe):::process
B --> C(Nettoyage et Reconstruction):::process
C --> D(Affichage Mappage Textures 3D):::process
C --> E(Méthodes Affichage Stéréo):::process
C --> F(Correction d'Image):::process
F --> G(Ajustement de Plans):::process
F --> H(Matching de Points 3D):::process
D --> I(Résultats Visualisés):::process
E --> I
G --> I
H --> I
I --> J([Sortie Informations Scène 3D]):::startend
10. Analyse d'Exemples d'Application
Prenons l'exemple de la navigation robotique. La vision stéréoscopique est essentielle.
- Affinement du Pic de Parallaxe : Une estimation plus précise de la profondeur permet d'éviter les erreurs de jugement de distance, par exemple, lors de la détection d'objets proches des murs.
- Nettoyage et Reconstruction d'Images : Après le nettoyage, le robot identifie précisément les obstacles et les zones de passage. La reconstruction 3D fournit un modèle d'environnement précis pour la planification de trajectoire.
- Correction d'Image : Les images corrigées améliorent la précision de la correspondance stéréoscopique, réduisant l'impact des erreurs d'alignement et de distorsion. Cela aide à identifier les bords et les positions des objets plus clairement.
- Ajustement de Plans : Le robot peut identifier rapidement les surfaces planes comme le sol et les murs pour planifier son déplacement.
- Matching de Points 3D : Permet au robot de localiser et d'orienter des objets spécifiques en comparant leur modèle 3D avec les données observées, ce qui est crucial pour des tâches comme la préhension.
11. Tendances Futures
- Précision et Vitesse accrues : Des algorithmes plus précis et efficcaes pour l'estimation de la parallaxe et la reconstruction 3D, répondant aux exigences temps réel (ex: conduite autonome).
- Fusion Multi-capteurs : Intégration plus poussée avec d'autres capteurs (LiDAR, radar) pour une perception environnementale plus robuste.
- Application de l'Apprentissage Profond : Utilisation accrue des réseaux neuronaux profonds pour l'estimation de la parallaxe et la reconstruction 3D, améliorant la capacité de généralisation et d'adaptation.
- Domaines d'Application Élargis : Utilisation dans la réalité virtuelle, la réalité augmentée, l'imagerie médicale, etc., pour des expériences 3D plus immersives et précises.
12. Conclusion et Perspectives
La vision stéréoscopique, à travers ses diverses techniques, offre des moyens efficaces d'acquérir des informations de profondeur et des structures 3D. Ces technologies, en synergie, soutiennent la navigation et la reconnaissance d'objets pour les robots, tout en enrichissant notre expérience visuelle 3D. L'évolution continue promet des avancées majeures dans de nombreux domaines, apportant plus de commodité et d'innovation.