Esempio n. 1
0
	/* 提取runlength 特征*/
	void RunLength::Dorunlength(float* feature){
		
		img_resize();
		/* 二值化 */
		adaptiveThreshold(image_resize, image_binary, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 31, 15);

		Mat _Pyramid = Mat(1, 4, CV_32F);
		Mat coords = Mat(1, 4, CV_32F);

		for (int i = 0; i < Pyramid.rows; i++){

			_Pyramid = Pyramid(Rect(0, i, 4, 1));
			

			coords = _Pyramid.mul(width_height);
			
			int x1 = (int)coords.at<float>(0, 0);
			int x2 = (int)coords.at<float>(0, 1);
			int y1 = (int)coords.at<float>(0, 2);
			int y2 = (int)coords.at<float>(0, 3);
			Mat test = image_binary(Range(y1, y2), Range(x1, x2));

			runlength_encoding(test, &feature[72 * i]);
		}

	}
Esempio n. 2
0
 //
 // Draw a pyramid
 //
 void Pyramid(const Matrix &m, const Vector &top, const Vector &base0, const Vector &base1, Color color, Color specular)
 {
   Vector verts[5];
   verts[0].Set(base0.x, base0.y, base0.z);
   verts[1].Set(base0.x, base1.y, base0.z);
   verts[2].Set(base1.x, base1.y, base1.z);
   verts[3].Set(base1.x, base0.y, base1.z);
   verts[4].Set(top.x, top.y, top.z);
   Pyramid(m, verts, color, specular);
 }
