function g = localhisteq1(f, m, n)%%%%%%%%局部直方图均衡化程序,输入图像f,输出图像g,子块m*n %%%%%%%%%%%%%%
f=imread('E:\雾2.jpg');
NPTS = 256;
if isa(f, 'uint8')
T = f;
elseif isa(f, 'uint16')
T = im2uint8(f);
elseif isa(f, 'double')
if f >=0 && f <= 1
T = im2unit8(f);
else
d = mat2gray(f);
T = im2unit8(d);
end
end
figure,imshow(T);title('原始有雾图片');
m=100;
n=100;%%%%%%%%%%%% m*n为子块大小
T = padarray(T, [m n], 'symmetric');%%%%%%%%扩展填充图像
mm = m/2;
nn = n/2;
for x = m+1:1:m + size(f,1)%%%%%%%%%行循环
for y = n+1:1:n + size(f,2)%%%%%%列循环
window = T(x - mm:x + mm, y - nn:y + nn);%%%%子块
rk = T(x, y);%%%%%%%%%%%中心像素点
h_old = imhist(window, NPTS);
h_dataout = imhist(T(x - mm:x + mm, y - nn - 1), NPTS);
h_datain = imhist(T(x - mm:x + mm, y + nn), NPTS);
h_new = h_old - h_dataout + h_datain;
cdf = cumsum(h_new);
nk = cdf(rk+1);
sk = 255 * nk/(m*n);%%%%%%%%%%%%对子块直方图均衡化
T(x, y) = round(sk);%%%%%%%%%%%%将结果赋予中心像素点
end
end
TT = T(m+1:m+size(f,1), n+1:n+size(f,2));%%%% 取原始图像
if nargout == 0%%%%%%%%%%%%%%%%%%%%%%%
figure, imshow(TT);title('结果图片');
return;
elseif isa(f, 'uint8')
g = TT;
elseif isa(f, 'uint16')