Delphi中GDI+实现图像二值化

本文介绍了一种将彩色图像转换为灰度图像并进行二值化的方法,通过使用特定的颜色矩阵来实现灰度化,然后根据设定的阈值进行二值化处理,关键在于选择合适的阈值。

 

// 灰度或者二值化彩色图像
procedure GrayImage(Image: TGpImage; Threshold: Single = 0.0);
const
  ColorMatrix: TColorMatrix 
=
   ((
0.30.30.30.00.0),
    (
0.590.590.590.00.0),
    (
0.110.110.110.00.0),
    (
0.00.00.01.00.0),
    (
0.00.00.00.01.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(
00, Image.Width, Image.Height),
                
00, 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, 
1010, Image.Width, Image.Height);
  GrayImage(Image, 
0.5);
  g.DrawImage(Image, 
22010, 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。
    由此可以看出,在正确得到灰度图图后,二值化程度的关键就在这个阀值。所以关于如何确定阀值的理论也就成立图像二值化最主要的理论。

转载于:https://www.cnblogs.com/rogee/archive/2010/09/15/1827318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值