Esempio n. 3
0
Shred::Shred(const int shred_x, const int shred_y,
        const long longi, const long lati)
    :
        longitude(longi), latitude(lati),
        shredX(shred_x), shredY(shred_y),
        type(),
        activeListAll(),
        activeListFrequent(),
        shiningList(),
        fallList(),
        weather(WEATHER_CLEAR)
{
    if ( LoadShred() ) return; // successfull loading
    // new shred generation:
    Block * const null_stone = Normal(NULLSTONE);
    Block * const air  = Normal(AIR);
    Block * const sky  = Normal(SKY);
    Block * const star = Normal(STAR);
    SetAllLightMapNull();
    for (int i=0; i<SHRED_WIDTH; ++i)
    for (int j=0; j<SHRED_WIDTH; ++j) {
        PutBlock(null_stone, i, j, 0);
        for (int k=1; k<HEIGHT-1; ++k) {
            PutBlock(air, i, j, k);
        }
        PutBlock(((qrand()%5) ? sky : star), i, j, HEIGHT-1);
    }
    switch ( type = static_cast<shred_type>
            (GetWorld()->GetMap()->TypeOfShred(longi, lati)) )
    {
    case SHRED_WASTE:     WasteShred(); break;
    case SHRED_WATER:     Water();      break;
    case SHRED_PLAIN:     Plain();      break;
    case SHRED_MOUNTAIN:  Mountain();   break;
    case SHRED_DESERT:    Desert();     break;
    case SHRED_HILL:      Hill(false);  break;
    case SHRED_DEAD_HILL: Hill(true);   break;
    case SHRED_FOREST:      Forest(false); break;
    case SHRED_DEAD_FOREST: Forest(true);  break;
    case SHRED_NULLMOUNTAIN: NullMountain(); break;
    case SHRED_TESTSHRED: TestShred();  break;
    case SHRED_PYRAMID:   Pyramid();    break;
    case SHRED_CASTLE:    Castle();     break;
    case SHRED_CHAOS:     ChaosShred(); break;
    case SHRED_EMPTY: break;
    case SHRED_ACID_LAKE: Water(ACID ); break;
    case SHRED_LAVA_LAKE: Water(STONE); break;
    case SHRED_CRATER:    Water(AIR);   break;
    case SHRED_NORMAL_UNDERGROUND: NormalUnderground(); break;
    }
} // Shred::Shred(int shred_x, shred_y, long longi, lati, Shred * mem)
HRESULT CPatternMatch::PatternMatch(BYTE *pImage, int nImgRows, int nImgCols, double fImgScanSize,
								 BYTE *pPattern, int nPtnRows, int nPtnCols, double fPtnScanSize,
								 UINT nDataType,
								 double *px, double *py, double *pCoef)
{
	*px=nImgCols/2;
	*py=nImgRows/2;
	//�ز�����ģ��
	BYTE* pNewPattern=NULL;
	int nNewPtnRows,nNewPtnCols;
	Resample(pPattern,nPtnRows,nPtnCols,nDataType,fPtnScanSize,fImgScanSize,&pNewPattern,&nNewPtnRows,&nNewPtnCols);

	//�������
	int nX0,nY0,nHeight,nWidth;
	//ƥ����
	double X,Y,Coef;
	BOOL bMatched=FALSE;
	int nImgPydRowsPre=0,nImgPydColsPre=0;
	
	//
	int nLevel = 0;
	for(int pl=PYRAMIDLAYER;pl>=1;pl--)
	{
		nLevel = (int)pow(2,pl-1);
		BYTE* pImgPyd=NULL;
		int nImgPydRows=0,nImgPydCols=0;
		Pyramid(pImage,
				nImgRows,nImgCols,
				nDataType,
				nLevel,
				&pImgPyd,&nImgPydRows,&nImgPydCols);
		
		BYTE* pPtnPyd=NULL;
		int nPtnPydRows=0,nPtnPydCols=0;
		Pyramid(pNewPattern,
				nNewPtnRows,nNewPtnCols,
				nDataType,
				nLevel,
				&pPtnPyd,&nPtnPydRows,&nPtnPydCols);

		if(bMatched==FALSE)
		{
			nX0=nPtnPydCols/2;
			nY0=nPtnPydRows/2;
			nHeight=nImgPydRows-nPtnPydRows/2;
			nWidth=nImgPydCols-nPtnPydCols/2;
		}
		else
		{
			nX0=(int)(X*(double)nImgPydCols/(double)nImgPydColsPre+0.5)-10;
			nY0=(int)(Y*(double)nImgPydRows/(double)nImgPydRowsPre+0.5)-10;
			nHeight=21;
			nWidth=21;
		}

		bMatched=FALSE;
		if(Match(pImgPyd,nImgPydRows,nImgPydCols,
			pPtnPyd,nPtnPydRows,nPtnPydCols,
			nDataType,
			nX0,nY0,nHeight,nWidth,
			&X,&Y,&Coef,
			pl==1?TRUE:FALSE)==TRUE)
		{
			bMatched=TRUE;

			nImgPydRowsPre=nImgPydRows;
			nImgPydColsPre=nImgPydCols;
		}

		delete [] pImgPyd; pImgPyd=NULL;
		delete [] pPtnPyd; pPtnPyd=NULL;

		//��������ϲ�������ϲ���ƥ�䵽ͬ��㣬�򷵻�֮����ֹ��������²�ƥ���˷�ʱ��
		if(bMatched==FALSE)
		{
			break;
		}
	}

	delete [] pNewPattern; pNewPattern=NULL;

	*px=X;
	*py=Y;
	*pCoef=Coef;

	return bMatched==TRUE?S_OK:S_FALSE;
}
Esempio n. 5
0
/*********************************************************
**  Static Features
*
*   Retorna un vector Feature en el siguiente orden:
*                                   -[0] Intensidad,
*                                   -[1] Orientacion 0,
*                                   -[2] Orientacion 45,
*                                   -[3] Orientacion 90,
*                                   -[4] Orientacion 135,
*                                   -[5] color RG
*                                   -[6] color RC,
*                                   -[7] color BY,
*                                   -[8] color BM.
*
*   Feature es un vector de Mat de diferentes dimensiones,
*   resultantes de la operancion centro-alrededor
*
**********************************************************/
vector<Feature> staticFeatures(Mat red, Mat green, Mat blue){
//- Definicion de variables principales
    Multiscale redGauss, greenGauss, blueGauss,
                 colorGab0,
                colorGab45,
                colorGab90,
               colorGab135,
             rgGssP,rgGssN,
             rcGssP,rcGssN,
             byGssP,byGssN,
             gmGssP,gmGssN;
    Multiscale intensityGauss,
                   rdGrnGauss;
    Feature      intensity,
                   colorRG,
                   colorRC,
                   colorBY,
                   colorGM,
              orientation0,
             orientation45,
             orientation90,
            orientation135;
    Mat       averageColor;
    vector<Feature> stcFeactures;
    uint i;

//- Piramide Gauss y Gabbor
      redGauss = Pyramid(     red,krnGauss);
    greenGauss = Pyramid(   green,krnGauss);
     blueGauss = Pyramid(    blue,krnGauss);
    rdGrnGauss = Pyramid(red-blue,krnGauss);

    averageColor = red+green+blue;

    colorGab0   = Pyramid(averageColor,krnGabbor_0  );
    colorGab45  = Pyramid(averageColor,krnGabbor_45 );
    colorGab90  = Pyramid(averageColor,krnGabbor_90 );
    colorGab135 = Pyramid(averageColor,krnGabbor_135);

//- Intensidad
    for (i=0;i<8;i++)
        intensityGauss.push_back( redGauss[i]+greenGauss[i]+blueGauss[i] );

    intensity = centerSurround(intensityGauss,intensityGauss);
    stcFeactures.push_back(intensity);

//- Orientacion
    orientation0   = centerSurround(colorGab0  ,colorGab0  );
    orientation45  = centerSurround(colorGab45 ,colorGab45 );
    orientation90  = centerSurround(colorGab90 ,colorGab90 );
    orientation135 = centerSurround(colorGab135,colorGab135);

    stcFeactures.push_back(orientation0  );
    stcFeactures.push_back(orientation45 );
    stcFeactures.push_back(orientation90 );
    stcFeactures.push_back(orientation135);

//- Color
    for (i=0;i<8;i++){
        rgGssP.push_back(0.75*(redGauss[i]-greenGauss[i]) );
        rcGssP.push_back( 0.5*(5*redGauss[i]-greenGauss[i]-rdGrnGauss[i]) -   2*blueGauss[i] );
        byGssP.push_back(   2*blueGauss[i] - redGauss[i] - greenGauss[i]  + 0.5*rdGrnGauss[i]);
        gmGssP.push_back( 0.5*(5*greenGauss[i]-rdGrnGauss[i]-redGauss[i]) -   2*blueGauss[i] );

        rgGssN.push_back(-rgGssP[i]);
        rcGssN.push_back(-rcGssP[i]);
        byGssN.push_back(-byGssP[i]);
        gmGssN.push_back(-gmGssP[i]);
    }

    colorRG = centerSurround(rgGssP,rgGssN);
    colorRC = centerSurround(rcGssP,rcGssN);
    colorBY = centerSurround(byGssP,byGssN);
    colorGM = centerSurround(gmGssP,gmGssN);

    stcFeactures.push_back(colorRG);
    stcFeactures.push_back(colorRC);
    stcFeactures.push_back(colorBY);
    stcFeactures.push_back(colorGM);

    return stcFeactures;
}