本篇用于记录用matlab实现彩色图像的直方图均衡化算法,并与matlab自带的直方图均衡化函数histeq做对比。
直方图原理可以参考下面的博客文章:直方图均衡化 原理、流程、公式推导及matlab实现_非 常 道的博客-CSDN博客_matlab 直方图均衡化原理
通过分别对R、G、B颜色通道分别进行直方图均衡,来实现彩色图像的直方图均衡化。具体均衡化算法可以分为两部分,
1)直方图统计;
2)直方图归一化;
算法代码如下:
%证实针对彩色图像只校正Y通道的直方图,均衡后图像不理想。需要分别对RGB颜色通道进行直方图均衡。function outImg = myHist(I) [H,W,C]=size(I);%yuv_img = rgb2ycbcr(I);%转换成yuv格式hist_cnt = zeros([256,C]);%直方图统计for i=1:Hfor j= 1:Wfor k=1:Chist_cnt(I(i,j,k)+1,k) = hist_cnt(I(i,j,k)+1,k)+1;end end end%直方图均衡hist_eq = zeros([256,C]);for i=1:256for k=1:C %三个颜色通道分别计算for j=1:i %统计累加和 hist_eq(i,k) = hist_eq(i,k)+hist_cnt(j,k);endhist_eq(i,k) = hist_eq(i,k)*255/(H*W);endendhist_img = zeros(size(I),'uint8');for i=1:Hfor j= 1:Wfor k=1:Chist_img(i,j,k) = round(hist_eq(I(i,j,k)+1,k));end end end%hist_img = ycbcr2rgb(hist_img);figure;subplot(1,2,1);imshow(I);title('原图');subplot(1,2,2);imshow(hist_img);title('均衡图');outImg = hist_img;end
测试代码如下:
clearclcI = imread('Lena.jpg');myHist(I);
效果图如下:
对比matlab自带的histeq均衡图如下
发现自己实现的均衡化与matlab自带的函数还是有差别。
了解不同可以查看博客文章:histeq的原理和用法_在云端821的博客-CSDN博客_histeq
如果觉得《matlab实现彩色图像的直方图均衡化》对你有帮助,请点赞、收藏,并留下你的观点哦!