Exemplo n.º 1
0
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;
        }