移动侦测算法_第1页
移动侦测算法_第2页
移动侦测算法_第3页
移动侦测算法_第4页
移动侦测算法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、思路:1、 YUV数据输入,YUV4:2:2,Y为逐点采样的亮点,提取每点的Y得到一帧图像的灰阶图。2、 根据灰阶图,可以得到一个直方图统计。3、 通过比较两帧的直方图得到两帧的匹配度。4、 当匹配度低于阈值判断两帧为不匹配,为有物体移动。难点:1、 直方图比较两帧得到匹配度。2、 如何选取两帧,两帧的比较选取。3、 由灰阶得到直方图#include"params.h"/*histgram- image_in: hist:*/void histgram(unsigned char image_inxziseysize,long hist256)int i,j,n;for(n

2、=0;n<256;n+) histn=0;for(i=0;i<ysize;i+) for(j=0;j<xsize;j+) n=image_inij; histn+; 图像相似度检测之C+代码(8位-256色)本代码属于原创,如需引用,请声明来源下面是直方图相交的代码,同种图片的识别率达90%以上,性能非常稳定。程序的例子是8位(256色)位图,其他位图类似。view plaincopy to clipboardprint?#include <fstream>#include <map>#include <string>#include &l

3、t;iostream> using namespace std; typedef unsigned char uvar8; typedef unsigned int uvar32; typedef unsigned short int uvar16; typedef struct uvar8 Blue; /*蓝色所占比重*/ uvar8 Green; /*绿色所占比重*/ uvar8 Red; /*红色所占比重*/ uvar8 Reserved; Palette; /定义bmp结构 uvar8 bfType2; /* 类型标志,总是BM */ typedef struct uvar32

4、bfSize; /* 文件大小 */ uvar32 bfReserved1; uvar32 bfOffBits; /* 位图点阵偏移量*/ HEAD; typedef struct uvar32 biSize; /* 结构体字节总数 */ uvar32 biWidth; /* 图像宽度 */ uvar32 biHeight; /*图像高度 */ uvar16 biPlanes; /* 必须为1 */ uvar16 biBitCount; /* 每个像素所占二进制位数,可能是1,4,8或 24 */ uvar32 biCompress; /*压缩方式*/ uvar32 biSizeImage;

5、/*像素点阵大小 */ uvar32 biXPelsPerMeter; /* 水平像素数*/ uvar32 biYPelsPerMeter; /* 垂直像素数 */ uvar32 biClrUsed; /*使用的颜色数 */ uvar32 biClrImportant; /*重要颜色数 */ INFO; bool ReadBMP(string strFileUrl,uvar8* & pImgData,int& iSum) HEAD strHead; INFO strInfo; uvar8 type2; /uvar32 imdata256256; Palette Rgbquad;

6、 ifstream fin; fin.open(strFileUrl.c_str(),ios_base:in | ios_base:binary); /*以二进制读方式打开该文件,一定要二进制的!*/ if(!fin) cout<<"No this file!n" return false; fin.read(char*)&bfType,2); fin.read(char*)&strHead,sizeof(strHead); fin.read(char*)&strInfo,sizeof(strInfo); fin.seekg(strHea

7、d.bfOffBits,ios:beg); if (strInfo.biBitCount = 8) /pImgData = (uvar8*)pImgData; pImgData = new uvar8strInfo.biWidth*strInfo.biHeight; fin.read(char*)(pImgData),strInfo.biWidth * strInfo.biHeight* sizeof uvar8); fin.close(); iSum = strInfo.biWidth * strInfo.biHeight; return true; int main() uvar8 *pI

