图像二值化
来源:互联网 发布:阿里云服务器备案时间 编辑:程序博客网 时间:2024/05/19 09:14
原文链接:http://blog.csdn.net/chenamo9651/article/details/886749
1、 图像的二值化的基本原理
图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为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、 处理的效果
- 图像二值化
- 图像二值化
- 图像二值化
- 图像二值化
- 图像二值化
- 图像二值化
- 图像二值化
- 图像二值化
- 图像处理之二值化图像
- 图像二值化:基于otsu的图像二值化
- 肤色似然图像--图像二值化--code
- android图像处理之图像二值化
- 图像处理之三角法图像二值化
- 图像二值化算法
- 图像二值化算法 【转】
- 图像二值化 (C#)
- 图像二值化算法
- 图像二值化(黑白图)
- Redis anet
- JavaFX 的 Button 控件
- 翻转单词顺序
- printf("%d\n",*(ptr++))讲解
- oracle
- 图像二值化
- 【eclipse Plug-in】几款Eclipse不错的插件
- cocos2d
- 如何进行多线程调试
- 处理并发错误
- [C++STDlib基础]关于数学函数的介绍——C++标准库头文件<cmath>
- [C++STDlib基础]关于C标准输入输出的操作——C++标准库头文件<cstdio>
- 在VC++6.0中调通官网上opencv和MFC完美结合的经典例程需要注意到几点问题
- Ubuntu 10.04 下载android 4.1.1_r4