/* 提取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]); } }
// // 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); }
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; }
/********************************************************* ** 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; }