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; }
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(); } }