matlab实现彩色图像的直方图均衡化

本篇用于记录用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:H
   for j= 1:W
      for k=1:C
         hist_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:256
     for k=1:C   %三个颜色通道分别计算
        for j=1:i %统计累加和       
             hist_eq(i,k) = hist_eq(i,k)+hist_cnt(j,k);
        end
        hist_eq(i,k) = hist_eq(i,k)*255/(H*W);
     end
end
hist_img = zeros(size(I),'uint8');
for i=1:H
   for j= 1:W
      for k=1:C
         hist_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

测试代码如下:

clear
clc
I = imread('Lena.jpg');
myHist(I);

效果图如下:

对比matlab自带的histeq均衡图如下

发现自己实现的均衡化与matlab自带的函数还是有差别。

了解不同可以查看博客文章:histeq的原理和用法_在云端821的博客-CSDN博客_histeq

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yml&embedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值