加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

图像的反色原理和实现(转)

(2008-06-24 10:36:05)
标签:

it

 

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

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

四、效果

图像的反色原理和实现(转)

新一篇: 图像的反色原理和实现

1、  图像的二值化的基本原理

图像的二值化处理就是讲图像上的点的灰度置为0255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。

2、  图像的二值化的程序实现

通过Delphi刻度控件调整阀值,实现动态控制,程序如下:

procedure TForm1.Button1Click(Sender: TObject);

var

        p:PByteArray;

        Gray,x,y:integer;

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

                                           //首先将图像灰度化

                        gray:=round(p[x*3+2]*0.3+p[x*3+1]*0.59+p[x*3]*0.11);

                        if gray> TrackBar1.Position then //按阀值进行二值化

                        begin

                                p[x*3]:=255; p[x*3+1]:=255; p[x*3+2]:=255;

                        end

                        else

                        begin

                                p[x*3]:=0;p[x*3+1]:=0;p[x*3+2]:=0;

                        end;

                end;

        end;

        ChangedBmp.Assign(TestBMP);

        PaintBox1.Canvas.CopyMode:=srccopy;

        PaintBox1.Canvas.Draw(0,0,ChangedBmp);

 end;

3、  处理的效果

 图像的反色原理和实现(转)

 

特别感谢网友:http://blog.csdn.net/chenamo9651/archive/2006/07/07/886749.aspx

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有