概述
彩色图像的直方图均衡化
1、彩色图像的直方图均衡化
这里我采用的方法是直接将彩色图像的 R 、 G 、 B 分量做直方图均衡化然后再将三个分量合并起来。
2、实现代码
(1)灰度图的直方图均衡化,曾经写过灰度图的直方图均衡化 。
%% 直方图均衡化
% 作者:杨宇东
% 日期:2014.10.23
% 参数:待均衡化的图片的数组
% 输出:均衡化处理之后的图片数组
%%
function f = MyHistogramEqulization(img)
[nHeight, nWidth, nDim] = size(img);
if nDim == 3
img = rgb2gray(img);
end
height = size(img, 1);
width = size(img, 2);
% 图像中所有的像素的个数
numPixel = height * width;
% 各个灰度出现的频数
frequency = zeros(256, 1);
% 各个灰度出现的概率
probability = zeros(256, 1);
% 统计各个灰度的频数,计算各个灰度的概率
for i = 1:height
for j = 1:width
value = img(i,j);
frequency(value + 1) = frequency(value + 1) + 1;
probability(value + 1) = frequency(value + 1) / numPixel;
end
end
% 各个灰度的累积分布
fPixel = zeros(256, 1);
% 各个灰度的累积分布概率
pPixel = zeros(256, 1);
% 重新定义的灰度值
imgNew = zeros(256, 1);
% 累积和变量
sum = 0;
for i = 1:size(probability)
sum = sum + frequency(i);
fPixel(i) = sum;
pPixel(i) = fPixel(i) / numPixel;
% 计算映射的灰度值
imgNew(i) = round(pPixel(i) * 255);
end
% 生成新的图像数组。 uint8 是指生成 8 位图像数组,节约存储空间。
f = uint8(zeros(height, width));
for i = 1:height
for j = 1:width
f(i, j) = imgNew(img(i, j) + 1);
end
end
(2)分别对三个分量进行直方图均衡化并合并起来。可以看到虽然的确有将原图中的阴暗部分变得明亮起来,但是颜色的失真也是比较严重的。而且在课堂上我所操作的图像均衡化之后有很多噪音。开始我以为是我的摄像头曾近掉进过马桶的问题,但是认真想想,应该是每个颜色分量对颜色的均衡化之后可能再重新合成的时候颜色有偏差造成的。所以总体效果一般。
%% 彩色图像的直方图均衡化
% 作者:杨宇东
% 日期:2014.10.23
% 参数:待均衡化的图片的文件
% 输出:均衡化处理之后的图片数组
%%
function f = ColorHistogramEqulization(imgFile)
img = imread(imgFile);
[nHeight, nWidth, nDim] = size(img);
r = img(:, :, 1);
g = img(:, :, 2);
b = img(:, :, 3);
% 调用自己写的直方图均衡化函数分别对 R G B 分量进行直方图均衡化
R = HistogramEqulization(r);
G = HistogramEqulization(g);
B = HistogramEqulization(b);
newimg = cat(3, R, G, B);
imshow(newimg);
figure(1);
subplot(1, 2, 1), imshow(img);
title('均衡化之前的图像');
subplot(1, 2, 2), imshow(newimg);
title('均衡化之后的图像');
figure(2);
subplot(4, 3, 1), imshow(r);
title('R 分量');
subplot(4, 3, 2), imshow(g);
title('G 分量');
subplot(4, 3, 3), imshow(b);
title('B 分量');
subplot(4, 3, 4), imhist(r);
subplot(4, 3, 5), imhist(g);
subplot(4, 3, 6), imhist(b);
subplot(4, 3, 7), imshow(R);
subplot(4, 3, 8), imshow(G);
subplot(4, 3, 9), imshow(B);
subplot(4, 3, 10), imhist(R);
subplot(4, 3, 11), imhist(G);
subplot(4, 3, 12), imhist(B);
最后
以上就是寒冷香氛为你收集整理的彩色图像的直方图均衡化彩色图像的直方图均衡化的全部内容,希望文章能够帮你解决彩色图像的直方图均衡化彩色图像的直方图均衡化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复