Je travaille sur un problème de manipulation d'image. J'ai un rétroprojecteur qui projette sur un écran, et j'ai une caméra qui prend des photos de cela. Je peux établir une correspondance 1: 1 entre un sous-ensemble de coordonnées du projecteur et un sous-ensemble de pixels de la caméra en projetant des points sur l'écran et en trouvant les centres de masse des régions résultantes sur la caméra. J'ai donc une carteInterpolation et morphing d'une image dans labview et/ou openCV
proj_x, proj_y < -> cam_x, cam_y pour les paires de points bruités
Mon plan initial était de régulariser cette carte en utilisant la fonction MathScript gridData. Cela fonctionne très bien dans Matlab, comme suit
[pgridx, pgridy] = meshgrid(allprojxpts, allprojypts)
fitcx = griddata (proj_x, proj_y, cam_x, pgridx, pgridy);
fitcy = griddata (proj_x, proj_y, cam_y, pgridx, pgridy);
et l'inverse pour la caméra vers le projecteur cartographie
Malheureusement, ce code provoque Labview à manquer de mémoire sur l'étape de meshgrid (l'appareil photo est de 5 mégapixels , qui est apparemment trop pour que labview gère)
J'ai alors commencé à regarder à travers openCV, et j'ai trouvé la fonction cvRemap. Malheureusement, cette fonction prend comme point de départ une carte de pixel-pixel régularisée comme celle que j'ai essayé de générer ci-dessus. Cependant, cela m'a fait espérer que des fonctions pour créer une telle carte pourraient être disponibles dans openCV. Je ne pouvais pas le trouver dans l'API openCV 1.0 (je suis coincé avec 1.0 pour des raisons héritées), mais j'espérais que c'est là ou que quelqu'un a un tour facile.
Donc ma question est une des façons suivantes
1) Comment puis-je interpoler des points dispersés à une grille dans OpenCV; (ie, donné z = f (x, y) pour les valeurs dispersées de x et y, comment remplir une image avec f (im_x, im_y)?
2) Comment puis-je effectuer une transformation d'image qui mappe l'image 1 à l'image 2, étant donné que je connais un mappage dispersé de points dans le système de coordonnées 1 pour coordonner le système 2. Cela pourrait être mis en œuvre soit dans Labview ou OpenCV.
Note: Je tagging cette delaunay post, parce que c'est une méthode de faire une interpolation dispersée, mais la meilleure étiquette serait « interpolation dispersée »
Quelle version de LV utilisez-vous? Le problème "out of memory" avec meshgrid * devrait * avoir été corrigé dans LV2009 ... au moins, c'était pour nous. Pas que les mises à jour sont toujours une option, je sais :(. –
8.5 Nous avons une licence de site, donc je pourrais mettre à niveau vers la dernière version en théorie.En pratique, 2009 ressemble à une mise à jour majeure, et je ne veux pas Si vous savez si le bug de mémoire est spécifique à mathscript, il y a un vi sur la palette d'interpolation et d'extrapolation qui fait la même chose, donc je pourrais juste balayer ça à la place Merci, Marc – Marc
OK, j'ai pu obtenir pour travailler en utilisant la palette vi on i & e au lieu de meshgrid. – Marc