局部直方图均衡化 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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值