直方图均衡化matlab代码
时间: 2023-10-17 18:16:26 浏览: 28
下面是MATLAB实现图像直方图均衡化的代码:
```matlab
% 读取图像
img = imread('example.jpg');
% 将图像转为灰度图像
gray_img = rgb2gray(img);
% 计算图像的直方图
hist = imhist(gray_img);
% 计算灰度级数
L = length(hist);
% 计算每个灰度级的出现概率
p = hist / sum(hist);
% 计算累计分布函数
cdf = cumsum(p);
% 计算像素值映射表
map = round(cdf * (L-1));
% 对原始图像进行直方图均衡化
eq_img = map(gray_img + 1);
% 显示结果
subplot(1,2,1), imshow(gray_img), title('原始图像');
subplot(1,2,2), imshow(eq_img), title('直方图均衡化后的图像');
```
其中,假设原始图像为`example.jpg`,需要注意的是,直方图均衡化需要先将彩色图像转为灰度图像,代码中使用了`rgb2gray`函数实现。
相关问题
图像直方图均衡化matlab代码
图像直方图均衡化是一种用来改善图像对比度的处理方法,它通过对图像的像素值进行变换,使得像素值的分布更加均匀,从而增强图像的细节和色彩。下面是一份基于Matlab的图像直方图均衡化代码示例:
1. 读取图像
```matlab
img = imread('image.jpg'); % 读取图像
```
2. 将图像转换为灰度图
```matlab
gray_img = rgb2gray(img); % 转换为灰度图
```
3. 计算图像的直方图
```matlab
histogram = imhist(gray_img); % 计算直方图
```
4. 计算直方图累积分布
```matlab
cumulative_histogram = cumsum(histogram); % 计算累积直方图
normalized_histogram = cumulative_histogram / numel(gray_img); % 归一化
```
5. 对图像的像素值进行映射
```matlab
new_img = normalized_histogram(gray_img + 1); % 映射像素值
```
6. 显示原始图像和均衡化后的图像
```matlab
subplot(1, 2, 1); % 创建子图
imshow(gray_img); % 显示原始图像
title('原始图像');
subplot(1, 2, 2); % 创建子图
imshow(new_img); % 显示均衡化后的图像
title('均衡化后的图像');
```
通过以上代码,我们可以实现对图像的直方图均衡化处理。代码中通过imread函数读取图像,然后转换为灰度图,计算图像的直方图并计算累积直方图,最后对图像的像素值进行映射。最终通过subplot和imshow函数将原始图像和均衡化后的图像显示出来。这样,我们就可以直观地观察到均衡化处理对图像的效果改善。
灰度直方图均衡化matlab代码
灰度直方图均衡化是数字图像处理中的一种常见方法,常用于增强图像的对比度和明暗度等特征,使得图像更加清晰、明亮。MATLAB提供了现成的函数histeq()可实现灰度直方图均衡化操作。
histeq()函数的输入参数为待处理图像,输出参数为处理后的图像。下面是一个示例代码:
% 读入图片
I = imread('lena.jpg');
% 灰度处理
I_gray = rgb2gray(I);
% 直方图均衡化
I_eq = histeq(I_gray);
% 显示原图和处理后的图像
subplot(1, 2, 1), imshow(I_gray), title('原图');
subplot(1, 2, 2), imshow(I_eq), title('均衡化后的图像');
该代码首先通过imread()函数读入一张图片,然后使用rgb2gray()函数将其转换为灰度图像。然后调用histeq()函数对灰度图像进行直方图均衡化操作,将处理后的图像保存到I_eq变量中。最后,使用subplot()和imshow()函数将原图和处理后的图像显示在同一窗口中。
需要注意的是,直方图均衡化操作会使得图像的对比度增强,但同时也可能会使得图像的某些细节和纹理信息丢失,因此需要在实际应用中根据具体情况进行权衡和选择。