MATLAB 图像处理-线性变换和直方图均衡

如何在MATLAB中对于已经被表示成数字矩阵的图像进行处理
 

一、 灰度拉伸变换

  把图像中每个像素点的灰度值,按照希望达到的效果,以线性变化的形式,进行变换。
  如下图,就是一种分段函数形式,把输入的X轴灰度值变换为输出的Y轴灰度值,只是将灰度值做分段线性变换。分段函数控制点(r1,s1)(r2,s2)
 
  创建分段函数:  
function [ new ] = StretchFunc(original, x1, y1, x2, y2 )
    new = original;

    w = size(new, 1);
    h = size(new, 2);

    k1 = y1 / x1;

    dk1 = (y2 - y1) / (x2 - x1);
    dk2 = (500 - y2) / (500 - x2);

    for i = 1 : w
        for j = 1 : h
            x = new(i, j);
            if x < x1
                new(i, j) = k1 * x;
            elseif x < x2
                new(i, j) = dk1 * (x - x1) + y1;
            else
                new(i, j) = dk2 * (x - x2) + y2;
            end
        end
    end
end
%读入图片
O=imread('F:\Maths\tupian.jpg');
%进行线性变换,设置转折点为(200,100)和(300,400)
NO=StretchFunc(O,200,100,300,400);
%显示原图和变换后的图片
figure,imshow(O);
title('原图');
figure,imshow(NO,[]);
title('变换后');

结果图:

 

二、直方图均衡

  函数功能,画出图像的直方图,并对图像进行直方图均衡

  直接读图像tupian.jpg,读到O中

  graydis是原始直方图各灰度级像素个数

  原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro

  t[]计算和原始灰度对应的新的灰度t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标

  new_graydis是统计新直方图各灰度级像素个数

  计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro

  计算直方图均衡后的新图NO

%读入图片
O=imread('F:\Maths\tupian.jpg');

graydis=zeros(1,256);           %设置矩阵大小

graydispro=zeros(1,256);

new_graydis=zeros(1,256);

new_graydispro=zeros(1,256);

[h w]=size(O);

NO=zeros(h,w);

%计算原始直方图各灰度级像素个数graydis

for x=1:h

     for y=1:w

         graydis(1,O(x,y))=graydis(1,O(x,y))+1;

     end

end

%计算原始直方图graydispro

graydispro=graydis./sum(graydis);

subplot(1,2,1);

plot(graydispro);

title('灰度直方图');

xlabel('灰度值');ylabel('像素的概率密度');

%计算原始累计直方图

for i=2:256

    graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);

end

%计算和原始灰度对应的新的灰度t[],建立映射关系

for i=1:256

t(1,i)=floor(254*graydispro(1,i)+0.5);

end

%统计新直方图各灰度级像素个数new_graydis

for i=1:256

    new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i);

end

%计算新的灰度直方图new_graydispro

new_graydispro=new_graydis./sum(new_graydis);

subplot(1,2,2);

plot(new_graydispro);

title('均衡化后的灰度直方图');

xlabel('灰度值');ylabel('像素的概率密度');

%计算直方图均衡后的新图NO

for x=1:h

    for y=1:w

      NO(x,y)=t(1,O(x,y));

    end

end

figure,imshow(O);

title('原图');

figure,imshow(NO,[]);

title('直方图均衡化后的图');

  结果:

 
 
 
 

posted on 2015-12-06 00:10  忽而今夏  阅读(5131)  评论(0编辑  收藏  举报