|
圖像的灰度化處理的基本原理
將彩色圖像轉(zhuǎn)化成為灰度圖像的過程成為圖像的灰度化處理。彩色圖像中的每個(gè)像素的顏色有R、G、B三個(gè)分量決定,而每個(gè)分量有255中值可取,這樣一個(gè)像素點(diǎn)可以有1600多萬(wàn)(255*255*255)的顏色的變化范圍。而灰度圖像是R、G、B三個(gè)分量相同的一種特殊的彩色圖像,其一個(gè)像素點(diǎn)的變化范圍為255種,所以在數(shù)字圖像處理種一般先將各種格式的圖像轉(zhuǎn)變成灰度圖像以使后續(xù)的圖像的計(jì)算量變得少一些。灰度圖像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級(jí)的分布和特征。圖像的灰度化處理可用兩種方法來(lái)實(shí)現(xiàn)。
第一種方法使求出每個(gè)像素點(diǎn)的R、G、B三個(gè)分量的平均值,然后將這個(gè)平均值賦予給這個(gè)像素的三個(gè)分量。
第二種方法是根據(jù)YUV的顏色空間中,Y的分量的物理意義是點(diǎn)的亮度,由該值反映亮度等級(jí),根據(jù)RGB和YUV顏色空間的變化關(guān)系可建立亮度Y與R、G、B三個(gè)顏色分量的對(duì)應(yīng):Y=0.3R+0.59G+0.11B,以這個(gè)亮度值表達(dá)圖像的灰度值。
二、用Delphi進(jìn)行圖像灰度化的實(shí)現(xiàn):
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
//這里采用YUV與RGB顏色空間變換的方法,即 Y=0.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位真彩色,故一個(gè)像素點(diǎn)為三個(gè)字節(jié)
p[3 * x + 2] := byte(Gray);
p[3 * x + 1] := byte(Gray);
p[3 * x] := byte(Gray);
//Gray的值必須在0~255之間
end;
ChangedBmp.Assign(TestBMP);
PaintBox1.Canvas.CopyMode:=srccopy;
PaintBox1.Canvas.Draw(0,0,ChangedBmp);//用PaintBox控件重新繪制圖像;
end;
三、注意事項(xiàng):
程序申請(qǐng)了TestBMP、WillbeChangedBmp,所以在程序初始化的時(shí)候,要注意創(chuàng)建:
TestBMP:=Tbitmap.Create;
ChangedBmp:=Tbitmap.Create;
程序結(jié)束后注意要把TestBMP.Destory和ChangedBmp.Destory;
|
評(píng)分
-
查看全部評(píng)分
|