自己编写代码进行直方图均衡化并显示均衡化后的图像,给出两种Matlab代码
时间: 2024-09-27 14:02:33 浏览: 40
直方图均衡化-自实现_matlab图像处理直方图均衡化_
5星 · 资源好评率100%
当然可以。直方图均衡化是一种增强图像对比度的技术,通过调整像素值的分布来改善视觉效果。在MATLAB中,有两种常见的方法来实现直方图均衡化:
**方法一:使用imhist和imadjust函数**
这是最简单直接的方式,它结合了计算直方图和调整图像功能。
```matlab
% 读取图像
img = imread('your_image.jpg'); % 替换为你要处理的图片文件名
% 计算原图像的直方图
histogram = imhist(img);
% 定义新的灰度范围
new_range = [0, max(hist(:))];
% 使用imadjust进行直方图均衡化
eq_img = imadjust(img, histogram, new_range);
% 显示原始图像和均衡化的图像
subplot(1,2,1), imshow(uint8(img)), title('Original Image');
subplot(1,2,2), imshow(uint8(eq_img)), title('Equalized Image');
```
**方法二:自定义直方图计算和调整**
如果你想更深入地理解这个过程,你可以手动计算直方图,然后创建一个新的累积分布函数(CDF)进行像素映射。
```matlab
% 直方图计算
counts = histcounts(double(img(:)));
cdf = cumsum(counts / sum(counts));
% 创建等距的新灰度范围
min_val = min(img(:));
max_val = max(img(:));
num_bins = numel(cdf);
scale = (max_val - min_val) / (num_bins - 1);
offset = min_val;
% 应用直方图均衡化
eq_img = floor((cdf(round(double(img(:)))) * scale + offset);
% 显示图像
imshow(uint8(eq_img)), title('Equalized Image');
```
以上两种方法都可以看到图像直方图均衡化的效果。记得替换`'your_image.jpg'`为你实际的图片文件路径。如果你有任何疑问,可以随时提问哦!
阅读全文