毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

vc++数字图像运动检测处理系统 第9页

更新时间:2010-3-11:  来源:毕业论文
vc++数字图像运动检测处理系统 第9页
lOffset = this->PixelOffset(i+pt1.y,j+pt1.x,wBytesPerLine);
   int c11 = *(lpData1+lOffset++);
   int c12 = *(lpData1+lOffset++);
   int c13 = *(lpData1+lOffset++);
   //第二幅图
   lOffset = this->PixelOffset(i+pt2.y,j+pt2.x,wBytesPerLine);
   int c21 = *(lpData2+lOffset++);
   int c22 = *(lpData2+lOffset++);
   int c23 = *(lpData2+lOffset++);
   //计算差值
   sum += abs(c11-c21)+abs(c12-c22)+abs(c13-c23);
  }
  GlobalUnlock(hDIB1);
  GlobalUnlock(hDIB2);
 if(sum>width1*height1*3*2)//判断是否相似
  return false;
 else
  return true;}
到现在为止,系统已经完成了背景图片的提取,接下来要做的上分析一系列的图片,把图片与背景对照,找到物体的运动轨迹。这部分分成两个模块:物体定位模块、物体轨迹描述模块。下面先分析物体定位模块。
在进行运动物体定位的时候,同样要进行文件数据读取、图像的中值滤波、图像特征区域的确定等操作,这些过程和上面背景提取的过程是相似的,因此不再做具体介绍,仅给出它们的效果图。被分析的图片如图16所示。
图16 被分析的图
中值滤波起的作用是对图像的平滑操作,去除图像中的随机噪声或者是图像输出过程中后加如的噪声。这些处理达到的处理后的效果跟上面的第2步是一样的,因为是处理的对象是像素,这是肉眼难以分别其中的差别,所以给人的感觉与上面图16是一样,因此在这里就不显示具体处理后的图像效果。但是这一步是图像处理中必不可少的,在此特别强调一下这一步。这一步为一下的操作顺利进行打下基础。
特征区域的匹配效果图17所示(白框中为特征区域)
图17 特征区域的匹配图
(8)特征区域的第二次判定
在进行特征区域确定的时候,如果第一次判定失败,则需要进行第二次判定,因为有可能运动物体刚刚遮盖了被分析图片上的特征区域,如果仅仅进行简单的一次判断,就会出现错误。进行第二次判定的算法为:在背景图片中找到第二个特征区域,而且这个特征区域必须和第个特征区域有一定的空间间隔,然后把找到的特征区域当作滤波模板,在前景图片上找寻相似的区域。寻找过程和第一次判定相似。特征区域的第二次判定的函数OnSecondPipei(参见源程序)。
(9)物体的区域定位
要判断物体的运动轨迹,首先就要从图片中提取出物体,这就是物体的区域定位。物体的区域定位在系统中是很关键的一步。在进行物体的区域定位之前,已经先对前景图片中进行特征区域的确定。具体的算法如下:下把前景图片中的特征区域和背景图片中的特征区域对齐,然后根据两个特征区域中心点在各自图片中的位置,计算得到要进行处理的像素点。接着扫描所有要处理的像素点,把两幅图片像素值相减的绝对值存放到前景中,同时把前景图片中没有被处理的像素点都置成黑色。经过这样的处理,前景图片中所有背景成分都被滤掉(显示为黑色),而运动物体则显示出来了。可以根据需要,适当地放大物体像素点的数值,这样可以看得更加明显。物体提取的函数CompareImg2:


 //下面的函数实现物体提取的操作
BOOL DIB::  CompareImg2(HANDLE hDIBBK,HANDLE hDIBCurrent,CPoint pt1,CPoint pt2)
{
 if(abs(pt1.x-pt2.x)>3 || abs(pt1.y -pt2.y)>3)
 { 
  AfxMessageBox("Imgs Offset are too big");
  return false;
 }
 LPBITMAPINFOHEADER lpbi1,lpbi2;
 lpbi1 = (LPBITMAPINFOHEADER)GlobalLock(hDIBBK);
 int width1 = lpbi1->biWidth;
 int height1 = lpbi1->biHeight;
 lpbi2 = (LPBITMAPINFOHEADER)GlobalLock(hDIBCurrent);
 int width2 = lpbi2->biWidth;
 
int height2 = lpbi2->biHeight;
if(width1 != width2 || height1 != height2)
 {
  GlobalUnlock(hDIBBK);
  GlobalUnlock(hDIBCurrent);
  AfxMessageBox("Img is not same size");
  return false;
 }
 LPBYTE lpData1,lpData2;
 lpData1 = this->FindDIBBits(hDIBBK);
 lpData2 = this->FindDIBBits(hDIBCurrent);
 WORD wBytesPerLine = this->BytePerLine(hDIBBK);
 int xleft,xright,ytop,ybottom;

 if(pt1.x>=pt2.x)
 { 
 
  xleft = pt2.x;
  xright =width1-pt1.x-1;
 }
   
 else
 { 
 
  xleft = pt1.x;
  xright = width1-pt2.x-1;
 }
 
 if(pt1.y >=pt2.y)
 { 
  ytop = pt2.y;
  ybottom = height1-pt1.y-1;

 }

 else
 { 
  
  ytop = pt1.y;
  ybottom = height1-pt2.y-1;
 }
 long sum=0;
 long lOffset;
 for(int i=-ytop;i<=ybottom;i++)
  for(int j=-xleft;j<=xright;j++)
  { 
  
   lOffset = this->PixelOffset(i+pt1.y,j+pt1.x,wBytesPerLine);
   int c11 = *(lpData1+lOffset++);
   int c12 = *(lpData1+lOffset++);
   int c13 = *(lpData1+lOffset++);
   lOffset = this->PixelOffset(i+pt2.y,j+pt2.x,wBytesPerLine);
   int c21 = *(lpData2+lOffset++);
   int c22 = *(lpData2+lOffset++);
   int c23 = *(lpData2+lOffset++);
   lOffset = this->PixelOffset(i+pt2.y,j+pt2.x,wBytesPerLine);
   *(lpData2+lOffset++) = abs(c11-c21);
   *(lpData2+lOffset++) = abs(c12-c22);
   *(lpData2+lOffset++) = abs(c13-c23);
  }
  for(i =0;i<height1;i++)
   for(int j=0;j<width1;j++)
   {
   if(i<pt2.y-ytop || i>pt2.y+ybottom||j<pt2.x-xleft || j >pt2.x+xright)
   {
    lOffset = this->PixelOffset(i,j,wBytesPerLine);
    *(lpData2+lOffset++) = 0;
    *(lpData2+lOffset++) = 0;
    *(lpData2+lOffset++) = 0;

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

vc++数字图像运动检测处理系统 第9页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。