直方图均衡化—matlab实现

时间:2021-11-10 02:05:31

步骤:

统计原图像素每个像素的个数

统计原图像<每个灰度级的像素的累积个数

家里灰度级得映射规则

将原图每个像素点的灰度映射到新图


代码:

clear all
I=imread('1.jpg'); %读入JPG彩色图像文件
imshow(I) %显示出来
title('输入的彩色JPG图像')
I_gray = rgb2gray(I); %灰度化后的数据存入数组
imwrite(I_gray,'1_gray.bmp'); %保存灰度图像
figure,imshow(I_gray);
title('灰度图')

[height,width]=size(I_gray); %测量图像尺寸参数
p=zeros(1,256); %预创建存放灰度出现概率的向量
for i=1:height
for j=1:width
p(I_gray(i,j) + 1) = p(I_gray(i,j) + 1) + 1;
end
end
s=zeros(1,256);
s(1)=p(1);
for i=2:256
s(i)=p(i) + s(i-1); %统计图像中<每个灰度级像素的累积个数,s(i):0,1,```,i-1
end

for i=1:256
s(i) = s(i)*256/(width*height); %求灰度映射函数
if s(i) > 256
s(i) = 256;
end
end

%图像均衡化
I_equal = I;
for i=1:height
for j=1:width
I_equal(i,j) = s( I(i,j) + 1);
end
end
figure,imshow(I_equal) %显示均衡化后的图像
title('均衡化后图像')
imwrite(I_equal,'1_equal.bmp');



实现结果如下:

原图                                                                       灰度图                                                                    均衡化后

直方图均衡化—matlab实现直方图均衡化—matlab实现直方图均衡化—matlab实现



亲们,是这样么?!是这样么?!!肿么会是这样的呢~~~~~~~直方图均衡化—matlab实现


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~是不是错了?彩色图像的均值化到底肿么弄涅~~

对于灰度图的均衡化,

参考:http://blog.csdn.net/xiajun07061225/article/details/6910129

%直方图均衡化  
clear;
I = imread('mm_gaussian_gray.bmp');
[height,width] = size(I);
figure
subplot(221)
imshow(I)%显示原始图像
subplot(222)
imhist(I)%显示原始图像直方图

%进行像素灰度统计;
s = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
for j = 1: width
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
p(i) = s(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
c(1) = p(1);
for i = 2:256
c(i) = c(i - 1) + p(i);
end
%累计分布取整,将其数值归一化为1~256
c = uint8(255 .* c + 0.5);
%对图像进行均衡化
for i = 1:height
for j = 1: width
I(i,j) = c(I(i,j)+1);
end
end

subplot(223)
imshow(I)%显示均衡化后的图像
subplot(224)
imhist(I)%显显示均衡化后的图像的直方图

直方图均衡化—matlab实现

参考  http://blog.csdn.net/xiajun07061225/article/details/6910129