From 92c009ef2c03bd475f62bfe3859e996a215d4791 Mon Sep 17 00:00:00 2001 From: Nikola Sprljan Date: Thu, 26 Apr 2012 14:58:06 +0100 Subject: [PATCH] Removal of PQS, fixes to image links in the READMEs --- QualityAssessment/Pqs.zip | Bin 43744 -> 0 bytes QualityAssessment/README.md | 1 - QualityAssessment/iq_measures.m | 139 +++++++++++++++++--------------- QualityAssessment/pqs.m | 70 ---------------- Wavelet/README.md | 14 ++-- ZerotreeCoding/README.md | 4 +- 6 files changed, 83 insertions(+), 145 deletions(-) delete mode 100644 QualityAssessment/Pqs.zip delete mode 100644 QualityAssessment/pqs.m diff --git a/QualityAssessment/Pqs.zip b/QualityAssessment/Pqs.zip deleted file mode 100644 index 4276f8ce42cf62fa2db9dcd00f38d250277bd9c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43744 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 S008vIK>`5)lzoH&0RIp5jbsY| diff --git a/QualityAssessment/README.md b/QualityAssessment/README.md index ad0365e..f30166b 100644 --- a/QualityAssessment/README.md +++ b/QualityAssessment/README.md @@ -9,7 +9,6 @@ Functions - **iq_measures** - Image Quality Measures - various measures of reconstructed image quality - **image_show** - Displays image, with additional parameters - - **pqs** - Script that runs software based on CIPIC PQS version 1 (Picture Quality Scale) image quality measure. Unzip the contents Pqs.zip into subdirectory .\Pqs to make the binary available to the script. The original CIPIC PQS version 1 software has been modified so there is support for different block size (switch -b). Examples diff --git a/QualityAssessment/iq_measures.m b/QualityAssessment/iq_measures.m index e5e18fb..45a8550 100644 --- a/QualityAssessment/iq_measures.m +++ b/QualityAssessment/iq_measures.m @@ -1,6 +1,6 @@ -function [MSE,PSNR,AD,SC,NK,MD,LMSE,NAE,PQS]=iq_measures(A,B,disp) +function [MSE,PSNR,AD,SC,NK,MD,LMSE,NAE]=iq_measures(A,B,disp) %Image Quality Measures - various measures of reconstructed image quality -%[MSE,PSNR,AD,SC,NK,MD,LMSE,NAE,PQS] = iq_measures(A,B,disp) +%[MSE,PSNR,AD,SC,NK,MD,LMSE,NAE] = iq_measures(A,B,disp) % %Input: % A - array containing the original image or its filename @@ -11,10 +11,11 @@ % if (disp ~= 'disp') results are not displayed % %Note: -% Number of specified outputs will defined what is actually computed. +% Number of specified outputs specifies what is actually computed. % if (nargout == 2) only MSE and PSNR are computed -% if (nargout == 8) the PQS is not computed -% if (nargout == 9) all measures are computed +% if (nargout == 3) MSE, PSNR and AD are computed +% ... +% if (nargout == 8) all measures are computed % %Output: % MSE - Mean Squared Error @@ -25,10 +26,6 @@ % MD - Maximum Difference % LMSE - Laplacian Mean Squared Error % NAE - Normalized Absolute Error -% PQS - Picture Quality Scale -% -%Uses: -% pqs.m (for computation of PQS) % %Example: % [MSE,PSNR]=iq_measures(A,B); @@ -40,10 +37,10 @@ else disp = strcmp(disp,'disp'); end; -if isstr(A) +if ischar(A) A=imread(A); end; -if isstr(B) +if ischar(B) B=imread(B); end; if ~isa(A,'double') @@ -52,13 +49,9 @@ if ~isa(B,'double') B=double(B); end; - if (nargout <= 2) - numout = 1; -elseif (nargout <= 8) - numout = 2; -else - numout = 3; -end; + +numout = nargout; + clrcomp = size(A,3); MSE = zeros(1,clrcomp); PSNR = zeros(1,clrcomp); @@ -68,59 +61,75 @@ MD = zeros(1,clrcomp); LMSE = zeros(1,clrcomp); NAE = zeros(1,clrcomp); -PQS = zeros(1,clrcomp); for i=1:size(A,3) if (disp && (clrcomp > 1)) fprintf('Component %d\n',i);end; - [MSE(i),PSNR(i),AD(i),SC(i),NK(i),MD(i),LMSE(i),NAE(i),PQS(i)]=measureQ(A(:,:,i),B(:,:,i),disp,numout); + [MSE(i),PSNR(i),AD(i),SC(i),NK(i),MD(i),LMSE(i),NAE(i)]=measureQ(A(:,:,i),B(:,:,i),disp,numout); end; -function [MSE,PSNR,AD,SC,NK,MD,LMSE,NAE,PQS]=measureQ(A,B,disp,numout) -x=size(A,2); -y=size(A,1); +function [MSE,PSNR,AD,SC,NK,MD,LMSE,NAE]=measureQ(A,B,disp,numout) +PSNR=0; +AD=0; +SC=0; +NK=0; +MD=0; +LMSE=0; +NAE=0; + R=A-B; Pk=sum(sum(A.^2)); -MSE=sum(sum(R.^2))/(x*y); % MSE -if disp~=0 fprintf('MSE (Mean Squared Error) = %f\n',MSE);end; -% PSNR -if MSE>0 - PSNR=10*log10(255^2/MSE); -else - PSNR=Inf; + +% MSE +MSE=sum(sum(R.^2))/(size(A,1)*size(A,2)); % MSE +if (disp~=0) fprintf('MSE (Mean Squared Error) = %f\n',MSE);end; + +if (numout > 1) + % PSNR + if MSE>0 + PSNR=10*log10(255^2/MSE); + else + PSNR=Inf; + end; + if (disp~=0) fprintf('PSNR (Peak Signal / Noise Ratio) = %f dB\n',PSNR);end; +end; + +if (numout > 2) + % AD + AD=sum(sum(R))/(size(A,1)*size(A,2)); % AD + if disp~=0 fprintf('AD (Average Difference) = %f\n',AD);end; +end; + +if (numout > 3) + % SC + Bs = sum(sum(B.^2)); + if (Bs == 0) + SC = Inf; + else + SC=Pk/sum(sum(B.^2)); + end; + if disp~=0 fprintf('SC (Structural Content) = %f\n',SC);end; +end; + +if (numout > 4) + % NK + NK=sum(sum(A.*B))/Pk; + if disp~=0 fprintf('NK (Normalised Cross-Correlation) = %f\n',NK);end; +end; + +if (numout > 5) + % MD + MD=max(max(abs(R))); % MD + if disp~=0 fprintf('MD (Maximum Difference) = %f\n',MD);end; +end; + +if (numout > 6) + % LMSE + OP=4*del2(A); + LMSE=sum(sum((OP-4*del2(B)).^2))/sum(sum(OP.^2)); + if disp~=0 fprintf('LMSE (Laplacian Mean Squared Error) = %f\n',LMSE);end; end; -if disp~=0 fprintf('PSNR (Peak Signal / Noise Ratio) = %f dB\n',PSNR);end; -if numout>1 - AD=sum(sum(R))/(x*y); % AD - if disp~=0 fprintf('AD (Average Difference) = %f\n',AD);end; - Bs = sum(sum(B.^2)); - if (Bs == 0) - SC = Inf; - else - SC=Pk/sum(sum(B.^2)); % SC - end; - if disp~=0 fprintf('SC (Structural Content) = %f\n',SC);end; - NK=sum(sum(A.*B))/Pk; % NK - if disp~=0 fprintf('NK (Normalised Cross-Correlation) = %f\n',NK);end; - MD=max(max(abs(R))); % MD - if disp~=0 fprintf('MD (Maximum Difference) = %f\n',MD);end; - % LMSE - OP=4*del2(A); - LMSE=sum(sum((OP-4*del2(B)).^2))/sum(sum(OP.^2)); - if disp~=0 fprintf('LMSE (Laplacian Mean Squared Error) = %f\n',LMSE);end; - NAE=sum(sum(abs(R)))/sum(sum(abs(A))); % NAE - if disp~=0 fprintf('NAE (Normalised Absolute Error) = %f\n',NAE);end; -else - AD=0; - SC=0; - NK=0; - MD=0; - LMSE=0; - NAE=0; +if (numout > 7) + % NAE + NAE=sum(sum(abs(R)))/sum(sum(abs(A))); + if disp~=0 fprintf('NAE (Normalised Absolute Error) = %f\n',NAE);end; end; -if (numout>2)&(x==y) - % PQS - PQS=pqs(A,B,x); - if disp~=0 fprintf('PQS (Picture Quality Scale) = %f\n',PQS);end; -else - PQS=0; -end; \ No newline at end of file diff --git a/QualityAssessment/pqs.m b/QualityAssessment/pqs.m deleted file mode 100644 index db0f5c8..0000000 --- a/QualityAssessment/pqs.m +++ /dev/null @@ -1,70 +0,0 @@ -function PQS=pqs(A,B,blok) -%Script that runs PQS (Picture Quality Scale) image quality measure  -%PQS = pqs(A,B,blok) -% -%Input: -% A - array containing the original image or its filename -% B - array containing the compressed image or its filename -% blok - [optional, default = size(A,1)] size of the block that -% the compression algorithm uses. In a default case, when the function -% is called without the 'blok' parameter, the dimension of the input -% image is used instead (the whole image is treated as a block). -% -%Output: -% PQS - Picture Quality Scale; number from range 0-5 specifying the quality of -% the compressed image (note that it can fall out of range 0-5!) -% -%Note: -% This function is based in on CIPIC PQS version 1 software. The DOS program -% pqs.exe must be located in the subdirectory \Pqs. For more information refer -% to \Pqs\README; just one important excerpt: -% "PQS was designed and tested on 256 x 256 images...its use with other than -% 256 x 256 images at 4 times picture height is shaky." -% PQS works only for square images! -% -%Uses: -% .\Pqs\pqs.exe (c) 1996, Robert R. Estes, Jr. and V. Ralph Algazi -% -%Example:   -% PQS=pqs(A,B,8); -% PQS=pqs('Lena256.png','LenaSPIHT0.1bpp.bmp');  - -if isstr(A) - A=imread(A); - end; - if isstr(B) - B=imread(B); - end; - PQS = -1; - if (size(A,1) ~= size(A,2)) - error('Works only for square images!'); - end; - siz=size(A,1); - if nargin==2 - blok=siz; - end; - if ~((size(A,1) == size(B,1)) & (size(A,2) == size(B,2))) - error('Images must have the same dimensions!'); - end; - where=[fileparts(which(mfilename)) '\Pqs']; - pic1=[where '\pic1.pqs ']; - fid1=fopen(pic1,'w'); - Ad=double(A); - fwrite(fid1,Ad,'uint8'); - fclose(fid1); - pic2=[where '\pic2.pqs ']; - fid2=fopen(pic2,'w'); - Bd=double(B); - fwrite(fid2,Bd,'uint8'); - fclose(fid2); - rez=[where '\rez.txt']; - naredba=[where '\pqs.exe -b ' num2str(blok) ' -s ' num2str(siz) ' ' pic1 pic2 ' > ' rez]; - [c,w]=dos(naredba); - disp(w); - fid=fopen(rez); - st=fscanf(fid,'%s'); - PQS=str2num(st(5:size(st,2))); - fclose(fid); - delete(pic1); - delete(pic2); - delete(rez); \ No newline at end of file diff --git a/Wavelet/README.md b/Wavelet/README.md index 3be285b..38830f4 100644 --- a/Wavelet/README.md +++ b/Wavelet/README.md @@ -114,29 +114,29 @@ Analysis and synthesis filter taps, orthogonality test, Perfect Recostruction (P >> scaling_fun('CDF_9x7',5,'d','plot'); -![9x7 wavelet scaling function](https://github.com/nsprljan/Matlab/raw/master/Wavelet/CDF_9x7_scaling_analysis.png) +![9x7 wavelet scaling function](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/CDF_9x7_scaling_analysis.png) ### Wavelet filter taps ### Low pass filter taps, (scaling function with 0 iterations) with **scaling\_fun**: >> scaling_fun('LeGall_5x3',0,'d'); -![5x3 wavelet h0 taps](https://github.com/nsprljan/Matlab/raw/master/Wavelet/LeGall_5x3_h0.png) +![5x3 wavelet h0 taps](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/LeGall_5x3_h0.png) ### Frequency and phase characteristic ### With **wavelet\_char**: >> wavelet_char('CDF_9x7','CDF_9x7','d','plot'); -![9x7 wavelet frequency characteristic](https://github.com/nsprljan/Matlab/raw/master/Wavelet/wavelet_9x7_char_freq.png) -![9x7 wavelet phase characteristic](https://github.com/nsprljan/Matlab/raw/master/Wavelet/wavelet_9x7_char_phase.png) +![9x7 wavelet frequency characteristic](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/wavelet_9x7_char_freq.png) +![9x7 wavelet phase characteristic](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/wavelet_9x7_char_phase.png) ### 2D wavelet ### As a tensor product of 1D wavelets, with **wavelet2D**: >> wavelet2D('LeGall_5x3',5,'d','l','l'); -![2D wavelet](https://github.com/nsprljan/Matlab/raw/master/Wavelet/2Dwavelet.png) +![2D wavelet](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/2Dwavelet.png) ### Wavelet packet decomposition ### @@ -147,10 +147,10 @@ As a tensor product of 1D wavelets, with **wavelet2D**: Wavelet packet subband tree: -![Wavelet packet subband tree](https://github.com/nsprljan/Matlab/raw/master/Wavelet/wavelet_packet_subband_tree.png) +![Wavelet packet subband tree](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/wavelet_packet_subband_tree.png) Wavelet packet transform coefficients: -![Wavelet packet transform coefficients](https://github.com/nsprljan/Matlab/raw/master/Wavelet/Lena_transform_coefficients.jpg) +![Wavelet packet transform coefficients](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/Wavelet/Lena_transform_coefficients.jpg) \ No newline at end of file diff --git a/ZerotreeCoding/README.md b/ZerotreeCoding/README.md index d6438ff..1d35c4b 100644 --- a/ZerotreeCoding/README.md +++ b/ZerotreeCoding/README.md @@ -1,7 +1,7 @@ Zerotree Coding Toolbox ======================= -Image compression based on wavelets, using zerotrees of wavelet coefficients. Uses [Wavelet](https://github.com/nsprljan/Matlab/tree/master/Wavelet) and [Quality Assessment](https://github.com/nsprljan/Matlab/tree/master/QualityAssessment) toolboxes. The SPIHT binaries required for function spspiht.m can be downloaded from the SPIHT image compression homepage, see below. +Image compression based on wavelets, using zerotrees of wavelet coefficients. Uses [Wavelet](https://github.com/nsprljan/ImageCodingResearchTools/tree/master/Wavelet) and [Quality Assessment](https://github.com/nsprljan/ImageCodingResearchTools/tree/master/QualityAssessment) toolboxes. The SPIHT binaries required for function spspiht.m can be downloaded from the SPIHT image compression homepage, see below. Functions @@ -21,7 +21,7 @@ Examples -------- SPIHT algorithm flow-chart: - ![SPIHT algorithm flow-chart](https://github.com/nsprljan/Matlab/raw/master/ZerotreeCoding/SPIHT_flowchart.png) + ![SPIHT algorithm flow-chart](https://github.com/nsprljan/ImageCodingResearchTools/raw/master/ZerotreeCoding/SPIHT_flowchart.png) **spiht_wpackets** with dyadic DWT, as in the original SPIHT: