图像的灰度化原理和实现

 

一、图像的灰度化处理的基本原理

将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有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;

四、效果

  • 15
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值