00001 #ifndef _OKAN_REG_H_ 00002 #define _OKAN_REG_H 00003 00004 #include "OkanMisc.h" 00005 #include "highgui.h" 00006 00007 #include <iostream> 00008 #include <string> 00009 #include <vector> 00010 00016 class OkanReg 00017 { 00018 public: 00022 IplImage* image[2]; 00023 00027 IplImage* gray[2]; 00028 00032 CvPoint2D32f *corner[2]; 00033 00037 int cornerSize[2]; 00038 00042 vector< CvPoint2D32f > matches[2]; 00043 00048 CvMat* bestMat[2]; 00049 00054 int bestPoint; 00055 00059 float bestMse; 00060 00074 double norCrosCorr( int x0 , int y0 , int x1 , int y1 , int n , double mean0 , double std0 , double mean1 , double std1 ); 00075 00081 void findHomography( int * ids , CvMat* h ); 00082 00090 int checkHomographyQuality( CvMat* h , float errTol , float & mse ); 00091 00092 00093 public: 00097 OkanReg(); 00098 00104 ~OkanReg(); 00105 00111 void clearReg(); 00112 00119 void destroyImage( int id ); 00120 00128 void setImage( IplImage* im , int id ); 00129 00133 void setImage( string im , int id ); 00134 00140 IplImage* getImage( int id ); 00141 00150 void setImageROI( int id , int x1 , int y1 , int x2 , int y2 ); 00151 00157 CvRect getImageROI( int id ); 00158 00163 void removeImageROI( int id ); 00164 00170 int getCornerSize( int id ); 00171 00177 CvPoint2D32f* getCorner( int id ); 00178 00182 void clearMatches(); 00183 00189 void addMatch( CvPoint2D32f p1 , CvPoint2D32f p2 ); 00190 00195 void eraseMatch( int id ); 00196 00202 vector< CvPoint2D32f > & getMatches( int id ); 00203 00209 CvMat* getBestMat( int id ); 00210 00215 int getBestPoint(); 00216 00221 float getBestMse(); 00222 00234 double findHarris( int id , int n , double thresh , double minDistance , int blockSize = 3 , int apertureSize = 3 , double k = 0.04 ); 00235 00243 int findPutMatch( int n , int d = 0 , double thresh = -2 ); 00244 00253 bool findRANSACHomography( int iter , float errTol ); 00254 }; 00255 00256 #endif