void BackgroundInitializationModule::blockClassification(int imgWidth, int imgHeight) { uchar *ptr_currRepresentation = this->currRepresentation.data, *ptr_prevRepresentation = this->prevRepresentation.data; int step = this->currRepresentation.step, pos; double corrCoeffVal; cv::Mat blockBg, blockImg; for(int j = 0; j < imgHeight/sizeBlock; j ++) { for(int i = 0; i < imgWidth/sizeBlock; i++) { pos = i + j*step; if( ptr_prevRepresentation[pos] == UNDEFINED && ptr_currRepresentation[pos] == MOVING ) { ptr_currRepresentation[pos] = UNDEFINED; } else //it can be update so it needs the second type classification { blockImg = currentFrameC3(cv::Range(j*sizeBlock, (j+1)*sizeBlock), cv::Range(i*sizeBlock , (i+1)*sizeBlock) ) ; blockBg = background(cv::Range(j*sizeBlock, (j+1)*sizeBlock), cv::Range(i*sizeBlock , (i+1)*sizeBlock) ) ; corrCoeffVal = corrCoeff( blockImg.data, blockBg.data ); //segun el coeficiente y la representacion previa, clasificarlo en alguna de las 4 segundas classes if( ptr_currRepresentation[pos] == STATIC) { if(corrCoeffVal > thresholdCorrelation ) { ptr_currRepresentation[pos] = BACKGROUND; } else //STILL_OBJ { if( isStillObj (ptr_prevRepresentation[pos]) ) { //use the matrix representation to count the number of frame classificated as still ptr_currRepresentation[pos] = (ptr_prevRepresentation[pos] + 1 > STILL_OBJ + thresholdStill)? STILL_OBJ + thresholdStill: ptr_prevRepresentation[pos] + 1 ; } else { ptr_currRepresentation[pos] = STILL_OBJ; } } } else //MOVING { if(corrCoeffVal < thresholdCorrelation ) { //MOVING_OBJ if( isMovingObj(ptr_prevRepresentation[pos]) ) { ptr_currRepresentation[pos] = (ptr_prevRepresentation[pos] + 1 > MOVING_OBJ + 1)? MOVING_OBJ + 1: ptr_prevRepresentation[pos] + 1 ; } else { ptr_currRepresentation[pos] = MOVING_OBJ; } } else { ptr_currRepresentation[pos] = ILLUM_CHANGE; } } } } } }
int main(int argc, char *argv[]) { Foam::timeSelector::addOptions(); # include "addRegionOption.H" Foam::argList::addBoolOption ( "noWrite", "suppress writing results" ); #include "addDictOption.H" #include "setRootCase.H" #include "createTime.H" Foam::instantList timeDirs = Foam::timeSelector::select0(runTime, args); #include "createNamedMesh.H" #include "createFields.H" #include "readGravitationalAcceleration.H" //- Parallel computation int me; me = Pstream::myProcNo(); // Post-processing dictionary #include "postProcessingDict.H" // Create box filters //boxFilter lesFilters(mesh,false); autoPtr<constructFilter> lesFilters ( constructFilter::New(mesh,postProcessingDict) ); // Define convolution kernel convolution convKernel(mesh,lesFilters,readFilteredVars); //convolution convKernel(mesh,fooFilter,readFilteredVars); // Create correlation coefficient class correlationCoeff corrCoeff(mesh); // Create conditional averaging class conditionalAve condAve(postProcessingDict,conditionalAveragingDict, mesh,nVariable,nAveragingVariable,nTotalCase,conditionalAveraging); // Create multiple variable conditional averaging class multipleVarsConditionalAve multipleVarsCondAve(postProcessingDict,multConditionalAveragingDict, mesh,multNVariable,multNAveragingVariable,multNTotalCase,multConditionalAveraging); // Create three variable conditional averaging class threeVarsConditionalAve threeVarsCondAve(postProcessingDict,threeConditionalAveragingDict, mesh,threeNVariable,threeNAveragingVariable,threeNTotalCase,threeConditionalAveraging); // Create particle drag model class autoPtr<dragModelPost> dragF ( dragModelPost::New(postProcessingDict,mesh) ); Info << "Particle drag model class was created" << endl; // Create particle resolved drag model class autoPtr<dragModelPost> resolvedDragF ( dragModelPost::New(postProcessingDict,mesh) ); Info << "Particle resolved drag model class was created" << endl; // Create Eulerian drag model class autoPtr<dragModelPost> dragFEulerian ( dragModelPost::New(postProcessingDict,mesh) ); Info << "Eulerian drag model class was created" << endl; // Create Eulerian resolved drag model class autoPtr<dragModelPost> resolvedDragFEulerian ( dragModelPost::New(postProcessingDict,mesh) ); Info << "Eulerian resolved drag model class was created" << endl; autoPtr<dragModelPost> dragFParcel; //- Open cpus boundary file std::ifstream inputPtrCPUS; inputPtrCPUS.open("../DEM/in.cpusPost"); int ncpus; if (me == 0) { inputPtrCPUS >> ncpus; Info << "\nOpening ../DEM/in.cpus, nCpus = " << ncpus << endl; }