8、mgData1 =NULL ,*pImgData2 = NULL; int i,iSum1,iSum2; while(1) string url1; string url2; cout<<"cin bmp file name"<<endl; cin>> url1 >> url2; ReadBMP(url1,pImgData1,iSum1); ReadBMP(url2,pImgData2,iSum2); map<int,int> Map1,Map2; for (i=0;i<iSum1;i+) if (Map1.

9、find(pImgData1i)!=Map1.end() Map1(uvar8)pImgData1i+; else Map1(uvar8)pImgData1i = 0; for (i=0;i<iSum2;i+) if (Map2.find(pImgData2i)!=Map2.end() Map2(uvar8)pImgData2i+; else Map2(uvar8)pImgData2i = 0; int iSum = 0; for (map<int,int>:iterator it = Map1.begin(); it!= Map1.end(); it+) iSum += M

10、ap1(uvar8)it->first < Map2(uvar8)it->first ? Map1(uvar8)it->first : Map2(uvar8)it->first; double dResult = (double) iSum / iSum1 > (double) iSum / iSum2 ? (double) iSum / iSum1:(double) iSum / iSum2; /- cout<<endl; cout<<"special dots the sum of pic1 the sum of pic

11、2"<<endl; for (map<int,int>:iterator it1 = Map1.begin(); it1!= Map1.end(); it1+) cout<<it1->first<<" "<<it1->second<<" "<<Map2it1->first<<endl; cout<<"*"<<endl; cout<<"conculsion:"

12、<<endl; cout<< "The sum of dots in Pic1: "<< iSum1<<endl; cout<< "The sum of dots in Pic2: "<< iSum2<<endl; cout<< "The similar dots betwwen pic1 and pic2 : "<<iSum<<endl; cout<<"The rate of simliar

13、betwwen the above two pictures: " << dResult <<endl<<endl; delete pImgData1; delete pImgData2; getchar(); return 0; /函数名称: histeq()/传入参数: / BYTE*dstData 要匹配的灰度图像内存空间/ double *srcArray 模版的直方图累积,并进行归一化,大小为256/ int m_Width 匹配内存空间的宽度/ int m_Height 匹配内存空间的高度/ int m_pitch 匹配内存空间的每行所

14、在内存大小/void histeq(BYTE*dstData,double *srcArray,int m_Width,int m_Height,int m_pitch) double dstHist256; memset(dstHist,0,256 * sizeof(double); int i,j; double dstArray256; memset(dstArray,0,256 * sizeof(double); /统计直方图 for (i = 0;i < m_Height;i+) for (j = 0;j < m_Width;j+) dstHist(int)dstData

15、i * m_pitch + j+; /计算直方图累积 double m_Bytes = m_Width * m_Height; dstArray0 = dstHist0; for (i = 1;i < 256;i+) dstArrayi = dstArrayi - 1 + dstHisti; /直方图累积归一化 for (i = 0;i < 256;i+) dstArrayi /= m_Bytes; /直方图匹配 double m_diffA,m_diffB; int k = 0; BYTE mapPixel256; memset(mapPixel,0,256 * sizeof(B

16、YTE); for (i = 0;i < 256;i+) m_diffB = 1; for (j = k; j < 256;j+) m_diffA = abs(dstArrayi - srcArrayj); if (m_diffA - m_diffB < 1.0E-5) m_diffB = m_diffA; k = j; else k = j - 1; break; if (k = 255) for (int l = i;l < 256;l+) mapPixell = (BYTE) k; break; mapPixeli = (BYTE) k; /目标图像查找索引表 f

17、or (i = 0;i < m_Height;i+) for (j = 0;j < m_Width;j+) dstDatai * m_pitch + j = mapPixeldstDatai * m_pitch + j; / 计算两个直方图的相似度/ </summary>/ <param name="actualHisogram">待测图片的直方图</param>/ <param name="expectedHisogram">参考图片的直方图</param>/ <returns>得到直方图的相似度</returns> private float GetFinalResult(int actualHisogram, int expectedHisogram)if (actualHisogram.Length != expectedHisogram.Length)return 0;float result = 0;int j = actualHisogram.Length;for (int i = 0; i < j; i+)result += 1 - GetAbs(a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论