图像灰度化处理的实现 delphi 图像处理学习 2008-07-22 18:43 阅读153 评论0 字号: 大 中 小 一、 图像的灰度化处理的基本原理 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有 R、G、B三个分量决定,而每个分量有 255 中值可取,这样一个像素点可以有1600 多万(255*255*255)的颜色的变化范围。而灰度图像是 R、G、B 三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255 种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。 第一种方法使求出每个像素点的R、G、B 三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。 第二种方法是根据YUV 的颜色空间中,Y 的分量的物理意义是点的亮度,由该值反映亮度等级,根据 RGB和 YUV 颜色空间的变化关系可建立亮度 Y 与 R、G、B 三个颜色分量的对应: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 //这里采用 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 位真彩色,故一个像素点为三个字节 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;...