您现在的位置:首页 >> 图形媒体 >> 图形媒体 >> 内容

Delphi中GDI+实现图像二值化

时间:2011/9/3 15:01:09 点击:

  核心提示:// 灰度或者二值化彩色图像procedureGrayImage(Image:TGpImage;Threshold:Single=0.0);constColorMatrix:TColorMatrix=...
// 灰度或者二值化彩色图像 procedure GrayImage(Image: TGpImage; Threshold: Single = 0.0);
const
  ColorMatrix: TColorMatrix =
   ((0.3, 0.3, 0.3, 0.0, 0.0),
    (0.59, 0.59, 0.59, 0.0, 0.0),
    (0.11, 0.11, 0.11, 0.0, 0.0),
    (0.0, 0.0, 0.0, 1.0, 0.0),
    (0.0, 0.0, 0.0, 0.0, 1.0));
var
  Tmp: TGpImage;
  attr: TGpImageAttributes;
  g: TGpGraphics;
begin
  Tmp := Image.Clone;
  g := TGpGraphics.Create(Image);
  attr := TGpImageAttributes.Create;
  try
    attr.SetColorMatrix(ColorMatrix);        // 灰度化
    if Threshold > 0.0 then                        // 如果给出了阀值,在灰度图基础上二值化
      attr.SetThreshold(Threshold);
    g.DrawImage(Tmp, GpRect(0, 0, Image.Width, Image.Height),
                0, 0, Tmp.Width, Tmp.Height, utPixel, attr);
  finally
    g.Free;
    attr.Free;
    Tmp.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Image: TGpImage;
  g: TGpGraphics;
begin
  Image := TGpImage.Create('..mediaFRUIT.jpg');
  g := TGpGraphics.Create(Handle, False);
  g.DrawImage(Image, 10, 10, Image.Width, Image.Height);
  GrayImage(Image, 0.5);
  g.DrawImage(Image, 220, 10, Image.Width, Image.Height);
  g.Free;
  image.Free;
end;
从例子可以看出,彩色图像二值化,就是在其灰度化基础上给定一个0 - 1之间的阀值,所谓阀值就是每种颜色成分的分界点。假定阈值设置为 0.7,并且假定当前所呈现的颜色中的红色、绿色和蓝色成分分别为 230、50 和 220,那么红色成分 230 大于 0.7x255,因此,红色成分将更改为 255(全亮度);绿色成分 50 小于0.7x255,因此,绿色成分将更改为 0; 蓝色成分 220 大于 0.7x255,因此,蓝色成分将更改为 255。

    由此可以看出,在正确得到灰度图图后,二值化程度的关键就在这个阀值。所以关于如何确定阀值的理论也就成立图像二值化最主要的理论。

Tags:实现 图像 
作者:maozefa 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2022 版权所有 All Rights Reserved.
  • 沪ICP备05001939号