Распаковка значений RGB в наборе данных облака точек

Это касается распаковки закодированных значений rgb в файле pcl. Я сделал это с помощью процедуры, описанной в документации pcl, но распакованные значения rgb, которые я получаю, не совсем корректны. Когда я рисую их с помощью R, данное представление не соответствует цветам в реальной обстановке (я в определенной степени уверен, что проблема не в том, как это было нанесено с помощью R).

Например, на прилагаемом изображении разграниченная область должна быть окрашена в серый и синий цвета (два стула и стол).unpacked pcl data plotted with the rgl library in R

Исходный файл pcl можно найти по адресу: https://docs.google.com/open?id=0Bz5-HVcDiF6SanBZU0JWVmJwWHMи файл с распакованными значениями цвета по адресу: https://docs.google.com/open?id=0Bz5-HVcDiF6SV2pYQ0xUbTAwVmM. Также ниже приведен код, используемый для распаковки значений цвета в настройке c plus plus:

uint32_t rgbD = *reinterpret_cast(&kinectValue);

    uint16_t rD = (rgbD >> 16) & 0x0000ff;
    uint16_t gD = (rgbD >> 8)  & 0x0000ff;
    uint16_t bD = (rgbD)       & 0x0000ff;

Я был бы очень признателен, если бы вы сообщили мне, где я ошибся.

Обновление:

Ниже приведен фрагмент кода R, который я использовал для отображения значений в 3D:

library(rgl)
pcd <- read.table(file.choose(),sep="")
names(pcd) <- c("x","y","z","r","g","b")
plot3d(pcd$x,pcd$y,pcd$z,col=rgb(pcd$r,pcd$g,pcd$b,maxColorValue=255))

Обновление:

Ниже приведен код, который я использовал для чтения данных на C++:

/*
Reads in a file from Kinect with unpacked color values, filter the color value component and
sends it to be unpacked
*/
int fileRead(){

  string line;
  int lineNum = 0;

  ifstream myfile ("res/OnePerson4.pcd");

  if (myfile.is_open())
  {
    while ( myfile.good() )
    {
      lineNum++;
      getline (myfile,line);

       // Exclude the header information in the kinect file from the unpacking process
      //if(lineNum > 10 && lineNum <20){//This for loop is activated when testing
      if(lineNum > 10){
        //Test code to extract the x,y,z values
        string xyzvalFromKinectStr = line.substr(0,line.find_last_of(' '));
        //cout<

5
задан picmate 涅 12 April 2012 в 17:24
поделиться