在FPGA实现上,复杂的算法都是从基础模块一步步搭建起来的,无法一蹴而就。本文聚焦于直方图均衡在彩色图像处理中的多种实现方法,涵盖HSV/YUV变换、CLAHE、MSAHE等高级算法,并提供完整的MATLAB代码与对比分析。无论你是图像处理入门者还是FPGA开发者,都能从中找到实用的技术路径。
一、基础方法:两种色彩空间的直方图均衡
首先,我们实现两种将彩色图像变换到特定色彩空间后,仅对亮度分量做直方图均衡的方案。请ChatGPT协助生成了以下MATLAB程序,输入为一张彩色RGB图像。
方法一:HSV色彩空间直方图均衡
步骤:将RGB图转为HSV,将V分量进行直方图均衡化,再将新的V与原始HS合并,最后转回RGB显示。
% 方法一:HSV直方图均衡
rgb_img = imread('input.jpg'); % 替换为你的图像路径
hsv_img = rgb2hsv(rgb_img);
v = hsv_img(:,:,3);
v_eq = histeq(v); % 直方图均衡
hsv_eq = hsv_img;
hsv_eq(:,:,3) = v_eq;
rgb_eq = hsv2rgb(hsv_eq);
figure, imshow(rgb_eq), title('HSV通道均衡结果');
方法二:YUV色彩空间直方图均衡
步骤:将RGB图转为YUV,对Y分量进行直方图均衡化,再将新的Y与原始UV合并,转回RGB显示。
% 方法二:YUV直方图均衡
rgb_img = imread('input.jpg');
yuv_img = rgb2yuv(rgb_img); % 需要自定义函数或使用现有转换
y = yuv_img(:,:,1);
y_eq = histeq(y);
yuv_eq = yuv_img;
yuv_eq(:,:,1) = y_eq;
rgb_eq = yuv2rgb(yuv_eq); % 同样需要逆变换
figure, imshow(rgb_eq), title('Y通道均衡结果');


直接对整个RGB图像进行直方图均衡化,原图亮度高的部分很容易过曝。而HSV的直方图均衡可以明显避免这个问题,因为只调整亮度分量,色相和饱和度不受破坏。

