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

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

更新时间:2010-3-11:  来源:毕业论文
vc++数字图像运动检测处理系统 第7页
图像特征区域的确定
要想进行图像的匹配,必须要先确定一块用来匹配的区域,因为不可能把两幅图像的所有像素进行比较,那样计算量太大,系统开销不允许。如何抽取特征区域也是相当重要的。如果特征找的不对,图像匹配就不可能准确。从一个图片中提取什么样的特征,将因不同的模式而异。特定区域的确定要先人为的设定判断条件。在这种情况下,不能用像素点与点之间的距离,也不是点与一组点间的距离,而是一个统计距离。在本系统中,把像素点数值总数最大的一块区域作为特征区域(在进行这个操作之前必须已经进行了求梯度的操作)。因为这样的特征区域中的像素点数值变化明显,更加容易进行匹配,有利于减少误差。
图像特征区域确定的函数IocateImporntpoint:
void DIB::LocateImporntPoint(HANDLE hDIB, int Radius, CPoint *pPoint)
{
 LPBITMAPINFOHEADER lpbi;
 lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
 int width ,height;
 width = lpbi->biWidth;
 height = lpbi->biHeight;
 WORD wBytesPerLine;
 wBytesPerLine = this->BytePerLine(hDIB);
 LPBYTE lpData;
 lpData = this->FindDIBBits(hDIB);
 int tempsum=0,sum=0;//定义两个变量用来记数
 long lOffset;
 //扫描整个图片(边缘点除外)寻找特征区域
 for(int i=Radius;i<height-Radius;i++)
  for(int j= Radius;j<width-Radius;j++)
  { tempsum =0;
   //扫描以Radius×2+1为边长的正方形区域
   for(int k1=-Radius;k1<=Radius;k1++)
    for(int k2 =-Radius;k2<=Radius;k2++)
    { 
     lOffset = this->PixelOffset(i+k1,j+k2,wBytesPerLine);
     int color = *(lpData+lOffset);
     tempsum +=color;//累加象素值
    }
    if(tempsum>sum)//如果得到的累计象素值大于已经得到的最大值
    { 
     //更改累计象素值大小
     sum = tempsum;
     //更改特征区域中心点
     (pPoint->x) = j;
     (pPoint->y) = i;    
}
  }
 //下面的代码把特征区域的边框设置成白色
 for( i = -Radius;i<=Radius;i++)
 {
  lOffset = this->PixelOffset(pPoint->y-Radius,pPoint->x +i,wBytesPerLine);
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
 }
 for( i = -Radius;i<=Radius;i++)
 {
  lOffset = this->PixelOffset(pPoint->y+Radius,pPoint->x +i,wBytesPerLine);
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
 }
 for( i = -Radius;i<=Radius;i++)
 {
  lOffset = this->PixelOffset(pPoint->y+i,pPoint->x-Radius ,wBytesPerLine);
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
 }
 for( i = -Radius;i<=Radius;i++)
 {
  lOffset = this->PixelOffset(pPoint->y+i,pPoint->x+Radius,wBytesPerLine);
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
  *(lpData+lOffset++) = 255;
 }
 lOffset = this->PixelOffset(pPoint->y,pPoint->x ,wBytesPerLine);
 *(lpData+lOffset++) = 0;
 *(lpData+lOffset++) = 255;
 *(lpData+lOffset++) = 0;
  GlobalUnlock(hDIB);}
图像特征区域确定后,用白框框起来的部分为图片特征区域如图13所示。
图13 特征区域确定图
(6)得到特征区域的颜色信息
定位出特征区域的位置时,处理的是求了梯度之后的图像,而后面的运动检测要求使用原来图像的彩色区域信息,所以光有了区域位置还不行,必须得到该区域具体像素点的颜色信息。在系统实现的时候是把特征区域的颜色信息存放到一个数组里面,这样后面要用它的时候只要查询数组就够了,相对于查询整个源图像来说,可以大大地节省计算时间。得到特征区域颜色信息的函数OnMenuTezhengquyu(参见源程序)。特征区域的颜色信息如图14所示。
图14 特征区域的颜色信息
(7)两幅图像的匹配
图像的匹配,简单的说就是进行两幅图像的相似程度的判断。一般来说,要比较的两幅图像的大小(长宽)是相等的,需要判定的只是图像内容的相似情况。系统实现图像匹配的时候,已经进行了图像特征区域的提取,因此在进行匹配的时候,图像对齐已经不成问题了。
具体实现的方法为:先把两个图像的特征区域的中心点对齐,然后根据两个中心点在各自图像中的偏差,来确定要比较的像素。接着处理那些要进行比较的像素,得到它们的差值 的绝对值,最后累加这些绝对值,观察它的大小,如果绝对值非常大,说明两幅图像的差异很大,就认为不能匹配,否则就认为匹配成功。
在求的一幅图片的特征区域之后,就要把这幅图片和第二幅图片进行比较,分析两幅图片的相似程度如何,如果很相似,说明图片上面没有运动物体,可以把其中的一幅图片设定为背景(当然也可以根据需要多比较几幅图片)。
注意:把第一幅图片和第二幅图片进行比较的时候,第二幅图片同样要进行中值滤波处理。如果第二幅图片上面没有第一幅图片上面的特征区域,那就说明两幅图片是完全不同的,系统直接返回去检查下一幅图片。如果第二幅图片上面有第一幅图片上面的特征区域,那么系统将根据两个特征区域在各自图片中的相对位置,进行图片相似度的比较。成功则确定背景,不成功则查看下一幅图片

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

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

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