CLAHE的matlab代码
时间: 2024-01-29 15:04:30 浏览: 70
以下是CLAHE的Matlab代码:
```
function output_img = clahe(input_img, clip_limit, tile_size)
% input_img: 输入的图像
% clip_limit: CLAHE的截断限制
% tile_size: 均衡化的块大小
% 将输入图像转换为灰度图像
if size(input_img, 3) == 3
input_img = rgb2gray(input_img);
end
% 将输入图像转换为double类型
input_img = im2double(input_img);
% 计算CLAHE的均衡化限制
if nargin < 2
clip_limit = 0.01;
end
if nargin < 3
tile_size = [8 8];
end
if numel(tile_size) == 1
tile_size = [tile_size tile_size];
end
num_tiles = ceil(size(input_img) ./ tile_size);
clip_limit = ceil(clip_limit * prod(tile_size));
% 均衡化每个块
output_img = zeros(size(input_img));
for i = 1:num_tiles(1)
for j = 1:num_tiles(2)
row_start = (i - 1) * tile_size(1) + 1;
row_end = min(i * tile_size(1), size(input_img, 1));
col_start = (j - 1) * tile_size(2) + 1;
col_end = min(j * tile_size(2), size(input_img, 2));
tile = input_img(row_start:row_end, col_start:col_end);
tile_hist = imhist(tile);
tile_cdf = cumsum(tile_hist) / numel(tile);
tile_cdf(tile_cdf > clip_limit / numel(tile)) = clip_limit / numel(tile);
tile_cdf = (tile_cdf - min(tile_cdf)) / (1 - min(tile_cdf));
tile_eq = interp1(linspace(0, 1, 256), tile_cdf, tile, 'nearest');
output_img(row_start:row_end, col_start:col_end) = tile_eq;
end
end
% 将输出图像转换回uint8类型
output_img = im2uint8(output_img);
end
```
这个函数接受三个参数:输入图像,CLAHE的截断限制和均衡化的块大小。在函数内部,它首先将输入图像转换为灰度图像,并将其转换为double类型。然后,它计算CLAHE的均衡化限制,并对每个块执行CLAHE。最后,它将输出图像转换回uint8类型并返回。
阅读全文