图像处理之二值形态学(2)

       谈及二值形态学,自然离不开二值图像。那何为二值图像呢?二值图像是一种所有像素值只能在两种可能的离散值,称为黑白图像。在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)图像的极值处理方法

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

猜你喜欢

转载自459838660.iteye.com/blog/2201181
今日推荐