clear all; % --- Setup variables ------------------------------------------------------- blocksize = 8; winSize = 32; %maxErrorLevel = 25; %ErrorQuant = 20; dataPoint = 0; image_list = mGetImageFileList; image_total = size( image_list, 1 ); %---------------------------------------------------------------------------- for maxErrorLevel = [3:1:8,10:2:16,20:5:50,60:10:120,130:20:250] ErrorQuant = round(0.4*maxErrorLevel); dataPoint = dataPoint+1 for imNum = 1:2:image_total pNum = (imNum+1)/2; left_name = deblank( image_list( imNum ,: ) ); rght_name = deblank( image_list( imNum+1 ,: ) ); left = pgmRead( sprintf( '../images/%s', left_name ) ); right = pgmRead( sprintf( '../images/%s', rght_name ) ); [ row_total, col_total ] = size( left ); image_size = row_total*col_total; % ------ Determine predictor for every 8x8 block in right image ------- predictors = getPredictors(left,right,blocksize,winSize); % ------ Predict right image in pixel domain -------------------------- rightPredict = estimateRight(left,predictors,blocksize); SNR_predicted = mComputeSNR(right, rightPredict); % ------ Calculate, threshold and quantise errors --------------------- errors = right - rightPredict; bigErrors = thresholdErrors(errors,maxErrorLevel); bigErrorsQ = quant(bigErrors,ErrorQuant); % ------ Compensate for coding errors --------------------------------- rightCompensated = rightPredict + bigErrorsQ; % ------ Compute bit rate and SNR stats ------------------------------- %EntropyOfErrors(pNum) = mComputeEntropy(bigErrorsQ); Errors_Zero_RLE_Rate(pNum) = mComputeZeroRLERate(bigErrorsQ); SNR_compensated(pNum) = mComputeSNR(right, rightCompensated); % ------ end Average_SNR(dataPoint) = mComputeAverageSNR(SNR_compensated) Average_Bit_Rate(dataPoint) = mean(Errors_Zero_RLE_Rate) end mCreateRateDistortionGraph('Rate Distortion Curve for Pioneer Block Prediction Encoder',Average_SNR,Average_Bit_Rate);