none
kinectv2 color and depth mapping issue through network RRS feed

  • Question

  • Hi,
       Please help me to solve the issue i am facing.i have took kinect data from network machine and try to display in my machine.Now i am able to see the rgb point cloud, but shadow appears on depth position.so color and depth are not matching correctly.when ever the subject moves some shadows appearing before him.if he remains constant without moving then that shadow is not appearing.Here i am using following code to display color and depth of the subject.

    This is how i am getting cameraspacepoint from network machine.


    USHORT* depthSensor2buffer;
    unsigned short*  depths2buffer;
    void AcquireAndProcessDepthFrame()
    {    
    IDepthFramePtr depthFrame;    
    if (depthStreamer->AcquireLatestFrame(&depthFrame))    
    {        
    UINT bufferSize;
        
    depthFrame->AccessRawUnderlyingBuffer(&bufferSize, &depths2buffer);
            
    unsigned short * output = depthFrameRenderBuffer; 
    const unsigned short* bufferEnd = depths2buffer + DEPTH_MULTICAST_WIDTH*DEPTH_MULTICAST_HEIGHT*4; 
    depthSensor2buffer=reinterpret_cast<UINT16 *>(depths2buffer); 
          
     if(depths2buffer < bufferEnd)       
     {       
    
              pCoordinateMapper->MapColorFrameToCameraSpace(512*424, reinterpret_cast<UINT16 *>(depths2buffer), 2073600, pCSS2Points);  
              pCoordinateMapper->MapColorFrameToDepthSpace(512 * 424, reinterpret_cast<UINT16 *>(depths2buffer), 1920 * 1080, pS2DepthSpaceBuffer);          
              depthFrame.reset();        
    }   
    }

    Here only i am mapping the cameraspacepoint with color to isolate the subject alone.


    for (int i = 0; i < 1920; i++)              

    {                  

    for (int j = 0; j < 1080; j++)                  

     {                      

     int colorIndex1 = i + (j * 1920);                  

    const CameraSpacePoint& rPtS2 = pCSS2Points[colorIndex1];                      

     DepthSpacePoint p = pS2DepthSpaceBuffer[colorIndex1];                     

       float xxs2=0;                     

       float yys2=0;                      

     float zzs2=0;                      

     if (p.X != -std::numeric_limits<float>::infinity() && p.Y != -std::numeric_limits<float>::infinity())  

        {                        

        int depthX = static_cast<int>(p.X + 0.5f);                      

         int depthY = static_cast<int>(p.Y + 0.5f);                                                 

       if ((depthX >= 0 && depthX < 512) && (depthY >= 0 && depthY < 424))              

              {                                                              

      int players2 =  pIArray [depthX +(depthY * 512)];                                  

      if(players2 > 0)                                 

        {                                        

    if (rPtS2.Z > 0)                                  

         {                                          

      xxs2 =(i-pp_x)*rPtS2.Z/fl_x;                                      

         yys2 = (j-pp_y)*rPtS2.Z/fl_y;                                          

      zzs2=rPtS2.Z;                                          

      if(bufferbyte != nullptr)                                      

          {                                                                                          

         glColor4ubv((const GLubyte*)(&bufferbyte[3  * colorIndex1]));             

                      glVertex3f(xxs2, -yys2,zzs2);              

                        }                                     

       }                                  

      }                                                    

    }                  

    }              

    }         

         

     }

    Thanks,


    kirubha



    • Edited by KrupaKine Friday, July 3, 2015 12:46 PM
    Friday, July 3, 2015 12:35 PM