您的位置:首页 > 编程语言 > MATLAB

【转】matlab图像处理学习笔记-数学形态与二值图像操

2010-05-06 00:04 543 查看
数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单。
9.1 数学形态学图像处理
基本思想:利用一个称作结构元素(structuring element)的探针收集图像信息。当探针在图像中不断移动时,
便可考察图像各个部分见的相互关系,从而了解图像各个部分的结构特征。作为探针的结构元素,可直接携带只是(形态、大小以及灰度和色度信息)
来探测所研究图像的结构特点。
基本运算:数字形态学的基本运算是腐蚀和膨胀。
平移:就是将图像A平移到以b为原点的坐标系中。
反射:图像A相对于坐标原点的对称结果。
开运算:即A先被B腐蚀,再被B膨胀;
闭运算:即A先被B膨胀,再被B腐蚀;
根据开、闭运算的特点,通常可以利用开运算删除图像中的小分支,利用不运算填补图像中的空穴;
形态学的直奔运算满足以下特点:
1、膨胀和复试运算具有平移不变性,即对图像A进行复试和膨胀的结果运算只取决于A与B得结构,而与A得为之无关。
2、开运算可以使图像缩小,闭运算可以使图像增大。
9.3数学图形学的运算的基本函数
1、二值图像的膨胀运算 dilate(BW,SE,alg,n),SE为一个数据结构,具体为什么,也不是特别清楚,alg=‘spatial’在空域上实现
alg=‘frequency’,在频域上实现,无论空域上实现还是频域上实现,运算结果都一样,但是对于大图像来说,运算的速度会快一些
n代表对图像进行膨胀的次数。
I=imread('rice.tif');
imshow(I);
a=ones(5);
b=dilate(I,a);
figure,imshow(b);

2、erode(bw,SE,alg,n)
此函数同dilate()函数的功能基本是一样的。
3、对图像进行指定的操作 bwmorph(bw,operation,n)
bw是二值图像,operation是指定的操作,为字符串,n代表进行操作的次数
operation的可选值及其含义为:
bothat,闭包运算,即先腐蚀,再膨胀,然后减去源图像
bridge,作连接运算即将两个1中间相隔的一个0变为1;
clean,去除孤立的亮点,如
0 0 0
0 1 0
0 0 0
变为
0 0 0
0 0 0
0 0 0
diag,采用对角线填充来去除8邻接的背景
dilate用结构元素ones(3)作膨胀运算
erode,用结构元素ones(3)作腐蚀运算
fill,填充孤立的黑点,
hbreak,断开H形连接,如
1 1 1
0 1 0
1 1 1
变为
1 1 1
0 0 0
1 1 1
majority,若像素的8邻域中有大于或等于5的元素为1,否则为0
remove,如掉内点,即如果像素4的邻域都为1,则像素为0
shrink,n=Inf,作收缩运算。没有孔的物体收缩为一个点,有孔的物体收缩为一个环,
收缩运算保持欧拉数不变
skel,n=Inf,提取物体的骨架。即去除物体外边缘的点,但保持物体不发生断裂,同一昂保持欧拉数不变
spur,去除物体小的分支
tophat,用原图像减去开运算后的图像

9.2 基于对象的操作
对象是指值为1且连接在一起的像素
4邻域和8邻域

9.22边界识别
bwperim函数用于提取二值图像中对象的边界像素。边界元素必须满足:值为1,邻域中至少有一个为0
此函数用于将图像的边界轮廓显示出来。
bwperim(I,n)
例如:
I=imread('circbw.tif');
imshow(I);
a=bwperim(I,8);
figure,imshow(a);

9.23种子填充
是指首先指定一个背景点作为起始点不断把与之相邻的背景点的0变为1,知道达到对象的边界。种子填充对于去除图像中不规则的形状很有效。比如反光现象
种子填充的函数为bwfill(bw,c,r,n),c、r为填充起始坐标,xi,yi为坐标终点,holes为空洞
bwfill(bw,n)/bwfill(x,y,bw,xi,yi,n)/bwfill(bw,'holes',n)
起始点是指bw(c,r)点所在的位置

9.24连通区域标记
bwlabel函数可对二值图像的连接部分进行标记,它主要用于对二值图像中各个分离部分进行标记
L=bwlabel(I,n)L为返回的标记后的数组
[L,num]=bwlabel(I,n) num返回标记的区域的数量

9.25选择对象
对象是指值为1,且连接起来的像素的集合,而bwselect函数就是用来选择这种对象的
语法如下:
a=bwselect(I,c,r,n)、bwselect(bw,n)/ bwselect(x,y,bw,xi,yi) bwselect
其中c和r代表起始点的x、y坐标,当出现xi、yi的时候,x、y为非默认的坐标系,当没有出现I的时候,为鼠标选定的坐标,并按回车确定
9.3特征提取
图像面积函数bwarea(I),用来返回图像前景像素为1的个数。
欧拉数函数bweuler(I,n),用来求图像的欧拉数,欧拉数是图像的一种拓扑度量,欧拉数等于图像中对象的总数减去空洞的数量。
面积函数和欧拉数函数返回的都是单个的数值

9.4查找表
查找表是一个列向量,他把一个像素邻域点的所有可能组合保存起来,使得大量的运算问题转化为查表问题,一些二值图像操作如果采用查找表,可以大大提高运算的速度

1、makelut(fun,n) 它返回函数fun定义的查找表,n为邻域尺寸,如:
f=inline('sum(x(:))>=2');
lut=makelut(f,2)

2、applylut 函数用于基于查找表的二值图像处理,也就是在makelut的基础之上进行操作
A=applylut(bw,lut)

9.5 基于特征的逻辑运算
在二值图像处理中,利用图像的逻辑运算可以实现基于特征的与运算和从图像中提取感兴趣的物体的功能
9.51、基于特征的与运算
该运算主要用于以一幅图像为模板,求取与另一部风图像的重合部分的对象,但是两张图像的大小得相同
如下
a=imread('rice.tif');
b=imread('circles.tif');
local_and=a & b;
[r,c]=find(local_and);
feature_and=bwselect(b,c,r);
imshow(feature_and)

9.52利用逻辑运算提取物体
bacteria=imread('bacteria');
bact_bw=(bacteria>=100);
imshow(bact_bw);
filtered=filter2(fspecial('laplacian'),bacteria)
bact_granules=(filtered>-4) & bact_bw;
imshow(filtered)
figure,imshow(bact_granules)
granules=erode(bact_bw)&(bact_granules)=0;
imshow(granules);
[r,c]=find(granules);
result=bwselect(bact_bw,r,c);
imshow(bacteria);
figure,imshow(result);

本章属于简单型章节,操作没有什么难的,主要是理解的问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: