void OpenCVPicture::colorDistortion(RNG &rng, int sigma1, int sigma2,
                                    int sigma3, int sigma4) {
  // Call as a final preprocessing step, after any affine transforms and
  // jiggling.
  assert(mat.type() % 8 == 5); // float
  std::vector<float> delta1(mat.channels());
  std::vector<float> delta2(mat.channels());
  std::vector<float> delta3(mat.channels());
  std::vector<float> delta4(mat.channels());
  for (int j = 0; j < mat.channels(); j++) {
    delta1[j] = rng.normal(0, sigma1);
    delta2[j] = rng.normal(0, sigma2);
    delta3[j] = rng.normal(0, sigma3);
    delta4[j] = rng.normal(0, sigma4);
  }
  float *matData = ((float *)(mat.data));
  for (int y = 0; y < mat.rows; y++) {
    for (int x = 0; x < mat.cols; x++) {
      int j = x * mat.channels() + y * mat.channels() * mat.cols;
      bool interestingPixel = false;
      for (int i = 0; i < mat.channels(); i++)
        if (std::abs(matData[i + j] - backgroundColor) > 2)
          interestingPixel = true;
      if (interestingPixel) {
        for (int i = 0; i < mat.channels(); i++)
          matData[i + j] +=
              delta1[i] + delta2[i] * (matData[i + j] - backgroundColor) +
              delta3[i] * (x - mat.cols / 2) + delta4[i] * (y - mat.rows / 2);
      }
    }
  }
}
示例#2
0
main(int argc, char* argv[]){ 
    static vec u(K+1);
    int k,n;
    std::string op=argv[1]; // command line argument
	val dx=1.0/K, dt=T/N, dx4=dx*dx*dx*dx, xk, tn; // discretization variables

    // Initialize
    for(k=0;k<=K;k++){
        xk=k*dx;
        u(k)=f(xk);
    }
    if(op=="plot") printf("set terminal x11 noraise\nset yrange [-5:5]\nset style data lines\n\n");

    val rho=NU*dt/dx4;    // rho = nu*dt/dx^4
    vec temp(K+1);
    temp=u;

    for(n=0;n<=N;n++){
		tn=n*dt;
        u=temp;
        for(k=0;k<=K;k++){   
            xk=k*dx;
            temp(k) = u(k) - rho*delta4(u,k);    
            //printu(u,tn,xk,K);
        }
        if(op=="plot0") plot0(u, tn, K-1, N);
        if(op=="plot1") plot1(u, tn, K-1, N);
        if(op=="plot3d") plot3d(u, tn, K-1, N);
        if(op=="approx") output(tn, 0.5, u(K/2), K-1, N);
    }

    return 0;
}
void distortImageColor(cv::Mat& mat, RNG& rng, float sigma1, float sigma2, float sigma3, float sigma4) {
  std::vector<float> delta1(mat.channels());
  std::vector<float> delta2(mat.channels());
  std::vector<float> delta3(mat.channels());
  std::vector<float> delta4(mat.channels());
  for (int j=0;j<mat.channels();j++) {
    delta1[j]=rng.normal(0,sigma1);
    delta2[j]=rng.normal(0,sigma2);
    delta3[j]=rng.normal(0,sigma3);
    delta4[j]=rng.normal(0,sigma4);
  }
  int j=0;
  for (int y=0;y<mat.rows;++y) {
    for (int x=0;x<mat.cols;++x) {
      for (int i=0;i<mat.channels();++i) {
        mat.ptr()[j]=std::max(0,std::min(255,
                                         (int)(mat.ptr()[j]+
                                               delta1[i]+
                                               delta2[i]*cos(mat.ptr()[j]*3.1415926535/255)+
                                               delta3[i]*(x-mat.cols/2)+
                                               delta4[i]*(y-mat.rows/2))));
        ++j;
      }
    }
  }
}
示例#4
0
int main(){
	static vec u(K+1), un(K+1);
	val dt = T/N;
	val dx = 1.0/K;
	val gam = MU*dt/(dx*dx);
	val rho = NU*dt/(dx*dx*dx*dx);
	val ar = dt/(2*dx);
	int j,n=1;

	//Initialize U
	for (j=0;j<K+1;j++) u(j)=f(j*dx);
    //printf("Initial vector\n"); vecprintf(u,K);

	val tn = n*dt;
	while (tn<=T||n<N){
		for (j=0;j<K+1;j++) un(j) = u(j) - gam*delta2(u,j) - rho*delta4(u,j) - ar*u(j)*delta0(u,j);
		for (j=0;j<K+1;j++) u(j) = un(j);
		n+=1;
		tn = n*dt;
	}
	printf("At t = 0.25 and space 0.5 the 'heat' is %24.15e\n", u(K/2)); 
	return 0;
}