自适应直方图均衡化MATLAB
时间: 2025-01-03 16:13:09 浏览: 27
### 自适应直方图均衡化在MATLAB中的实现
#### 方法概述
自适应直方图均衡化(Adaptive Histogram Equalization, AHE),也称为局部直方图均衡化,是一种用于增强图像对比度的技术。相比于全局直方图均衡化,AHE通过将图像划分为多个小区域并分别应用直方图均衡化来改善细节显示效果[^2]。
#### MATLAB内置函数`adapthisteq`
为了简化开发过程,MATLAB提供了专门针对此目的设计的函数——`adapthisteq()`。该函数能够自动处理输入灰度级或RGB彩色图片,并返回经过自适应直方图均衡后的版本。下面是一个简单的调用例子:
```matlab
% 读取原始图像
I = imread('example_image.jpg');
% 应用自适应直方图均衡化
J = adapthisteq(I);
% 显示原图与处理后效果图
figure;
subplot(1,2,1); imshow(I); title('Original Image');
subplot(1,2,2); imshow(J); title('Enhanced Image using AHE');
```
上述代码片段展示了如何加载一张测试图片并通过`adapthisteq()`对其进行增强操作;最后利用子窗口形式展示比较结果。
对于更高级的应用场景,还可以调整一些参数来自定义行为模式,比如改变分块大小、限制对比度增益等特性设置以获得更好的视觉体验。具体可查阅官方文档获取更多配置选项说明。
相关问题
自适应直方图均衡化matlab
以下是使用MATLAB实现自适应直方图均衡化的示例代码:
```matlab
% 读取图像
img = imread('lena.png');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 设置块的大小
block_size = 32;
% 计算图像的均值和标准差
mean_img = filter2(ones(block_size)/block_size^2, gray_img, 'same');
std_img = sqrt(abs(filter2(ones(block_size)/block_size^2, gray_img.^2, 'same') - mean_img.^2));
% 计算CLAHE的增强函数
clahe_func = @(x) adapthisteq(x,'NumTiles',[floor(size(x,1)/block_size) floor(size(x,2)/block_size)], 'ClipLimit',0.01, 'NBins',256);
% 对图像进行自适应直方图均衡化
enhanced_img = blkproc(gray_img, [block_size block_size], clahe_func);
% 显示原图和增强后的图像
figure;
subplot(1,2,1);
imshow(gray_img);
title('Original Image');
subplot(1,2,2);
imshow(enhanced_img);
title('Enhanced Image');
```
在上面的代码中,首先读取图像并将其转换为灰度图像。然后,设置块的大小并计算图像的均值和标准差。接下来,定义CLAHE的增强函数,然后使用`blkproc`函数对图像进行自适应直方图均衡化。最后,显示原图和增强后的图像。
自适应直方图均衡化 matlab
好的,关于自适应直方图均衡化的 MATLAB代码,我可以给您提供一个简单的实现:
```matlab
function [output_image] = adaptive_histogram_equalization(input_image, window_size)
% input_image: 输入图像
% window_size: 自适应均衡化的窗口大小
% 将输入图像转换为 double 类型
input_image = im2double(input_image);
% 获取图像的大小
[h, w] = size(input_image);
% 初始化输出图像
output_image = zeros(h, w);
% 计算每个像素的自适应均衡化后的值
for i = 1:h
for j = 1:w
% 获取当前像素的窗口
row_start = max(i - floor(window_size/2), 1);
row_end = min(i + floor(window_size/2), h);
col_start = max(j - floor(window_size/2), 1);
col_end = min(j + floor(window_size/2), w);
window = input_image(row_start:row_end, col_start:col_end);
% 计算窗口内的直方图
hist_window = imhist(window);
% 计算累积分布函数
cdf = cumsum(hist_window) / numel(window);
% 计算当前像素的自适应均衡化后的值
output_image(i, j) = cdf(input_image(i, j)+1);
end
end
% 将输出图像转换为 uint8 类型
output_image = uint8(output_image * 255);
```
这段代码先将输入图像转换为 double 类型,然后遍历每个像素,计算其所在窗口的直方图、累积分布函数,并将自身的像素值映射到累积分布函数上得到自适应均衡化后的像素值,最后将输出图像转换为 uint8 类型。
使用时可以将上述代码保存为名为 `adaptive_histogram_equalization.m` 的文件,然后在 MATLAB 命令窗口中调用该函数。例如:
```matlab
input_image = imread('lena.png');
output_image = adaptive_histogram_equalization(input_image, 31);
imshow(input_image);
imshow(output_image);
```
其中,`lena.png` 是输入图像的文件名,`31` 是自适应均衡化的窗口大小。
阅读全文