clear all; %clf reset; % Setup data image_list = mGetImageFileList; image_total = 1%size(image_list,1); size_list = zeros( 1, image_total ); MSE_list = zeros( 1, image_total ); signal_list = zeros( 1, image_total ); noise_list = zeros( 1, image_total ); SNR_Results = ones( image_total+1, 1 )*NaN; Rate_Results = ones( image_total+1, 1 )*NaN; weight_scale=1 draw = 0; RLE_list = []; Total_DCT_Time = 0; for image_count = 1:image_total image_name = deblank( image_list( image_count,: ) ) image = pgmRead( sprintf( '../images/%s', image_name) ); if draw figure( 1 ); mShowImage( image ); end image_size = prod( size( image ) ); size_list( image_count ) = image_size; image_mean = round( mean(mean(image)) ); % image_mean = 128 M = 8; % DCT Image: start tic; [ coefficients, image_size_vector ] = mDCT8x8( image - image_mean ); quantized_coefficients = mDCT8x8WeightedQuantization( coefficients, weight_scale ); reconstruction_coefficients = mDCT8x8InverseWeightedQuant( quantized_coefficients, weight_scale ); DC_coefficients = quantized_coefficients( 1:M:image_size_vector( 1 ), 1:M:image_size_vector( 2 ) ); DPCM_DC_coefficients = mDPCMEncode( DC_coefficients ); quantized_coefficients( 1:M:image_size_vector( 1 ), 1:M:image_size_vector( 2 ) ) = DPCM_DC_coefficients; reconstructed_image = round( mInverseDCT8x8( reconstruction_coefficients, image_size_vector ) ) + image_mean; Total_DCT_Time = Total_DCT_Time + toc % DCT Image: end signal = mean( mean( image.^2 ) ); noise = mean( mean( (image-reconstructed_image).^2 ) ); signal_list( image_count ) = signal; noise_list( image_count ) = noise; SNR = 10*log10( signal/noise ) SNR_Results( image_count ) = SNR; [ PDF_update range_update RLE_count RLE_update ] = ComputeRLEPDF( quantized_coefficients, 1, M ); RLE_list = [ RLE_list RLE_update ]; % x*log(x) = log(x^x) PlogP = log( PDF_update.^PDF_update)./log(2); Rate = -sum(sum( PlogP' ))*RLE_count/image_size Rate_Results( image_count ) = Rate; % Separate_Rate=( mComputeEntropy( real( RLE_update) )+ mComputeEntropy( imag( RLE_update) ) )*size(RLE_update,2)/image_size if draw figure( 2); mShowImage(reconstructed_image); drawnow; end end Overall_signal = sum( signal_list.*size_list ) / sum( size_list ); Overall_noise = sum( noise_list.*size_list ) / sum( size_list ); Overall_SNR = 10*log10( Overall_signal / Overall_noise ) SNR_Results( image_total+1 ) = Overall_SNR; %Overall_PDF = Overall_PDF/sum(size_list); % x*log(x) = log(x^x) %PlogP = log( Overall_PDF.^Overall_PDF)./log(2); %Overall_Rate = -sum(sum( PlogP' )) Overall_Rate = mCompute2DEntropy( RLE_list )*size(RLE_list,2)/sum( size_list ); Rate_Results( image_total+1 ) = Overall_Rate; SNR_Results = [ NaN, weight_scale; [ 1:image_total NaN ]' SNR_Results ] Rate_Results = [ NaN, weight_scale; [ 1:image_total NaN ]' Rate_Results ] Total_DCT_Time