直方图均衡化matlab代码
时间: 2023-10-17 07:24:52 浏览: 28
以下是Matlab中实现直方图均衡化的代码示例:
```matlab
% 读取图像
img = imread('image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 计算图像的直方图
histogram = imhist(gray_img);
% 计算累计分布函数
cdf = cumsum(histogram) / numel(gray_img);
% 进行直方图均衡化
equalized_img = uint8(255 * cdf(double(gray_img) + 1));
% 显示原始图像和均衡化后的图像
subplot(2, 1, 1);
imshow(gray_img);
title('Original Image');
subplot(2, 1, 2);
imshow(equalized_img);
title('Equalized Image');
```
这段代码首先读取一张图片,将其转换为灰度图像,然后计算出灰度图像的直方图。接着,通过计算累计分布函数来进行直方图均衡化。最后,将均衡化后的图像和原始图像一起显示出来,以便比较。
相关问题
图像直方图均衡化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()函数将原图和处理后的图像显示在同一窗口中。
需要注意的是,直方图均衡化操作会使得图像的对比度增强,但同时也可能会使得图像的某些细节和纹理信息丢失,因此需要在实际应用中根据具体情况进行权衡和选择。