图像灰度化原理和实现
来源:互联网 发布:阿里云服务器备案时间 编辑:程序博客网 时间:2024/06/06 19:10
图像的灰度化原理和实现
一、图像的灰度化处理的基本原理
将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有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;
三、注意事项:
程序申请了TestBMP、WillbeChangedBmp,所以在程序初始化的时候,要注意创建:
TestBMP:=Tbitmap.Create;
ChangedBmp:=Tbitmap.Create;
程序结束后注意要把TestBMP.Destory和ChangedBmp.Destory;
四、效果 //如下的效果图我作为转载者就不贴出来的,图中的人物是文章的原创作者吧。
转自:http://blog.csdn.net/chenamo9651/article/details/886699
推荐阅读:
- 图像的二值化原理和实现
- 图像的灰度化原理和实现
- 图像的滤波原理和实现
- 图像的反色原理和实现
- 图像的灰度化原理和实现
- 图像的灰度化原理和实现
- 图像的灰度化原理和实现
- 图像灰度化原理和实现
- [图像]图像灰度均衡化和灰度直方图(Matlab实现)
- Atitit 图像处理 灰度图片 灰度化的原理与实现
- 图像灰度化的实现
- otsu(大津法)灰度图像二值化方法的原理和C实现
- 灰度图像直方图的规定化的原理及代码实现
- 灰度图像的对数变换原理及OpenCV代码实现!
- Matlab实现图像插值和降低图像灰度级
- Delphi图像处理 -- 灰度化和灰度直方图
- HTML5 组件Canvas实现图像灰度化
- BMP图像的灰度化---C++实现
- java 加载图像,显示图像和图像的灰度化
- 图像的二值化和灰度化
- 图像的二值化和灰度化
- 图像处理灰度化和二值化
- lsof 应用实例分享以及Oracle 数据文件删除恢复测试
- 详细的Linux shell脚本基础学习
- Paypal收款扣手续费计算方法,终于遇到了次
- 小结牛腩新闻发布系统遇到的问题
- 【月入41万】Mono For Android中使用百度地图SDK
- 图像灰度化原理和实现
- Redis anet
- JavaFX 的 Button 控件
- 翻转单词顺序
- printf("%d\n",*(ptr++))讲解
- oracle
- 图像二值化
- 【eclipse Plug-in】几款Eclipse不错的插件
- cocos2d