AHE和CLAHE matlab代码实现 直方图展示
时间: 2024-02-12 11:34:57 浏览: 160
AHE和CLAHE是两种用于图像增强的算法,可以通过Matlab来实现。
下面是AHE的Matlab代码实现:
```matlab
% 读入图像
img = imread('lena.png');
% 将图像转换为灰度图像
if size(img,3)==3
img = rgb2gray(img);
end
% 计算累积分布函数
cdf = zeros(256,1);
[height,width] = size(img);
for i = 1:height
for j = 1:width
cdf(img(i,j)+1) = cdf(img(i,j)+1) + 1;
end
end
for i = 2:256
cdf(i) = cdf(i) + cdf(i-1);
end
% 计算直方图均衡
h_eq = round(cdf/(height*width)*255);
% 应用到图像上
img_eq = img;
for i = 1:height
for j = 1:width
img_eq(i,j) = h_eq(img(i,j)+1);
end
end
% 显示原图和直方图均衡后的图像
figure(1)
subplot(2,2,1)
imshow(img)
title('Original Image')
subplot(2,2,2)
imhist(img)
title('Histogram of Original Image')
subplot(2,2,3)
imshow(img_eq)
title('Equalized Image')
subplot(2,2,4)
imhist(img_eq)
title('Histogram of Equalized Image')
```
下面是CLAHE的Matlab代码实现:
```matlab
% 读入图像
img = imread('lena.png');
% 将图像转换为灰度图像
if size(img,3)==3
img = rgb2gray(img);
end
% 设置参数
win_size = 64; % 窗口大小
clip_limit = 0.01; % 截断限制
% 计算CLAHE
[img_eq, ~] = adapthisteq(img,'NumTiles',[floor(size(img,1)/win_size) floor(size(img,2)/win_size)],'ClipLimit',clip_limit);
% 显示原图和CLAHE后的图像
figure(1)
subplot(2,2,1)
imshow(img)
title('Original Image')
subplot(2,2,2)
imhist(img)
title('Histogram of Original Image')
subplot(2,2,3)
imshow(img_eq)
title('CLAHE Image')
subplot(2,2,4)
imhist(img_eq)
title('Histogram of CLAHE Image')
```
其中,CLAHE使用了Matlab自带的函数`adapthisteq`来实现。在参数中,`NumTiles`指定了将图像划分成多少个小块,`ClipLimit`指定了截断限制的值。
阅读全文