两种可能的离散值,称为黑白图像。在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)图像的极值处理方法

通过一些函数能寻找图像的局部极大值和极小值。