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('直方圖均衡化后的圖');

  結果:

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM