Hu矩阵(13页).doc

上传人:1595****071 文档编号:34806065 上传时间:2022-08-18 格式:DOC 页数:15 大小:67KB
返回 下载 相关 举报
Hu矩阵(13页).doc_第1页
第1页 / 共15页
Hu矩阵(13页).doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《Hu矩阵(13页).doc》由会员分享,可在线阅读,更多相关《Hu矩阵(13页).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、- Hu矩阵:旋转,缩放和平移不变性。(1)hu矩的概念在连续情况下,图像函数为,那么图像的p+q阶几何矩(标准矩)定义为:p+q阶中心距定义为:其中和代表图像的重心,对于离散的数字图像,采用求和号代替积分:和分别是图像的高度和宽度;归一化的中心距定义为:;其中利用二阶和三阶归一化中心矩构造了7个不变矩:这7个不变矩构成一组特征量,Hu.M.K在1962年证明了他们具有旋转,缩放和平移不变性。实际上,在对图片中物体的识别过程中,只有和不变性保持的比较好,其他的几个不变矩带来的误差比较大,有学者认为只有基于二阶矩的不变矩对二维物体的描述才是真正的具有旋转、缩放和平移不变性(和刚好都是由二阶矩组成

2、的)。不过我没有证明是否是真的事这样的。由Hu矩组成的特征量对图片进行识别,优点就是速度很快,缺点是识别率比较低,我做过手势识别,对于已经分割好的手势轮廓图,识别率也就30%左右,对于纹理比较丰富的图片,识别率更是不堪入眼,只有10%左右。这一部分原因是由于Hu不变矩只用到低阶矩(最多也就用到三阶矩),对于图像的细节未能很好的描述出来,导致对图像的描述不够完整。Hu不变矩一般用来识别图像中大的物体,对于物体的形状描述得比较好,图像的纹理特征不能太复杂,像识别水果的形状,或者对于车牌中的简单字符的识别效果会相对好一些。(2)opencv 的实现计算hu矩普通矩和中心矩的计算Void cvMome

3、nts(const CvArr*arr,CvMoments*moments, int binary = 0)arr:图像(1-通道或3通道,有COI设置)或者多边形(点的CvSeq或一族点的向量)moments:返回矩阵态度接口的指针binary(仅对图像)如果标识为非0,则所有零像素点被当成零,其它的被看成1.Double cvGetSpatialMoment(&moment, p, q);/得到普通矩Double cvGetCentralMoment(&moment, p, q);/ 得到中心矩计算hu矩Void cvGetHuMoment(CvMoments *moment,CvHuMo

4、ments *humoment)代码:1. IplImage*src=cvCreateImage(cvSize(10,10),8,1);2. cvZero(src);3. for(intyy=0;yy5;yy+)4. 5. for(intxx=0;xx5;xx+)6. 7. cvSetReal2D(src,yy,xx,255);8. 9. 10. doublem00,m10,m01;11. CvMomentsmoment;12. cvMoments(src,&moment,2);/第三个像素点非0,则所有的0像素点被当做0,非0像素点被当做113. m00=cvGetSpatialMoment

5、(&moment,0,0);/得到普通矩14. m10=cvGetSpatialMoment(&moment,1,0);15. m01=cvGetSpatialMoment(&moment,0,1);16. doubleu20;17. u20=cvGetCentralMoment(&moment,2,0);/得到中心矩18. CvHuMomentshumoment;19. cvGetHuMoments(&moment,&humoment);20. doublehu1=humoment.hu1;/得到hu矩21. couthu1endl;OPENCV还提供了输入图像直接进行hu矩匹配的函数,返回

6、的是两个图像或轮廓之间hu矩的相似度:double cvMatchShapes(const void*object1,const void*object2,int method,doubleparameter=0);计算两个轮廓之间hu矩相似程度:cpp1. #include2. #includecv.h3. #includecxcore.h4. #includehighgui.h5. usingnamespacestd;6. 7. CvSeq*getImageContours(CvArr*src)8. 9. cvThreshold(src,src,100,255,CV_THRESH_BINA

7、RY);10. CvMemStorage*storage=cvCreateMemStorage(0);11. CvSeq*contours;12. cvFindContours(src,storage,&contours);13. returncontours;14. 15. intmain()16. 17. IplImage*src1=cvLoadImage(,0);18. CvSeq*contours1=getImageContours(src1);/得到src1的轮廓19. IplImage*src2=cvLoadImage(,0);20. CvSeq*contours2=getImag

8、eContours(src2);21. doubleresult=cvMatchShapes(contours1,contours2,1);/根据输入的图像或轮廓来计算它们的hu矩的相似度22. coutresultstorage);24. cvReleaseMemStorage(&contours1-storage);25. cvReleaseImage(&src1);26. cvReleaseImage(&src2);27. return0;28. (3)案例:给出了10副图片,其中2.jpg和11.jpg非常相似,我们代码是要实现的在311.jgp找到与2.jpg最相似的图片。代码:cp

9、p1. #include2. #include3. #include4. #includecv.h5. #includecxcore.h6. #includehighgui.h7. usingnamespacestd;8. 9. intmain()10. 11. IplImage*srcColor=cvLoadImage(E:study_opencv_videolesson15_32.jpg,1);12. IplImage*src=cvCreateImage(cvGetSize(srcColor),8,1);13. cvCvtColor(srcColor,src,CV_BGR2GRAY);14

10、. if(!src)15. 16. coutNoImageLoadendl;17. 18. inti;19. stringstreamss;20. stringpath;21. stringstr;22. IplImage*dst=NULL,*dstColor;23. charc256;24. doubleresult,maxResult=1000*256*256;25. IplImage*resultMap=NULL;26. for(i=3;i12;i+)27. 28. path=E:study_opencv_videolesson15_3;29. ss.clear();30. ssstr;

11、32. str+=.jpg;33. path+=str;34. ss.clear();35. ssc;37. dstColor=cvLoadImage(c,1);38. dst=cvCreateImage(cvGetSize(dstColor),8,1);39. cvCvtColor(dstColor,dst,CV_BGR2GRAY);40. result=cvMatchShapes(src,dst,1);41. if(maxResultresult)42. 43. resultMap=cvCreateImage(cvGetSize(dstColor),8,3);44. maxResult=r

12、esult;45. cvCopy(dstColor,resultMap);46. 47. 48. cvNamedWindow(srcColor,0);49. cvNamedWindow(resultMap,0);50. cvShowImage(resultMap,resultMap);51. cvShowImage(srcColor,srcColor);52. cvWaitKey(0);53. cvReleaseImage(&src);54. cvReleaseImage(&srcColor);55. cvReleaseImage(&dst);56. cvReleaseImage(&dstColor);57. cvReleaseImage(&resultMap);58. cvDestroyWindow(srcColor);59. cvDestroyWindow(resultMap);60. return0;61. 第 15 页-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