用灰度变换函数实现直方图均衡化,给我完整可运行的matble代码。
时间: 2024-10-22 10:06:36 浏览: 27
图像处理-直方图均衡化和规定化MATLAB源代码
在MATLAB中,可以使用直方图均衡化来增强图像对比度。这里是一个完整的灰度变换函数,用于实现直方图均衡化:
```matlab
function eq_img = histogram_equalization(gray_img)
% 输入:gray_img - 8位灰度图像
% 输出:eq_img - 均匀化后的8位灰度图像
% 计算直方图
histogram = imhist(gray_img, 256); % 分为256个区间
% 累积分布函数 (CDF),从0到1映射像素值
cdf = cumsum(histogram) / sum(histogram);
% 创建均匀分布,同样分为256个区间
uniform_distribution = linspace(0, 1, 256);
% 灰度映射,将原始灰度值映射到均匀分布对应的区间
eq_gray = interp1(cdf, uniform_distribution, gray_img(:), 'linear', 'extrap');
% 将映射后的单通道图像转换回矩阵形式
eq_img = reshape(eq_gray, size(gray_img));
end
```
这个函数首先计算输入灰度图像的直方图,然后计算累积分布函数(CDF),接着用线性插值法将每个像素的灰度值映射到新的均匀分布范围内,最后将得到的一维向量转换回二维图像。
阅读全文