概述
本篇用于记录用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实现彩色图像的直方图均衡化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复