// // Constructor // CKalmTrack::CKalmTrack(TCHAR *tszName,LPUNKNOWN punk,HRESULT *phr) : CTransInPlaceFilter(tszName, punk, CLSID_CKalmTrack,phr) { m_params.x = 0.4f; m_params.y = 0.3f; m_params.width = 0.2f; m_params.height = 0.3f; m_params.Smin = 20; m_params.Vmin = 40; m_params.view = 0; IsTracking = false; IsInit =false; Kalman = cvCreateKalman(4,4); CvMat Dyn = cvMat(4,4,CV_MAT4x4_32F,Kalman->DynamMatr); CvMat Mes = cvMat(4,4,CV_MAT4x4_32F,Kalman->MeasurementMatr); CvMat PNC = cvMat(4,4,CV_MAT4x4_32F,Kalman->PNCovariance); CvMat MNC = cvMat(4,4,CV_MAT4x4_32F,Kalman->MNCovariance); CvMat PriErr = cvMat(4,4,CV_MAT4x4_32F,Kalman->PriorErrorCovariance); CvMat PostErr = cvMat(4,4,CV_MAT4x4_32F,Kalman->PosterErrorCovariance); CvMat PriState = cvMat(4,1,CV_MAT4x1_32F,Kalman->PriorState); cvmSetIdentity(&PNC); cvmSetIdentity(&PriErr); cvmSetIdentity(&PostErr); cvmSetZero(&MNC); cvmSetZero(&PriState); cvmSetIdentity(&Dyn); cvmSet(&Dyn,0,1,0.9f); cvmSet(&Dyn,2,3,0.9f); cvmSetIdentity(&Mes); MVect = cvMat(4,1,CV_MAT4x1_32F,Measurement); ASSERT(tszName); ASSERT(phr); } // CKalmTrack
void RNAMencoding(IplImage *img, double epsilon, vector<GrayLevel> &P, vector<char> &Q, vector<CouplePoints> &blks, int &frag_num, int HWratio, int DIRpriority) { CvMat *R = cvCreateMat(img->height, img->width, CV_32FC1); CvMat *F = cvCreateMat(img->height, img->width, CV_32FC1); cvmSetZero(R); cvmSetZero(F); int r, c; int x1, y1, x2, y2; uchar *ptr; CouplePoints ps; for(r = 0; r < F->rows; r++) { ptr = (uchar *)(F->data.ptr + r*F->step); for(c = 0; c < F->cols; c++) { x1 = c; y1 = r; if(ptr[x1] != 0) continue; x2 = x1; y2 = y1; setPS(ps, x1, y1, x2, y2); if(DIRpriority == DIA_FIRST)//1.对角线搜索 { while(x2<img->width && y2<img->height && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { x2++; y2++; setPS(ps, x1, y1, x2, y2); } x2--; y2--; int temp_x2 = x2 + 1; int temp_y2 = y2 + 1; //对角线方向停止,横向继续 setPS(ps, x1, y1, temp_x2, y2); while(temp_x2<img->width && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { temp_x2++; setPS(ps, x1, y1, temp_x2, y2); } temp_x2--; //对角线方向停止,纵向继续 setPS(ps, x1, y1, x2, temp_y2); while(temp_y2<img->height && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { temp_y2++; setPS(ps, x1, y1, x2, temp_y2); } temp_y2--; if(temp_x2 - x2 > temp_y2 - y2)//[对角线 + 横向] 更大 { x2 = temp_x2; } else//[对角线 + 纵向] 更大 { y2 = temp_y2; } } else { if(DIRpriority == ROW_FIRST)//行优先 { while(x2<img->width && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { x2++; setPS(ps, x1, y1, x2, y2); } x2--; setPS(ps, x1, y1, x2, y2); while(y2<img->height && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { y2++; setPS(ps, x1, y1, x2, y2); } y2--; } else//列优先 { while(y2<img->height && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { y2++; setPS(ps, x1, y1, x2, y2); } y2--; setPS(ps, x1, y1, x2, y2); while(x2<img->width && IsHomogeneousBlock(img, ps, epsilon) == true && canF(F, ps)) { x2++; setPS(ps, x1, y1, x2, y2); } x2--; } } if(HWratio != NO_LIMIT)//有长宽比例限制 { if( (x2-x1+1)/(y2-y1+1) > HWratio ) { //宽度过大 x2 = (y2-y1+1)*HWratio + x1-1; } else { if( (y2-y1+1)/(x2-x1+1) >HWratio ) { //长度过大 y2 = (x2-x1+1)*HWratio + y1-1; } } } setPS(ps, x1, y1, x2, y2); blks.push_back(ps); setF(F, ps); setR(R, ps); setP(P, img, ps); } } frag_num = calFragNum(P, R); switch (METHOD) { case METHOD_NAM: CompressCoordinate(R, Q);//坐标矩阵压缩 break; case METHOD_FRAG_NAM: Fragment_CompressCoordinate(R, Q, frag_num);//分段编码压缩 break; case METHOD_AC_NAM: AC_CompressCoordinate(R, _nsym, _count); break; case METHOD_AC_FRAG_NAM: AC_Fragment_CompressCoordinate(R, _nsym, _count, frag_num); break; } // // // //copyMat(cm1, R); //dispIline(R, 484); }
void LineMask_limitedandleTange(int L, int N, CvMat* mhi, CvMat* M, CvMat* Mh, CvMat* mi) { /* matlab : thc = linspace(0, pi-pi/L, L); */ CvMat *thc = cvCreateMat(1,L,CV_32F); int i,j; cvmSet(thc,0,0,0.); for(i = 1; i< L; i++){ float elements = i*(pi-pi/L)/(L-1); cvmSet(thc,0,i,elements); } /*matlab : M = zeros(N);*/ M = cvCreateMat(N,N,CV_32F); cvmSetZero(M); /* matlab : (-N/2+1 : N/2-1) */ int ll = 0; CvMat *blank_aa = cvCreateMat(1, N, CV_32F); CvMat *yr = cvCreateMat(1,N,CV_32F); CvMat *xc = cvCreateMat(1,N,CV_32F); for(ll = 0; ll < N; ll++){ float elements= N*(-1.0)/2.0 + ll*1.0 + 1.0; cvmSet(blank_aa, 0, ll, elements); } /* matlab : for loop */ int nn=0; for(ll = 0; ll < L; ll++){ if(cvmGet(thc,0,ll)>= pi/3 && cvmGet(thc,0,ll)<= (pi/2+pi/18) || cvmGet(thc,0,ll) >=(2*pi/3-pi/18) && cvmGet(thc,0,ll)<= 2*pi/3){ /* matlab : xc = round(cot(thc(ll))*(-N/2+1:N/2-1))+N/2+1; */ float element_B = cvmGet(thc,0,ll); element_B = tan(element_B); //cotangent(0).. if(element_B == 0) element_B = 0.1; element_B = 1.0/element_B; for(i=0; i<blank_aa->cols-1; i++){ int element_C = round_ban(element_B * cvmGet(blank_aa,0, i))+N/2+1; cvmSet(xc,0,i,element_C); } for(nn = 0; nn<N-1; nn++){ /* matlab : M(nn+1,xc(nn)) = 1;*/ int elements_A = cvmGet(xc,0,nn); cvmSet(M,nn+1,elements_A,1.0); } }//if else{ if(cvmGet(thc,0,ll) <= pi/4 || cvmGet(thc,0,ll)>3*pi/4){ /* matlab : yr = round(tan(thc(ll))*(-N/2+1:N/2-1))+N/2+1; */ float element_B = cvmGet(thc,0,ll); element_B = tan(element_B); for(i=0; i<blank_aa->cols-1; i++){ int element_C = round_ban(element_B * cvmGet(blank_aa,0, i))+N/2+1; cvmSet(yr,0,i,element_C); } for(nn = 0; nn<N-1; nn++){ /* matlab : M(yr(nn), nn+1) = 1;*/ int elements_A = cvmGet(yr,0,nn); cvmSet(M,elements_A,nn+1,1.0); } } else{ /* matlab : xc = round(cot(thc(ll))*(-N/2+1:N/2-1))+N/2+1; */ float element_B = cvmGet(thc,0,ll); element_B = tan(element_B); //cotangent(0).. if(element_B == 0) element_B = 0.1; element_B = 1.0/element_B; for(i=0; i<blank_aa->cols-1; i++){ int element_C = round_ban(element_B * cvmGet(blank_aa,0, i))+N/2+1; cvmSet(xc,0,i,element_C); } for(nn = 0; nn<N-1; nn++){ /* matlab : M(nn+1,xc(nn)) = 1;*/ int elements_A = cvmGet(xc,0,nn); cvmSet(M,nn+1,elements_A,1.0); } } }//else }//for //upper half plane mask Mh = cvCreateMat(N,N,CV_32FC1); cvmSetZero(Mh); cvmCopy(M,Mh); /* matlab : Mh =(N/2+2:N,:) = 0; */ int r,c; for(c = 0; c<N; c++){ for(r = N/2+2; r<N; r++){ cvmSet(Mh, r, c, 0); } } /* matlab : Mh =(N/2+1,N/2+1:N) = 0; */ for(c = N/2; c<N; c++){ cvmSet(Mh, N/2+1, c, 0); } /* matlab : mMH = find(M)*/ int count = 0; for(c = 0; c< M->cols; c++){ for(r = 0; r< M->rows; r++){ if(cvmGet(M,r,c) != 0){ count=count+1; } } } int a_blank= count+1; mi = cvCreateMat(a_blank,1,CV_32F); count = 0; for(c = 0; c< M->cols; c++){ for(r = 0; r< M->rows; r++){ if(cvmGet(M,r,c) != 0){ float elements = cvmGet(M,r,c); cvmSet(mi,count,0, elements); //find the nonzero elements in matrix count=count+1; } } } /* matlab : mMH = find(M)*/ count = 0; for(c = 0; c< Mh->cols; c++){ for(r = 0; r< Mh->rows; r++){ if(cvmGet(Mh,r,c) != 0){ count=count+1; } } } a_blank= count; mhi = cvCreateMat(a_blank+1,1,CV_32F); count = 0; for(c = 0; c< Mh->cols; c++){ for(r = 0; r< Mh->rows; r++){ if(cvmGet(Mh,r,c) != 0){ float elements = cvmGet(Mh,r,c); cvmSet(mhi,count, 0, elements); //find the nonzero elements in matrix count=count+1; } } } cvReleaseMat(&thc); cvReleaseMat(&xc); cvReleaseMat(&yr); cvReleaseMat(&blank_aa); }