AHE算法matlab代码
时间: 2023-11-26 20:47:24 浏览: 154
以下是AHE算法的Matlab代码及效果展示:
```matlab
clear all; %清除Matlab缓存数据
close all;
clc;
% 读取图像
g = imread('F:\暗通道图像去雾matlab\图像去雾程序MATLAB\迷雾2.png');
f = rgb2gray(g);
% 显示原图像
subplot 221;
imshow(f);
title('(a)原灰度图像');
% 默认参数下的AHE
g1 = adapthisteq(f);
subplot 222;
imshow(g1);
title('(b)使用adapthisteq默认值[8 8]');
% NumTiles置为[25 25]的AHE
g2 = adapthisteq(f,'NumTiles',[25 25]);
subplot 223;
imshow(g2);
title('(c)NumTiles置为[25 25]的结果');
% 使用NumTiles=[25 25]且ClipLimit=0.05的AHE
g3 = adapthisteq(f,'NumTiles',[25 25],'ClipLimit',0.05);
subplot 224;
imshow(g3);
title('(d)使用这一小片数量且ClipLimit=0.05');
```
效果展示:

相关问题
clahe算法matlab代码
CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种用于图像增强的算法。它首先将图像分成许多小块,然后对每个小块应用自适应直方图均衡化(AHE)算法。最后,通过插值来消除块之间的边界,确保增强后的图像平滑自然。下面是用MATLAB编写的CLAHE算法代码:
```matlab
function enhanced_image = clahe(image, clip_limit, tile_size)
% image:输入图像
% clip_limit:对比度裁剪阈值
% tile_size:分块尺寸
% 将输入图像转换为灰度图像
gray_image = rgb2gray(image);
% 初始化增强后的图像
enhanced_image = zeros(size(gray_image));
% 计算图像的行数和列数
[rows, cols] = size(gray_image);
% 计算行和列上的分块数
num_row_tiles = floor(rows / tile_size);
num_col_tiles = floor(cols / tile_size);
% 确保clip_limit不为0,限制范围为1到10之间
clip_limit = max(clip_limit, 1);
clip_limit = min(clip_limit, 10);
% 对每个分块应用AHE算法
for i = 1:num_row_tiles
for j = 1:num_col_tiles
% 获取当前分块的坐标
start_row = (i-1) * tile_size + 1;
end_row = start_row + tile_size - 1;
start_col = (j-1) * tile_size + 1;
end_col = start_col + tile_size - 1;
% 获取当前分块的图像
tile = gray_image(start_row:end_row, start_col:end_col);
% 应用AHE算法
tile_eq = histeq(tile);
% 裁剪直方图,并缩放到0-255范围
hist_clip = clipHist(tile_eq, clip_limit);
% 将增强后的分块图像复制到输出图像中
enhanced_image(start_row:end_row, start_col:end_col) = hist_clip;
end
end
% 标准化增强后的图像
enhanced_image = uint8(255 * mat2gray(enhanced_image));
end
% 对直方图进行裁剪并缩放到0-255范围
function hist_clip = clipHist(image, clip_limit)
% 计算直方图
histogram = imhist(image);
% 裁剪直方图
cdf = cumsum(histogram) / numel(image);
cdf_clip = min(cdf, clip_limit / 100);
cdf_clip = cdf_clip / max(cdf_clip);
% 缩放直方图
hist_clip = round(cdf_clip(image) * 255);
end
```
以上是用MATLAB实现的CLAHE算法的代码。该代码首先将输入图像转换为灰度图像,然后对图像进行分块,并对每个分块应用AHE算法。最后,对直方图进行裁剪并缩放到0-255范围,生成增强后的图像。
AHE和CLAHE matlab代码实现 直方图展示
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`指定了截断限制的值。
阅读全文
相关推荐













