⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 console_lib.cpp

📁 algorithm to resize an image
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		bmpsaver.save("y.bmp",img2);						
				
		

			
		
//		free(inDataDev);
//		free(idsDataDev);
		
/*

  
  ///////////    TESTING  //////////////////////////
  minerror=100.0;
  

scalingFactor=bestfact;
KNearNeighbor=bestK;
//    for( scalingFactor=minScale;scalingFactor<=maxScale && scalingFactor>0;scalingFactor+=1)
		  // for( scalingFactor=minScale;scalingFactor<=maxScale && scalingFactor>0;scalingFactor+=1)
		  
		{

			

		lti::point fact=lti::point(scalingFactor,scalingFactor);

		// a gaussian kernel to use before the downsampling
		lti::gaussKernel2D <lti::channel::value_type> gkernel(scalingFactor,scalingFactor*10);

		 param.setKernel(gkernel);  // use the gaussian kernel
		 param.factor=fact;
   
		 downsampler.setParameters(param);  // use the given parameters
		 const int step=scalingFactor;
		 
		 int xDim= (330%scalingFactor==0?330/scalingFactor:330/scalingFactor+1);
		int yDim= (110%scalingFactor==0?110/scalingFactor:110/scalingFactor+1);
		const int featureNum=xDim*yDim;
		
		double *inDataTrain=new double[(endTrain-beginTrain+1)*30*(xDim*yDim)];
		
		int *idsDataTrain=new int[(endTrain-beginTrain+1)*30]; // and the respective ids

		double *inDataTest =new double[(endTest-beginTest+1)*30*(xDim*yDim)];
		
		int *idsDataTest =new int[(endTest-beginTest+1)*30]; // and the respective ids

		int indexer=0;

		int r,g,b;

	int COGy,COGx,xOffset,yOffset;
		int newCOGx=xDim/2;
		int newCOGy=yDim/2;
		
		LOG<<std::cout<<"Start Reading Images for TESTING... "<<std::endl;
		
		 	
		

		for(int count=beginTrain;count<=endTrain;count++)
		{
			char buff[16];


			if(count<10)
				sprintf(buff,"00000%i",count);
			else if(count<100)
				sprintf(buff,"0000%i",count);
			else if(count<1000)
				sprintf(buff,"000%i",count);



				for(int cIndex=0 ;cIndex<30;cIndex++)
				{
					filenameInput="";
					filenameOutput="r";

					filenameInput.append(buff);
					filenameInput.append("_");
					

				filenameInput.append(c[cIndex].name);
				filenameInput.append(".bmp");
				std::cout<<std::endl<<"Train:  Loading File: "<<filenameInput<<" ..."<<std::endl; 
				//std::endl<<"Loading File: "<<filenameInput<<" ..."<<std::endl; 

				if(	!bmploader.load(filenameInput,img))
				{
					
					std::cout<<std::endl<<"****Non Existing File: "<<filenameInput<<" ..."<<std::endl; 
					continue;
				}
				else
				{
					lti::channel8 mask,downmask;
					segmenter.apply(img,mask);     // get a mask to differentiate background
															// and object.
				    char buffnum[16];
					sprintf(buffnum,"000%i",scalingFactor);
					
					
					filenameOutput.append(buffnum);
					filenameOutput.append(filenameInput);
					
				

						std::cout<<"Downsampling..."<<std::endl;
					downsampler.apply(mask,downmask);
					//view1.show(downmask);
					//int t;
					//std::cin>>t;
					//bmpsaver.save("my.bmp",downmask);


				

						
				
					
					lti::areaPoints ap;
						ap.getFromMask(downmask);
						
						lti::dvector dv;

						//due to the source code it needs to define the outer boundary to assume all points for calculations
						lti::geometricFeatures::parameters param;
						
						param.boundaryDefinition= lti::geometricFeatures::parameters::eBoundaryDefinition::OuterBoundary;
						lti::geometricFeatures gf(param);
						gf.apply(ap,dv);
						COGy=int(dv.at(3));
						COGx=int(dv.at(2));
					
						//Calculated above before
					//	int oldCOGx=xDim/2;
					//	int oldCOGy=yDim/2;

						xOffset=newCOGx-COGx;
						yOffset=newCOGy-COGy;
						
						
						lti::channel8 normalImg=lti::channel8(yDim,xDim,(lti::ubyte)0);
						int i,j;
						for(j=0;j<yDim;j++)
						for( i=0;i<xDim;i++)
						{
							if((j+yOffset>=0)&& (i+xOffset>=0) && (i+xOffset<xDim) && (j+yOffset<yDim))
								normalImg[j+yOffset][i+xOffset]=downmask[j][i];
						}
						//bmpsaver.save("my.bmp",normalImg);
						


				

						
				

						std::cout<<"Adding read image to the input vector..."<<std::endl;
					
				for(j=0;j<yDim;j++)
						for(i=0;i<xDim;i++)
						{
							
						inDataTrain[indexer*(yDim*xDim)+ j*xDim+i]=normalImg[j][i];
							
						}

					
						

					

						

					idsDataTrain[indexer]=cIndex;
						indexer++;
				}

			

				}//end looping on city names
			
		}//end for looping on image numbers

		const  trainNum=indexer;
	lti::dmatrix inTrain(trainNum,xDim*yDim,inDataTrain);          // training vectors    
		
    lti::ivector idsTrain(trainNum,idsDataTrain);

indexer=0;
		for( count=beginTest;count<=endTest;count++)
		{
			char buff[16];


			if(count<10)
				sprintf(buff,"00000%i",count);
			else if(count<100)
				sprintf(buff,"0000%i",count);
			else if(count<1000)
				sprintf(buff,"000%i",count);



			
			
				for(int cIndex=0 ;cIndex<30;cIndex++)
				{
					
					filenameInput="";
					filenameOutput="r";
					filenameInput.append(buff);
					filenameInput.append("_");
					

				filenameInput.append(c[cIndex].name);
				filenameInput.append(".bmp");
				std::cout<<std::endl<<"Test: Loading File: "<<filenameInput<<" ..."<<std::endl; 
				

				if(	!bmploader.load(filenameInput,img))
				{
					//LOG<<std::endl<<"****Non Existing File: "<<filenameInput<<" ..."<<std::endl; 
					std::cout<<std::endl<<"****Non Existing File: "<<filenameInput<<" ..."<<std::endl; 
					continue;
				}
				else
				{
					lti::channel8 mask,downmask;
					segmenter.apply(img,mask);     // get a mask to differentiate background
															// and object.
				    char buffnum[16];
					sprintf(buffnum,"000%i",scalingFactor);
					
					
					filenameOutput.append(buffnum);
					filenameOutput.append(filenameInput);
				//	bmpsaver.save(filenameOutput,mask);
				

						std::cout<<"Downsampling..."<<std::endl;
					downsampler.apply(mask,downmask);
				

						
					
					
					lti::areaPoints ap;
						ap.getFromMask(downmask);
						
						lti::dvector dv;

						//due to the source code it needs to define the outer boundary to assume all points for calculations
						lti::geometricFeatures::parameters param;
						
						param.boundaryDefinition= lti::geometricFeatures::parameters::eBoundaryDefinition::OuterBoundary;
						lti::geometricFeatures gf(param);
						gf.apply(ap,dv);
						COGy=int(dv.at(3));
						COGx=int(dv.at(2));
					
						//Calculated above before
					//	int oldCOGx=xDim/2;
					//	int oldCOGy=yDim/2;

						xOffset=newCOGx-COGx;
						yOffset=newCOGy-COGy;
						
						
						lti::channel8 normalImg=lti::channel8(yDim,xDim,(lti::ubyte)0);
						int i,j;
						for(j=0;j<yDim;j++)
						for( i=0;i<xDim;i++)
						{
							if((j+yOffset>=0)&& (i+xOffset>=0) && (i+xOffset<xDim) && (j+yOffset<yDim))
								normalImg[j+yOffset][i+xOffset]=downmask[j][i];
						}
						//bmpsaver.save("my.bmp",normalImg);
						


				

						
				

						std::cout<<"Adding read image to the input vector..."<<std::endl;
					
				for(j=0;j<yDim;j++)
						for(i=0;i<xDim;i++)
						{
							
						inDataTest[indexer*(yDim*xDim)+ j*xDim+i]=normalImg[j][i];
							
						}

					
						
					idsDataTest[indexer]=cIndex;
						indexer++;
				}

			

				}//end looping on city names
			
		}//end for looping on image numbers

const int TestNum=indexer;
	   
			


lti::dmatrix inTest(TestNum,xDim*yDim,inDataTest);          // training vectors    

    lti::ivector idsTest(TestNum,idsDataTest);



	
	const int ClassNum=30;
	lti::dvector mean[ClassNum];
	lti::dvector var[ClassNum];
	lti::dvector covar[ClassNum];
	//lti::dmatrix  covar[ClassNum];
	

	for(int cNum=0;cNum<ClassNum;cNum++)
	{	
		
		for(int fNum=0;fNum<featureNum;fNum++)
		{
			mean[cNum].resize(featureNum,0);
			//claaculate expectation
			mean[cNum][fNum]=0;
			for(int tNum=cNum;tNum<trainNum;tNum+=ClassNum)
				mean[cNum][fNum]+=inTrain[tNum][fNum];
			mean[cNum][fNum]/=(trainNum/ClassNum);
		}
			//calculate Variance
		covar[cNum].resize(featureNum,0);
			
		//for(int tNum=cNum;tNum<trainNum;tNum+=ClassNum)
		//	for(int m=0;m<featureNum;m++)
		//		for(int n=0;n<featureNum;n++)
		//			covar[cNum][m][n]+=((inTrain[tNum][m]-mean[cNum][m])*(inTrain[tNum][n]-mean[cNum][n]));

		
		    for(int m=0;m<featureNum;m++)
			{
				for(int tNum=cNum;tNum<trainNum;tNum+=ClassNum)
					covar[cNum][m]+=((inTrain[tNum][m]-mean[cNum][m])*(inTrain[tNum][m]-mean[cNum][m]));
					covar[cNum][m]/=(trainNum/ClassNum);
			}

		//for(int m=0;m<featureNum;m++)
		//	for(int n=0;n<featureNum;n++)
		//		covar[cNum][m][n]/=(trainNum/ClassNum);

	}

	lti::classifier::outputVector outv(ClassNum); // here we will get some
				
					

				std::cout <<std::endl<<  "Dev Results: "<<  std::endl;

				int i,id;
				int error=0;
	
			
	  
				
				
				
					for (i=0;i<inTest.rows();++i)
					{
						
					for(int cNum=0;cNum<ClassNum;cNum++)
			{
			
				double temp=1;
				
					
				double p=1;
				//lti::dvector m=mean[cNum];
				//lti::dvector c=covar[cNum];

				//lti::gaussian<double> g=lti::gaussian<double>(mean[cNum],covar[cNum]);
				for(int m=0;m<featureNum;m++)
				{
				lti::gaussian<double> g=lti::gaussian<double>(mean[cNum][m],covar[cNum][m]);
				
 					g.apply(inTest.getRow(i).at(m),p);
					temp*=p;
				}
				
				
				
				
				

				outv.setValueByPosition(cNum,temp);
			}

					//outv.getId(outv.getWinnerUnit(),id);
			id=outv.maxPosition();
      
						
						LOG<< "Input : "<<beginTest+i/30<<"_"<<c[i%30].name<<"\tOutput: "<<c[id].name;
						if (id != idsTest.at(i)) 
						{
							error++;
							LOG<<  " - should be: " << c[idsTest.at(i)].name;
						}
					
					//	LOG<<  std::endl<<"Resized Image : "<<std::endl;
					//	for(int j=0;j<yDim*xDim;j++)
					//	  {
					//		  if(j%xDim==0)LOG<<"\r\n";
					//		LOG<<  inTest[i][j] ;
					//	 }

						  
					LOG<<  std::endl<<std::endl;	  
					}	  
				
      
					
				
				LOG<<"******ScalingFactor: "<<scalingFactor<<" ****** xDim: "<<xDim<<" yDim: "<<yDim<<"***"<<std::endl;
				LOG<<std::endl<<"Error Percent :"<<(((double)error)*100)/i<<  std::endl;
				std::cout<<std::endl<<"Error Percent :"<<(((double)error)*100)/i<<  std::endl;


				if(minerror>=(((double)error)*100)/i)
				{
					minerror=(((double)error)*100)/i;
					bestfact=scalingFactor;
					bestthresh=thresh;
					bestK=KNearNeighbor;
				
				}
				LOG<<"----------------------------\nTesting******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" ***xDim: "<<xDim<<" yDim: "<<yDim<<"*** Best K: "<<bestK<<std::endl;
				std::cout<<"----------------------------\nTesting******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" ***xDim: "<<xDim<<" yDim: "<<yDim<<"*** Best K: "<<bestK<<std::endl;


			
		free(idsDataTrain);
		free(inDataTrain);
		free(inDataTest);
		free(idsDataTest);
				}//end for looping on scaling factor
		
		

*/


//	view2.show(img2);
//int q;
//	std::cin>>q;
 bmpsaver.save("d.bmp",img2);

		std::cout << "Finished!" << std::endl;
		LOG<< "Finished!" << std::endl;

		LOG<<"----------------------------\nFinal******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" Best K: "<<bestK<<std::endl;
		std::cout<<"----------------------------\nFinal******Min Error : "<<minerror<<" Scaling Factor: "<<bestfact<<" Best K: "<<bestK<<std::endl;
	
	LOG.close();
	free(idsDataTrain);
		free(inDataTrain);
	
  }
  }
}  catch (lti::exception& exp) {
    std::cout << "An LTI::EXCEPTION was thrown: ";
    std::cout << exp.what() << std::endl;
  }
  catch (std::exception& exp) {
    std::cout << "std::exception was thrown: ";
    std::cout << exp.what() << std::endl;
  }
  catch (...) {
    std::cout << "Unknown exception thrown!" << std::endl;
  }
  
  return 0;
} // main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -