AHE算法matlab代码
时间: 2023-11-26 09:47:24 浏览: 62
以下是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');
```
效果展示:
![AHE算法效果展示](https://i.loli.net/2021/06/22/7J5zvKZVQ6qj1fO.png)
相关问题
AHE算法代码 python
以下是AHE算法的Python代码实现:
```python
import cv2
import numpy as np
def AHE(img, win_size):
h, w = img.shape
img_AHE = np.zeros((h, w), dtype=np.uint8)
pad_size = win_size // 2
img_pad = cv2.copyMakeBorder(img, pad_size, pad_size, pad_size, pad_size, cv2.BORDER_REFLECT)
for i in range(pad_size, h + pad_size):
for j in range(pad_size, w + pad_size):
hist, _ = np.histogram(img_pad[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1].ravel(), 256, [0, 256])
cdf = hist.cumsum()
cdf_min = np.min(cdf[cdf > 0])
img_AHE[i - pad_size][j - pad_size] = np.round(((cdf[img_pad[i][j]] - cdf_min) / ((win_size ** 2) - cdf_min)) * 255)
return img_AHE
img = cv2.imread("test.jpg", 0)
img_AHE = AHE(img, 50)
cv2.imshow("img", img)
cv2.imshow("img_AHE", img_AHE)
cv2.waitKey()
```
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范围,生成增强后的图像。