直方图均衡化matlab代码
时间: 2023-10-17 10:16:35 浏览: 14
下面是Matlab中实现直方图均衡化的代码示例:
```matlab
% 读取原始图片
img = imread('lena.png');
% 将图像转换为灰度图
gray_img = rgb2gray(img);
% 计算灰度图的直方图
histogram = imhist(gray_img);
% 计算累积分布函数
cdf = cumsum(histogram) / numel(gray_img);
% 计算直方图均衡化后的像素值
equ_pixel_vals = round(cdf(gray_img+1) * 255);
% 将像素值写入新图像
equ_img = reshape(equ_pixel_vals, size(gray_img));
equ_img = uint8(equ_img);
% 显示原图和直方图均衡化后的图
subplot(1,2,1), imshow(gray_img), title('Original Image');
subplot(1,2,2), imshow(equ_img), title('Equalized Image');
```
上述代码将读取一张名为lena.png的图像,将其转换为灰度图,并对其进行直方图均衡化。最后显示原始图像和直方图均衡化后的图像。
相关问题
图像直方图均衡化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()函数将原图和处理后的图像显示在同一窗口中。
需要注意的是,直方图均衡化操作会使得图像的对比度增强,但同时也可能会使得图像的某些细节和纹理信息丢失,因此需要在实际应用中根据具体情况进行权衡和选择。