Exemplo n.º 1
0
Mat LRTV::compute()
{
  int max_iter = 30;
  for(int iter = 0; iter < max_iter; ++iter)
    {
      cout << "=====================" << endl;
      cout << "Iter = " << (iter + 1) << endl;
      
      sub_1();
      sub_2();
      sub_3();

      // when to stop needs further consideration
      if( iter >= 5 && norm(U_, U_last_) / norm(U_last_) < 1.5e-3 )
	{
	  break;
	}
      cout << "relative error = " << 1.0* norm(U_, U_last_) / norm(U_last_) << endl;
      U_.copyTo(U_last_);

      
      cout << "PSNR = " << PSNR(I_, U_, mask_) << endl;
      cout << endl;
      
    }

  return U_;
}
void ImageDisplayer::on_actionIn_verse_8_8_blocks_triggered()
{
  QElapsedTimer timer;
  timer.start();
  M88iDCT=img88Inverse_DCT(M88DCT,mtx.rows,mtx.cols,0);
  int et=timer.elapsed();
  double mypsnr=myPSNR(mtx,M88iDCT);
  double psnr=PSNR(mtx,M88iDCT);
  IplImage* imgQ=new IplImage(M88iDCT);
  QImage qimg=IplImage2QImage(imgQ);
  imageLabel->setPixmap(QPixmap::fromImage(qimg));

  QString time=QString::number(et,10);
  QString st("Inverse 2DDCT on 8*8 blocks finished!\n");
  st.append("Time Elapsed:");
  st.append(time);
  st.append(" ms\n");
  st.append("myPSNR:");
  st.append(QString::number(mypsnr));
  st.append("\ncvPSNR:");
  st.append(QString::number(psnr));
  QMessageBox finish(this);
  finish.setText(st);
  finish.exec();
}
void ImageDisplayer::Inverse_2D_blocks_DCT(int coefficient)
{
  QElapsedTimer timer;
  timer.start();
  M88iDCT=img88Inverse_DCT(M88DCT,mtx.rows,mtx.cols,coefficient);
  int et=timer.elapsed();
  double mypsnr=myPSNR(mtx,M88iDCT);
  double psnr=PSNR(mtx,M88iDCT);
  IplImage* imgQ=new IplImage(M88iDCT);
  ImageBlocks=QImage(IplImage2QImage(imgQ));

  QString time=QString::number(et,10);
  QString st("Coefficient used:");
  if(coefficient==0)
    st.append("All");
  else
    {
      st.append("1/");
      st.append(QString::number(coefficient));
    }
  st.append("\n\nInverse Evaluation:\n");
  st.append("Inverse Time Elapsed:");
  st.append(time);
  st.append(" ms\n");
  st.append("myPSNR:");
  st.append(QString::number(mypsnr));
  st.append("\ncvPSNR:");
  st.append(QString::number(psnr));
  st.append("\n");
  Evaluation2Dblocks=st;
}
Exemplo n.º 4
0
void test8uc3(bool show=false)
{
	Mat src = imread("image.png");
	Mat noise;
	Mat dest;
	int64 pre;

	float sigma = 15;
	cout<<"color"<<endl;
	cout<<"sigma: "<<sigma<<endl;

	cout<<"RAW: "<<endl;
	addNoise(src,noise,sigma);
	cout<<PSNR(src,noise)<<"dB"<<endl;
	cout<<endl;

	cout<<"NML opencv: "<<endl;
	pre = getTickCount();
	fastNlMeansDenoisingColored(noise,dest,sigma,sigma,3,7);
	cout<<(getTickCount()-pre)/(getTickFrequency())*1000<<"ms"<<endl;
	cout<<PSNR(src,dest)<<"dB"<<endl;
	cout<<endl;

	cout<<"NML base: "<<endl;
	pre = getTickCount();
	nonLocalMeansFilterBase(noise,dest,3,7,2*sigma);
	cout<<(getTickCount()-pre)/(getTickFrequency())*1000<<"ms"<<endl;
	cout<<PSNR(src,dest)<<"dB"<<endl;
	cout<<endl;

	cout<<"NML sse4: "<<endl;
	pre = getTickCount();
	nonLocalMeansFilter(noise,dest,3,7,2*sigma);
	cout<<(getTickCount()-pre)/(getTickFrequency())*1000<<"ms"<<endl;
	cout<<PSNR(src,dest)<<"dB"<<endl;
	cout<<endl;

	if(show)
	{
		imshow("noise",noise);
		imshow("NLM",dest);
		waitKey();
	}
}