コード例 #1
0
ファイル: Kalman.cpp プロジェクト: mikanradojevic/sdkpub
//
// 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
コード例 #2
0
ファイル: RNAMencoding.cpp プロジェクト: HongMok/QSC_NAM
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);
}
コード例 #3
0
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);
}