当前位置:文档之家› 【matlab国外编程代写】MATLAB 局部直方图均衡化

【matlab国外编程代写】MATLAB 局部直方图均衡化

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')

g = im2uint16(TT);

elseif isa(f, 'double')

g = im2double(TT);

else

error('Unsupported IPT data class.'); end

相关主题
文本预览
相关文档 最新文档