直方图均衡化—matlab实现

步骤:

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

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

家里灰度级得映射规则

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


代码:

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实现_第1张图片直方图均衡化—matlab实现_第2张图片直方图均衡化—matlab实现_第3张图片



亲们,是这样么?!是这样么?!!肿么会是这样的呢~~~~~~~惊讶


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

对于灰度图的均衡化,

参考: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实现_第4张图片

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

你可能感兴趣的:(c,matlab)