模板匹配之zernike矩
来源:互联网 发布:c语言大小写单词转换 编辑:程序博客网 时间:2024/06/05 15:51
zernike矩具有旋转不变性,广泛用于目标识别模板匹配,抗噪能力强。
zernike矩的原理就不过多赘述,上代码。
//求n的阶乘 long TemplateMatch::factorial(int n) { int result=1; while(n>1) { result *= n; n-=1; } return result; } //zernike矩径向多项式 double TemplateMatch::RadialPolynomial(double p, int n, int m) { double radial=0; int s; double c; for (s=0; s<=(n-m)/2; s++) { c=pow((double)(-1),(double)(s))*factorial(n-s)/((double)(factorial(s)*factorial((n+m)/2-s)*factorial((n-m)/2-s))); radial=radial+c*pow(p,n-2*s); } return radial; } //n阶m次zernike矩 double TemplateMatch::ZernikeMoments(double *im,int imW,int imH, int n, int m) { #define im(ROW,COL) im[imW*(ROW)+(COL)] double zr=0; double zi=0; int cnt=0; int x,y; double p; double radial=0; double theta=0; for (y=0; y<imH; y++) { for(x=0; x<imW; x++) { p=sqrt((double)((2*x-imW+1)*(2*x-imW+1)+(imH-1-2*y)*(imH-1-2*y)))/imW; if (p<=1) { radial=RadialPolynomial(p,n,m); theta=atan2((double)(imH-1-2*y),(double)(2*x-imW+1)); zr+=im(y,x)*radial*cos(m*theta); zi+=im(y,x)*radial*sin(m*theta); cnt++; } } } double A=(n+1)*sqrt((double)(zr*zr+zi*zi))/cnt; return A; }
1 0
- 模板匹配之zernike矩
- Zernike矩
- Zernike 矩
- Zernike矩
- Zernike矩
- Zernike矩
- Zernike矩
- Zernike矩之图像重建(附源码)
- Zernike矩之边缘检测(附源码)
- Zernike 矩简介
- 关于Zernike矩
- Zernike矩及Opencv实现
- Zernike矩及Opencv实现
- Zernike矩及Opencv实现
- halcon模板匹配之形状匹配法
- halcon模板匹配之形状匹配法
- halcon模板匹配之形状匹配法
- 图像处理之模板匹配
- [LeetCode] Edit Distance
- 排序总结
- HttpClient使用详解
- POJ1125 Stockbroker Grapevine(最短路Floyed)
- Exemplar-SVM 编译
- 模板匹配之zernike矩
- 超六成网站域名存在安全问题
- LDD3源码分析之slab高速缓存
- ajax的同步与异步,异同点
- [Hb-XI] 标志寄存器 cmp jb ja指令编程
- tomcat部署web项目并访问
- java面向对象开发
- iOS 8 by Tutorials(翻译1.2)
- 百度搜索下拉实现