clc;
clear all;
image=imread('test.jpg');
Img=rgb2gray(image);
[h,w]=size(Img);
minV=double(min(min(Img)));
maxV=double(max(max(Img)));
imshow(Img);
NrX=8;
NrY=4;
Wsize=ceil(w/NrX);
Hsize=ceil(h/NrY);
deltax=Wsize*NrX-w;
deltay=Hsize*NrY-h;
tmpImg=zeros(h+deltay,w+deltax);
tmgImg(1:h,1:w)=Img;
new_w=w+deltax;
new_h=h+deltay;
NrPixels=Wsize*Wsize;%这里可能有问题!!!
NrBins=256;% NrBins - Number of graybins for histogram ("dynamic range")
LUT=zeros(maxV+1,1);%可能有些问题!!!
for i=minV:maxV
LUT(i+1)=fix(i-minV);
end
Bin = zeros(new_h, new_w);
for m = 1 : new_h
for n = 1 : new_w
Bin(m,n) = 1 + LUT(tmpImg(m,n) + 1);
end
end
Hist = zeros(NrY, NrX, 256);
for i=1:NrY
for j=1:NrX
%tmp = tmpImg(1+(i-1)*HSize:i*HSize,1+(j-1)*WSize:j*WSize);
tmp = uint8(Bin(1+(i-1)*HSize:i*HSize, 1+(j-1)*WSize:j*WSize));
[Hist(i, j, :), x] = imhist(tmp, 256);
end
end
Hist = circshift(Hist,[0, 0, -1]);
ClipLimit = 2.5;
ClipLimit = max(1,ClipLimit * HSize * WSize/NrBins);
Hist = clipHistogram(Hist,NrBins,ClipLimit,NrY,NrX);
Map=mapHistogram(Hist, minV, maxV, NrBins, NrPixels, NrY, NrX);