我是靠谱客的博主 标致大神,最近开发中收集的这篇文章主要介绍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

 

最后

以上就是标致大神为你收集整理的matlab实现彩色图像的直方图均衡化的全部内容,希望文章能够帮你解决matlab实现彩色图像的直方图均衡化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部