diff --git a/app/Operations/DPCM.cpp b/app/Operations/DPCM.cpp index 6f35ccc4b4c23327191f7944153e0587b963c72e..caf889f88bd95537194f0c0fae8f27d6c9b70ebc 100644 --- a/app/Operations/DPCM.cpp +++ b/app/Operations/DPCM.cpp @@ -46,13 +46,19 @@ DPCM::~DPCM() } -string DPCM::execute( const GrayscaleImage *im, Prediction prediction_alg, imagein::ImageDouble **quant_err_image, imagein::ImageDouble **new_err_image, Image **recons_image, Image **pred_image, double Q ) { +string DPCM::execute( const GrayscaleImage *im, Prediction prediction_alg, imagein::ImageDouble **quant_err_image, imagein::ImageDouble **err_image, Image **recons_image, Image **pred_image,ImageDouble **coding_err_image, double Q ) { char buffer[255], buffer2[255]; if( quantdef == NULL ) { throw "Error in DPCM::execute:\nquantdef = NULL"; } string returnval; - int imgHeight,imgWidth,pred,ier,ierq,ireco,icode; + int imgHeight,imgWidth; + int pred; + int pred_err; // prediction error + int quant_pred_err; // quantized prediction error + int reco; // reconstructed value + int code; // code + int coding_err; // erreur de codage float pi[512],piq[512],nbpt = 0; double h = 0.; @@ -66,16 +72,17 @@ string DPCM::execute( const GrayscaleImage *im, Prediction prediction_alg, image codlq(0); /* allocation mmoire pour l'image d'erreur de prdiction */ - ImageDouble *quantized_error_prediction_image = new ImageDouble(imgWidth, imgHeight, 1); - ImageDouble *new_error_prediction_image = new ImageDouble(imgWidth, imgHeight, 1); + ImageDouble *quantized_predction_error_image = new ImageDouble(imgWidth, imgHeight, 1); // renommer quantized_predction_error_image + ImageDouble *predction_error_image = new ImageDouble(imgWidth, imgHeight, 1); // renommer predction_error_image + ImageDouble *coding_error_image = new ImageDouble(imgWidth, imgHeight, 1); Image *reconstructed_image = new GrayscaleImage(*im); Image *prediction_image = new GrayscaleImage(*im); // Init the error images with 0 values for(int i=0; i < imgHeight; i++) { for(int j=0; j< imgWidth; j++) { - quantized_error_prediction_image->setPixelAt(j, i, 0); - new_error_prediction_image->setPixelAt(j, i, 0); + quantized_predction_error_image->setPixelAt(j, i, 0); + predction_error_image->setPixelAt(j, i, 0); } } @@ -138,29 +145,39 @@ string DPCM::execute( const GrayscaleImage *im, Prediction prediction_alg, image break; } - + //image de prediction pour affichage prediction_image->setPixelAt(j,i,pred); depth_default_t thePixel = reconstructed_image->getPixelAt(j, i); //erreur de prediction - ier = thePixel - pred; - new_error_prediction_image->setPixelAt(j, i, ier); + pred_err = thePixel - pred; + predction_error_image->setPixelAt(j, i, pred_err); /* proba associe a l'erreur de prediction */ + depth_default_t pixImg = im->getPixelAt(j, i); + //quantification erreur de prediction - ierq = quantdef->valueOf(ier); + quant_pred_err = quantdef->valueOf(pred_err); - codec(0, ierq, &icode, &ireco);//(QB) action ? on suppose codage/decodage sans perte : ireco = ierq + codec(0, quant_pred_err, &code, &reco);//action ? on suppose codage/decodage sans perte : reco = quant_pred_err - pi[ier+255]++; - piq[ierq+255]++; /* proba associe a l'erreur de prediction */ + pi[pred_err+255]++; + piq[quant_pred_err+255]++; /* proba associe a l'erreur de prediction */ nbpt++; - quantized_error_prediction_image->setPixelAt(j, i, ierq); + quantized_predction_error_image->setPixelAt(j, i, quant_pred_err); // valeur reconstruite - int tempvalue = pred + ireco; + + int tempvalue = pred + reco; + //int tempvalue = pred + quant_pred_err; // Crop the value in [0,255] reconstructed_image->setPixelAt(j, i, tempvalue > 255 ? 255 : tempvalue < 0 ? 0 : tempvalue); + depth_default_t reconstructedPix = reconstructed_image->getPixelAt(j, i); + //calcul de l'erreur de codage + coding_err = pixImg - reconstructedPix; + //construction de l'image d'erreur de codage + coding_error_image->setPixelAt(j,i,(coding_err)); + } } @@ -187,10 +204,11 @@ string DPCM::execute( const GrayscaleImage *im, Prediction prediction_alg, image returnval = returnval + print_iloiqu(); /* libration de la mmoire alloue */ - *quant_err_image = quantized_error_prediction_image; - *new_err_image = new_error_prediction_image; + *quant_err_image = quantized_predction_error_image; + *err_image = predction_error_image; *recons_image = reconstructed_image; *pred_image = prediction_image; + *coding_err_image = coding_error_image; return returnval; } diff --git a/app/Operations/DPCM.h b/app/Operations/DPCM.h index 4ac1125f66874fed43e2d001f7b29e29170427f9..3eddd3e78289ee76f8121e8e85a9316a30f12593 100644 --- a/app/Operations/DPCM.h +++ b/app/Operations/DPCM.h @@ -30,7 +30,7 @@ public: DPCM(); enum Prediction {PX_EQ_A, PX_EQ_B, PX_EQ_APC, PX_EQ_Q}; virtual ~DPCM(); - std::string execute(const imagein::GrayscaleImage *im, Prediction prediction_alg, imagein::ImageDouble **quant_err_image, imagein::ImageDouble **new_err_image, imagein::Image **recons_image, imagein::Image **pred_image,double Q = 0 ); + std::string execute(const imagein::GrayscaleImage *im, Prediction prediction_alg, imagein::ImageDouble **quant_err_image, imagein::ImageDouble **new_err_image, imagein::Image **recons_image, imagein::Image **pred_image, imagein::ImageDouble **coding_err_image, double Q = 0 ); void setQuantification( Quantification* tquantdef ); private: std::string print_iloiqu(); diff --git a/app/Operations/DPCMEncodingOp.cpp b/app/Operations/DPCMEncodingOp.cpp index 4a0f61ab915652b84c842042ed021e5689052695..df58d7b5c22ec133d982c2c474b4969ea2588943 100644 --- a/app/Operations/DPCMEncodingOp.cpp +++ b/app/Operations/DPCMEncodingOp.cpp @@ -59,10 +59,12 @@ void DPCMEncodingOp::operator()(const imagein::Image* img, const std::map<const Image *predictionImage; ImageDouble *quant_errorImage; ImageDouble *errorImage; - string s = micd.execute(image, dialog->getPrediction(), &quant_errorImage, &errorImage,&reconstructedImage, &predictionImage,dialog->getQ()); + ImageDouble *coding_error_image; + string s = micd.execute(image, dialog->getPrediction(), &quant_errorImage, &errorImage,&reconstructedImage, &predictionImage, &coding_error_image, dialog->getQ()); outText(s); - outDoubleImage(errorImage, qApp->translate("DPCM", "Error image").toStdString(), true, true, 0.1, false); - outDoubleImage(quant_errorImage, qApp->translate("DPCM", "Quantized error image").toStdString(), true, true, 0.1, false); + outDoubleImage(errorImage, qApp->translate("DPCM", "Prediction error image").toStdString(), true, true, 0.1, false); + outDoubleImage(quant_errorImage, qApp->translate("DPCM", "Quantized prediction error image").toStdString(), true, true, 0.1, false); outImage(predictionImage, qApp->translate("DPCM", "Prediction image").toStdString()); outImage(reconstructedImage, qApp->translate("DPCM", "Reconstructed image").toStdString()); + outDoubleImage(coding_error_image, qApp->translate("DPCM", "Coding error image").toStdString(), true, true, 0.1, false); }