两种可能的离散值,称为黑白图像。在matlab中,二值图像用一个由0和1组成的二值矩阵表示,1表示该像素处于前景,0表示该像素处于背景。下面,就谈下二值图像的生成以及特征提取等。
1.二值图像的生成
在Matlab中,我们可以用im2bw函数将图像转换为二值图像。
格式:BW=im2bw(I,level);(其中的level是阈值,取值范围为[0,1];当图像里像素小于level则转换成0,否则就大于1。)
2.特征提取
二值图像的特征主要有两个,图像面积以及图像拓扑。
1)图像面积(图像中前景的像素个数)
area=bwarea(BW);
——计算图像中某个区域的面积及这个区域的周长,根据它们的比值分析该区域所代表的图像形状
2)欧拉数运算(欧拉数在几何中是对图像拓扑的估计)
欧拉数等于图像中所有对象的总数减去这些对象中孔洞的数目
eul=bweuler(BW,N);N表示连通类型,可用4连接或8连接,默认为8.
当欧拉数为负数时,表示图像中孔洞的数目是大于对象的数目。另外,利用欧拉数进行聚类分析是模式识别的一种常用方法。
3.基于对象的操作
连接规则:
4-连接:只有垂直和水平方向的连接点可以成为连接像素
8-连接:所有8个连接点均可以成为连接像素
1)对象标记和选择
a.对象标记
L=bwlabel(BW,n); 【n表示区域连通数,默认8】—对二值图像各个分离部分进行标记
b.对象选择
BW2=bwselect(BW1,c,r,n);【r,c可以是标量或向量,,表示像素位置】
BW2=bwselect(BW1,n);【交互的方式确定提取对象的起始坐标】
[BW2,idx]=bwselect(...);【idx是对象点数的线性下标】
c.每个对象的特征
stats=imfeature(L,measurements,n);
【measurements表示要计算哪些特征,如"FilledImage","FilledArea","EulerNumber"】
d.种子填充
填充操作时一种通过像素边界求取对象的操作。
与其他填充操作不同之处:是对背景像素进行操作,而不是对前景像素进行操作。如果前景是4-,则背景是8-连接。
BW2=imfill(BW,LOCATIONS,COIN);
【LOCATIONS表示填充起始点;COIN表示使用的连接规则,默认4】
2)边界标记
边界定义:
A.像素的值为1 B.像素邻域中至少有一个像素的值是0
BW2=bwperim(BW1,n);——对二值图像进行边界提取 【n默认是8】
例:
BW=imread('tire.tif');
BW1=im2bw(BW);
BW2=bwperim(BW1,8);
subplot(1,2,1);
imshow(BW),title('原图像');
subplot(1,2,2);
imshow(BW2),title('边界标记的图像');
4.形态学应用
1)查找表操作——提高运算速度
函数:makelut 功能:为2X2和3X3的边沿创建查找表。
lut=makelut(fun,n)
【lut是一个double型,n取值为2或3,表示fun的输入值的尺寸】
函数:applylut 功能:对二值图像执行邻域操作,生成对lut的索引矩阵,然后用lut中的实际值替换索引值。
A=applylut(BW,lut);
2)形态重构(基于膨胀操作的运算)
强调图像中与掩膜图像指定对象相一致的部分,同时忽略图像中其他对象。
3)距离变换
提供一个图像像素点的距离估计矩阵,根据该矩阵可以进行图像分割。
4)图像的极值处理方法
通过一些函数能寻找图像的局部极大值和极小值。