• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: kinect  opencv  c++  

资源简介

单kinect静止场景多帧去噪,时间域用中值,空间域用最近邻。

资源截图

代码片段和文件信息

#include“denoise.h“

/**************************************************************
   constructor initializes all the data members in the class. 
   create new image for denoisedImage and set the rest zero.
   the following function addframe() add frames in frameSet
   just copy addresses belongs to shallow copy. 
 **************************************************************/
kinectDenoising::kinectDenoising()
{
denoisedImage = cvCreateImage(cvSize(widthheight)IPL_DEPTH_16U1);
memset(frameSet0sizeof(IplImage*)*nframes);
numOfframes = 0;
imageROI = cvRect(00widthheight);
}

kinectDenoising::~kinectDenoising()
{
cvReleaseImage(&denoisedImage);
for(int i=0;iames;i++)
{
if(frameSet[i] != NULL)
cvReleaseImage(&frameSet[i]);
}
}

void kinectDenoising::addframe(IplImage* frame)
{
if(numOfframes >= nframes)
{
cout<<“the frame set is full adding frame ignored!“< }
else
{
frameSet[numOfframes++] = frame;
}
}
/*******************************************************************
   setImageROI() conputes the image eara to be denoised. if isUpdate
   is true recomputation process will start. first regard frameSet[0]
   as the operating image set the value of non zero pixels 1and the 
   rest pixels 0. then use projecting method to compute the imageROI.    
*************************************************************/
void kinectDenoising::setImageROI(bool isUpdate)
{
if(!isUpdate) 
{
imageROI = cvRect(2244591434);
}
else
{
IplImage* image8u = cvCreateImage(cvSize(widthheight)IPL_DEPTH_8U1);
IplImage* bitImage = cvCreateImage(cvSize(widthheight)IPL_DEPTH_8U1);

// cvThreshold can only handle images of 8UC1 or 32FC1
cvConvertScale(frameSet[0]image8u255.0/4096.0);
cvThreshold(image8ubitImage01CV_THRESH_BINARY);

        // the two mats rowReduced and colReduced have to be CV_32SC1 type
    // for function cvReduce() seems not to suitable for 16U type and 
    // 8U type doesn‘t have enough room for the result.
    CvMat* rowReduced = cvCreateMat(1bitImage->widthCV_32FC1);
    // bitImage->width represents number of cols while bitImage->height stands for rows
    CvMat* colReduced = cvCreateMat(bitImage->height1CV_32FC1);

    cvReduce(bitImagerowReduced0CV_REDUCE_SUM);
    cvReduce(bitImagecolReduced1CV_REDUCE_SUM);

// compute imageROI.x
    for(int i=0;icols;i++)
    {
float temp = CV_MAT_ELEM(*rowReducedfloat0i);
    if(temp>bitImage->height/3)
    {
imageROI.x = i;
    break;
    }
    }

// computer imageROI.width
    for(int i=rowReduced->cols;i>0;i--)
    {
float temp = CV_MAT_ELEM(*rowReducedfloat0i-1);
if(temp>bitImage->height/3)
    {
imageROI.width = i-imageROI.x;
      break;
}
        }

// compute imageROI.y
    for(int i=0;irows;i++)
     {
     float temp = CV_MAT_ELEM(*col

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        825  2011-11-23 16:26  denoise.h

     文件       1188  2011-11-23 16:51  denoiseSingeKinectMultipleMapStaticScene.cpp

     文件       6808  2011-11-23 16:48  denoise.cpp

----------- ---------  ---------- -----  ----

                 8821                    3


评论

共有 条评论