2017-02-23 2 views
0

J'ai un nuage de points organisé (1280 * 720) capturé à partir d'une caméra 3D. Je me demande s'il existe une méthode pour redimensionner (réduire) ce nuage de points à une taille plus petite (par exemple 128 * 72), en gardant ce nuage organisé. (Je pense que cela ne devrait pas être la même chose que l'échantillonnage bas. "Redimensionner" signifie zoom sur une image). J'utilise Point Cloud Library 1.8.0 mais je suis coincé avec ça.Redimensionner le nuage de points organisé

Tout conseil est le bienvenu, merci d'abord!

Répondre

1

Il suffit de prendre un point sur le nombre de fois que vous voulez réduire votre nuage, quelque chose comme ce travail de shloud:

for (pcl::PointCloud<pcl::PointXYZ>::const_iterator it = src->begin(); it< src->end(); it+=times) 
{ 
    dest.points.push_back(*it); 
} 

Le seul problème est le nuage pourrait NaN certaines valeurs contiennent. Pour le corriger, définissez is_dense sur false dans dest et appelez removeNaNFromPointCloud dessus.

J'espère que cela peut vous aider!

+0

Merci @Anatole pour votre explication! En fait, j'ai aussi trouvé un autre moyen similaire (peut-être plus précis que) le vôtre. Je calcule simplement la valeur moyenne de chaque fenêtre m * m du nuage src comme valeur correspondante dans le nuage de destination. –

+0

J'ai également réalisé le problème de NaN. Il semble que "removeNaNFromPointCloud" ne garde pas le nuage organisé. J'ignore tout point NaN lors du calcul de la valeur moyenne, en laissant le point NaN si tous les points à l'intérieur de la fenêtre de l'image src sont des points NaN. En outre, je pense qu'il devrait y avoir de meilleurs moyens d'interpolation que de simplement calculer la moyenne à l'intérieur de la fenêtre. Curieux, il n'y a pas d'API associée de PCL. –

+0

Encore une question sur le nuage de points organisé, @Anatole. Êtes-vous familier avec la méthode d'échantillonnage par le bas pour un nuage de points organisé avec PCL? Merci. –

0

Impossible de commenter, mais la suppression des NaN de votre nuage de points par défaut le rend non organisé. Il est fort probable que les NaN soient là en tant que points factices au cas où votre instrument ne pourrait pas observer un point dans la matrice juste pour garder les dimensions de la matrice correctes. Enlever ceux qui cassent la structure de la matrice et vous aurez une quantité différente de points que votre matrice 1280 * 720 attendrait.

Si vous souhaitez déguster un bas nuage de points organisé par dire un facteur 2, vous pouvez essayer quelque chose comme

int scale = 2; 
pcl::PointCloud<pcl::your_point_type> down_sampled_cloud; 
down_sampled_cloud.width = original_cloud.width/scale; 
down_sampled_cloud.height = original_cloud.height/scale; 

for(int ii = 0; ii < original_cloud.height; ii+=scale){ 
    for(int jj = 0; jj < original_cloud.width; jj+=scale){ 
    down_sampled_cloud.push_back(original_cloud.at(ii,jj)); 

    } 
} 

changer d'échelle à ce que vous souhaitez.

Cette méthode juste en bas échantillonne le nuage de points d'origine, elle n'interpole pas les points entre les points existants. La mise à l'échelle par un facteur décimal est plus délicate et peut donner des résultats indésirables si la surface n'est pas continue.