clahe算法matlab代码
时间: 2023-07-30 08:00:45 浏览: 192
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范围,生成增强后的图像。
阅读全文