首页 HausDorff距离计算源代码

HausDorff距离计算源代码

举报
开通vip

HausDorff距离计算源代码HausDorff距离计算源代码 HausDorff距离计算源代码【自己写的,分享】 由 heyoup ? 2010-04-29 11:49 CommonHeader.h 代码: 全选 #include #include #include #include #include #define VERYBIG (10000); HausDorffComputer.h 代码: 全选 #include "CommonHeader.h" #pragma once class HausD...

HausDorff距离计算源代码
HausDorff距离计算源代码 HausDorff距离计算源代码【自己写的,分享】 由 heyoup ? 2010-04-29 11:49 CommonHeader.h 代码: 全选 #include #include #include #include #include #define VERYBIG (10000); HausDorffComputer.h 代码: 全选 #include "CommonHeader.h" #pragma once class HausDorffComputer { public: HausDorffComputer(void); HausDorffComputer(IplImage * imageA,IplImage * imageB,double rho,double beta,int imageAScanInterval=0,int imageBScanInterval=0); ~HausDorffComputer(void); void SetImageA(IplImage * image); void SetImageB(IplImage * image); void SetRho(double rho); void SetBeta(double beta); void SetImageAScanInterval(int interval); void SetImageBScanInterval(int interval); double GetHausDorffValue(); private: IplImage * mImageA; IplImage * mImageB; double mRho; double mBeta; int mImageAScanInterval; int mImageBScanInterval; }; HausDorffComputer.cpp 代码: 全选 #include "HausDorffComputer.h" #include "CommonHeader.h" HausDorffComputer::HausDorffComputer(void) { this->mImageA=0; this->mImageB=0; this->mRho=0; this->mBeta=0; } HausDorffComputer::HausDorffComputer(IplImage * imageA,IplImage * imageB,double rho,double beta,int imageAScanInterval,int imageBScanInterval) { this->mImageA=imageA; this->mImageB=imageB; this->mRho=rho; this->mBeta=beta; this->mImageAScanInterval=imageAScanInterval; this->mImageBScanInterval=imageBScanInterval; } HausDorffComputer::~HausDorffComputer(void) { } void HausDorffComputer::SetImageA(IplImage * image) { this->mImageA=image; } void HausDorffComputer::SetImageB(IplImage * image) { this->mImageB=image; } void HausDorffComputer::SetRho(double rho) { this->mRho=rho; } void HausDorffComputer::SetBeta(double beta) { this->mBeta=beta; } void HausDorffComputer::SetImageAScanInterval(int interval) { this->mImageAScanInterval=interval; } void HausDorffComputer::SetImageBScanInterval(int interval) { this->mImageBScanInterval=interval; } double HausDorffComputer::GetHausDorffValue() { int AWPointAmount=0; for(int i=0;imImageA->width;i++) { for(int j=0;jmImageA->height;j++) { if((uchar)(this->mImageA->imageData[j*this->mImageA->width+i])= =255) { AWPointAmount++; } } } CvPoint * AWPoints=new CvPoint[AWPointAmount];//此处应小心 AWPointAmount为0 AWPointAmount=0; for(int i=0;imImageA->width;i++) { for(int j=0;jmImageA->height;j++) { if((uchar)(this->mImageA->imageData[j*this->mImageA->width+i])= =255) { AWPoints[AWPointAmount].x=i; AWPoints[AWPointAmount].y=j; AWPointAmount++; } } } int BWPointAmount=0; for(int i=0;imImageB->width;i++) { for(int j=0;jmImageB->height;j++) { if((uchar)(this->mImageB->imageData[j*this->mImageB->width+i])= =255) { BWPointAmount++; } } } CvPoint * BWPoints=new CvPoint[BWPointAmount];//此处应小心 BWPointAmount为0 BWPointAmount=0; for(int i=0;imImageB->width;i++) { for(int j=0;jmImageB->height;j++) { if((uchar)(this->mImageB->imageData[j*this->mImageB->width+i])= =255) { BWPoints[BWPointAmount].x=i; BWPoints[BWPointAmount].y=j; BWPointAmount++; } } } int fitPointAmount=0; double sumDistance=0; #pragma omp parallel for reduction(+:sumDistance,fitPointAmount) for(int i=0;imImageAScanInterval==0?1:this->mImageAScan Interval)) { double minDistance=VERYBIG; double tempDistance=0; #pragma omp parallel for firstprivate(tempDistance) for(int j=0;jmImageBScanInterval==0?1:this->mImageBScan Interval)) { tempDistance=sqrt((double)((AWPoints[i].x-BWPoints[j].x)*(AWPoi nts[i].x-BWPoints[j].x)+(AWPoints[i].y-BWPoints[j].y)*(AWPoints[i].y-BWP oints[j].y))); #pragma omp critical minDistance=minDistancemBeta) { fitPointAmount++; sumDistance+=minDistance; } } if(fitPointAmount==0) { delete[] AWPoints; delete[] BWPoints; return VERYBIG } double distanceAToB=pow((double)AWPointAmount/(double)fitPointAmount,this->mRho )*sumDistance/(double)fitPointAmount; fitPointAmount=0; sumDistance=0; #pragma omp parallel for reduction(+:sumDistance,fitPointAmount) for(int i=0;imImageBScanInterval==0?1:this->mImageBScanInterval)) { double minDistance=VERYBIG; double tempDistance=0; #pragma omp parallel for firstprivate(tempDistance) for(int j=0;jmImageAScanInterval==0?1:this->mImageAScanInterval)) { tempDistance=sqrt((double)((BWPoints[i].x-AWPoints[j].x)*(BWPoints[i].x-AWPoints[j].x)+(BWPoints[i].y-AWPoints[j].y)*(BWPoints[i].y-AWPoints[j].y))); #pragma omp critical minDistance=minDistancemBeta) { fitPointAmount++; sumDistance+=minDistance; } } if(fitPointAmount==0) { delete[] AWPoints; delete[] BWPoints; return VERYBIG } double distanceBToA=pow((double)AWPointAmount/(double)fitPointAmount,this->mRho)*sumDistance/(double)fitPointAmount; return distanceAToB>distanceBToA?distanceAToB:distanceBToA; }
本文档为【HausDorff距离计算源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:25KB
软件:Word
页数:9
分类:企业经营
上传时间:2018-04-30
浏览量:32