您的位置:首页 > 编程语言 > MATLAB

MATLAB 直方图,线性变换,直方图均衡化

2015-05-12 10:35 260 查看

1.给定图像输出直方图

img = imread('E:\matlab\work\1.jpg');    
p=rgb2gray(img);    %转为灰度图像
imhist(p);


效果:



2.给定一个线性变换函数,实现图像的灰度拉伸

I = imread('E:\matlab\work\lenna.bmp')
I2=I.*2-50  %做线性变换 
imshow(I2); %显示经过线性变换后的图像


3.实现对图像的均衡化

I = imread('E:\matlab\work\lenna.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的函数 histeq(I,256)

效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: