圖像的灰度化原理和實現


一、圖像的灰度化處理的基本原理

將彩色圖像轉化成為灰度圖像的過程成為圖像的灰度化處理。彩色圖像中的每個像素的顏色有RGB三個分量決定,而每個分量有255中值可取,這樣一個像素點可以有1600多萬(255*255*255)的顏色的變化范圍。而灰度圖像是RGB三個分量相同的一種特殊的彩色圖像,其一個像素點的變化范圍為255種,所以在數字圖像處理種一般先將各種格式的圖像轉變成灰度圖像以使后續的圖像的計算量變得少一些。灰度圖像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級的分布和特征。圖像的灰度化處理可用兩種方法來實現。

第一種方法使求出每個像素點的RGB三個分量的平均值,然后將這個平均值賦予給這個像素的三個分量。

第二種方法是根據YUV的顏色空間中,Y的分量的物理意義是點的亮度,由該值反映亮度等級,根據RGBYUV顏色空間的變化關系可建立亮度YRGB三個顏色分量的對應:Y=0.3R+0.59G+0.11B,以這個亮度值表達圖像的灰度值。

二、Delphi進行圖像灰度化的實現:

procedure TForm1.BitBtn1Click(Sender: TObject);

var

  p:PByteArray;

  //PByteArray的定義格式

  //PByteArray = ^TByteArray;

  //TByteArray = array[0..32767] of Byte;

  ChangedBmp : Tbitmap;

  gray,x,y:integer;

  TestBMP : Tbitmap;   // 處理過程中位圖

begin

  TestBMP:=Tbitmap.Create;

  ChangedBmp:=Tbitmap.Create;

  TestBMP.Assign(image1.Picture);

  for y := 0 to TestBMP.Height - 1 do

  begin

        //獲取每一行象素信息

    p := TestBMP.scanline[y];

    for x := 0 to TestBMP.Width - 1 do

    begin

    //這里采用YUVRGB顏色空間變換的方法, Y0.3R+0.59G+0.11B

      Gray := Round(p[3 * x + 2] * 0.3 + p[3 * x + 1] * 0.59

            + p[3 * x] * 0.11);

    //由於是24位真彩色,故一個像素點為三個字節

      p[3 * x + 2] := byte(Gray);

      p[3 * x + 1] := byte(Gray);

      p[3 * x] := byte(Gray);

    //Gray的值必須在0255之間

    end;

      ChangedBmp.Assign(TestBMP);

      PaintBox1.Canvas.CopyMode:=srccopy;

      PaintBox1.Canvas.Draw(0,0,ChangedBmp);//PaintBox控件重新繪制圖像;

  end;

三、注意事項:

 程序申請了TestBMPWillbeChangedBmp,所以在程序初始化的時候,要注意創建:

       TestBMP:=Tbitmap.Create;

ChangedBmp:=Tbitmap.Create;

     程序結束后注意要把TestBMP.DestoryChangedBmp.Destory;

四、效果 //如下的效果圖我作為轉載者就不貼出來的,圖中的人物是文章的原創作者吧。

轉自:http://blog.csdn.net/chenamo9651/article/details/886699

推薦閱讀:

 

 


免責聲明!

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



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