function WDVquantisierung2D
%Hauptprogramm zur skalaren Quantisierung
clf reset
clc
clear all;
close all;
echo off


%input image
input_s=0;

if input_s==0              %Shannon-Bild
    a=imread ('Shannon_2.jpg');
	b=a(1:338,1:267);
	a=double(b);
	f=a;
[N1,N2] = size(f)
elseif input_s==1          %Duisburger UniversitŠt
    a= imread ('duisburg.jpg');
	b=a(1:400,1:300);
    a=double(b);
    f=a;
end

figure,imagesc(f); axis image
set(gca,'FontSize',15);
colormap(gray);

% WDV-optimierte Quantisierung

[N1,N2]=size(f)
A=5 %Anzahl der Quantisierungsintervalle
L=N1.*N2/A
f1=f(:);
K=hist(f1,256);
sum=0;
hi=zeros(A+1,1); 
hi(1)=0; hi(A+1)=255; %hi Vektor der Quantisierungsintervallenden
j1=2; 
for j=1:256 
    sum=sum+K(j); 
	if sum>=L hi(j1)=j; sum=sum-L;  j1=j1+1;
	end;
end;	
hi
gi=zeros(A,1); %g1 Vektor der Rekonstruktionswerte
g=zeros(size(f));
for j=1:A 
    sum1=0; sum=0;
    for l=hi(j)+1:hi(j+1)
      sum1=sum1+K(l)*(l-1); sum=sum+K(l);
    end;
    gi(j)=round(sum1/sum); 
end;	
gi
for i=1:N1
   for j=1:N2
     for k=1:A
       if (f(i,j)>hi(k)) & (f(i,j)<=hi(k+1)) g(i,j)=gi(k); 
	   end;
	 end;  
   end;	  
end;
g(1,1)=0; g(1,2)=255;
 
figure,imagesc(g); axis image
set(gca,'FontSize',15);
title(sprintf(' % GGraustufen, WDV-optimiert',A), 'FontSize',15);
colormap(gray);

%hist(g(:))


