Zernike矩 及其代码

Zernike矩 及其代码

ID:37714307

大小:90.00 KB

页数:7页

时间:2019-05-29

Zernike矩 及其代码_第1页
Zernike矩 及其代码_第2页
Zernike矩 及其代码_第3页
Zernike矩 及其代码_第4页
Zernike矩 及其代码_第5页
资源描述:

《Zernike矩 及其代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Zernike矩分类:图像矩2011-04-1919:22678人阅读评论(6)收藏举报Zernike在1934年引入了一组定义在单位圆上的复值函数集{},{}具有完备性和正交性,使得它可以表示定义在单位圆盘内的任何平方可积函数。其定义为:表示原点到点的矢量长度;表示矢量与轴逆时针方向的夹角。是实值径向多项式:称为Zernike多项式。Zernike多项式满足正交性:其中为克罗内克符号,是的共轭多项式。由于Zernike多项式的正交完备性,所以在单位圆内的任何图像都可以唯一的用下面式子来展开:式子中就是Zernike矩,其定义为:

2、注意式子中和采用的是不同的坐标系(采用直角坐标,而采用的极坐标系,在计算的时候要进行坐标转换)对于离散的数字图像,可将积分形式改为累加形式:我们在计算一副图像的Zernike矩时,必须将图像的中心移到坐标的原点,将图像的像素点映射到单位圆内,由于Zernike矩具有旋转不变性,我们可以将作为图像的不变特征,其中图像的低频特征有p值小的提取,高频特征由p值高的提取。从上面可以看出,Zernike矩可以构造任意高阶矩。由于Zernike矩只具有旋转不变性,不具有平移和尺度不变性,所以要提前对图像进行归一化,我们采用标准矩的方法来归一化

3、一副图像,标准矩定义为:,由标准矩我们可以得到图像的"重心",我们将图像的"重心"移动到单位圆的圆心(即坐标的原点),便解决了平移问题。我们知道表征了图像的"面积",归一图像的尺度无非就是把他们的大小变为一致的,(这里的大小指的是图像目标物的大小,不是整幅图像的大小,"面积"也是目标物的"面积")。所以,对图像进行变换就可以达到图像尺寸一致的目的。综合上面结果,对图像进行变换,最终图像的Zernike矩就是平移,尺寸和旋转不变的。Zernike不变矩相比Hu不变矩识别效果会好一些,因为他描述了图像更多的细节

4、内容,特别是高阶矩,但是由于Zernike不变矩计算时间比较长,所以出现了很多快速的算法,大家可以google一下。用Zernike不变矩来识别手势轮廓,识别率大约在40%~50%之间,跟Hu不变矩一样,Zernike不变矩一般用来描述目标物形状占优势的图像,不适合用来描述纹理丰富的图像,对于纹理图像,识别率一般在20%~30%左右,很不占优势。C++代码如下:/*获取像素值psrcBmp:图像数据指针nsrcBmpWidth:图像宽度,以像素为单位x,y:像素点deep:图像的位数深度,(1表示8位的灰度图,3表示24位的RGB

5、位图)*/COLORREFJ_getpixel(constBYTE*psrcBmp,constintnsrcBmpWidth,constintx,constinty,intdeep=3){if(deep==3){returnRGB(*(psrcBmp+x*3+y*bpl(nsrcBmpWidth,deep)+2),*(psrcBmp+x*3+y*bpl(nsrcBmpWidth,deep)+1),*(psrcBmp+x*3+y*bpl(nsrcBmpWidth,deep)+0));}elseif(deep==1){return*(

6、psrcBmp+x+y*bpl(nsrcBmpWidth,deep));}}//获取标准矩(只支持8位灰度图)voidGetStdMoment(BYTE*psrcBmp,intnsrcBmpWidth,intnsrcBmpHeight,double*m){for(intp=0;p<2;p++)for(intq=0;q<2;q++){if(p==1&&q==1)break;for(inty=0;y

7、le)x,p)*pow((double)y,q)*J_getpixel(psrcBmp,nsrcBmpWidth,x,y,1));}}//阶乘doubleFactorial(intn){if(n<0)return-1;doublem=1;for(inti=2;i<=n;i++){m*=i;}returnm;}//阶乘数,计算好方便用,提高速度doublefactorials[11]={1,1,2,6,24,120,720,5040,40320,362880,39916800};//把图像映射到单位圆,获取像素极坐标半径double

8、GetRadii(intnsrcBmpWidth,intnsrcBmpHeight,intx0,inty0,intx,inty){doublelefttop=sqrt(((double)0-x0)*(0-x0)+(0-y0)*(0-y0));dou

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。