一、基本形态学运算
(1)概念部分
形态学
:通常指生物学中对动植物的形状和结果进行处理的一个分支;
数学形态学
:是根据形态学概念发展而来的具有严格数学理论基础的科学,并在图像处理和模式识别领域得到了成功应用。
基本思想
是:
用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的
形态学图像处理表现为一种领域运算形式:
一种特殊定义的邻域称之为“结构元素”,在每个像素位置上它与二值图像对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图像的相应像素
形态学运算的效果取决于结构元素的大小,内容以及逻辑运算的性质
用途是
:
简化图像数据,保持它们基本的形状特性,并出去不相干的结构
基本运算包括
:
二值腐蚀和膨胀,二值开闭运算
二值图像中的基本逻辑操作
:与、或、非(补);尽管逻辑操作与集合操作存在一一对应关系,但逻辑操作只是针对二值图像
二值形态学基本运算
:膨胀、腐蚀、开和闭
开操作opening
:B对A进行的开操作就是先用B对A腐蚀,然后用B对结果进行膨胀;开运算平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分和噪声
闭操作closing
:B对A进行的闭操纵就是先用B对A膨胀,然后用B对结果进行腐蚀;闭运算使物体的轮廓线变得光滑, 将狭窄的缺口连接起来,并填充比结构元素小的洞口
开操作的作用
:
使轮廓平滑,抑制A物体边界的小的离散点或尖峰,用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不改变其面积
闭操作的作用
:
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积
函数Strel用来构造各种形状和大小的结构元素
Se = strel(shape, parameters)
Se = strel(‘diamond’, R)创建一个
平坦的菱形结构
元素,其中R是从结构元素原点到菱形的最远点距离
Se = strel(‘diamond’,5)
Se = strel(‘disk’,R)创建一个平坦的
圆盘形结构
的元素,其中半径是R
Se = strel(‘disk’, 5)
Se = strel(‘line’,LEN,DEG)创建一个平坦的
线性元素
,其中LEN表示长度,DEG表示线的角度
Se = strel(‘line’,9,0)
(2)实验代码部分
%练习:
创建图像并进行膨胀操作
bw = zeros(9,9);
bw(3:5, 4:6)=1;%置白
se = strel(‘square’,3)%矩形结构元素
bw2 = imdilate(bw,se)%进行膨胀操作
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2);
%练习:对二值图像进行膨胀
bw = imread(‘text.png’);%读入图像
se = strel(‘line’,11,90);%线性结构元素
bw2 = imdilate(bw, se);
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2)
%练习:对灰度图像进行膨胀
bw = imread(‘cameraman.tif’);
se = strel(‘ball’,5,5);%球形结构元素
bw2 = imdilate(bw,se);
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2);
%练习:对灰度图像进行腐蚀
bw = imread(‘circles.png’);
se = strel(‘disk’,11)%盘型结构元素
bw2 = imerode(bw,se);
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2);
%练习:对图像进行腐蚀和膨胀操作
se = strel(‘rectangle’,[40,30])%矩形结构元素
bw = imread(‘circbw.tif’);
bw1 = imerode(bw,se);
bw2 = imdilate(bw1,se);
subplot(1,3,1),imshow(bw);
subplot(1,3,2),imshow(bw1);
subplot(1,3,3),imshow(bw2);
%练习:对图像进行开运算(先腐蚀再膨胀)
I = imread(‘snowflakes.png’)%读入图像
se = strel(‘disk’,5);%盘型结构元素
I1 = imopen(I,se);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(I1,[]);
%练习:对图像进行闭运算(先膨胀再腐蚀)
I = imread(‘circles.png’)%读入图像
se = strel(‘disk’,10);%盘型结构元素
I1 = imclose(I,se);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(I1,[]);
二、组合形态学运算
(1)图像的边界测定
对于
灰度图像
可以通过形态学的膨胀和腐蚀来获取图像的边缘;利用形态学获取灰度图像边缘的优点是对边缘的方向性依赖比较小;
%练习:通过膨胀和腐蚀获取灰度图像的边缘
I = imread(‘rice.png’);
se = strel(‘disk’,2)%结构元素
J = imdilate(I,se)%膨胀
K = imerode(I,se);%腐蚀
L = J – K;%相减
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(L);
(2)二值图像的形态学操作
通过函数bwmorph()可以进行二值图像的大量形态学操作,例如图像的骨骼化、图像的细化,以及开操作和闭操作等;
语法格式:
(1)BW2 = bwmorph(BW,operation) 对二值图像进行指定的形态学处理(2)BW2 = bwmorph(BW,operation,n) 对二值图像进行n次指定的形态学处理
operation 可以为以下值:
(1)
‘bothat’
:进行”bottom hat”形态学运算,即返回闭运算减去源图像的图像;
(2)
‘branchpoints’
:找到骨架中的分支点;
(3)
‘bridge’
:进行像素连接操作(连接由单个像素缝隙分隔的像素);
(4)
‘clean’
:去除图像中孤立的亮点,比如,一个像素点,像素值为1,其周围像素的像素值全为0,则这个孤立的亮点将被去除;
(5)
‘close’
:进行形态学闭运算(即先膨胀后腐蚀);
(6)
‘diag’
:采用对角线填充,去除八邻域的背景;
(7)
‘dilate’
:使用结构元素*ones(3)
对图像进行膨胀运算;
(8)
‘endpoints’
:找到骨架中的结束点;
(9)
‘erode’
:使用结构元素
ones(3)
对图像进行腐蚀运算;
(10)
‘fill’
:填充孤立的黑点,比如3
3的矩阵,除了中间元素为0外,其余元素全部为1,则这个0将被填充为1;
(11)
‘hbreak’
:断开图像中的H型连接;
(12)
‘majority’
:如果一个像素的8邻域中有等于或超过5个像素点的像素值为1,则将该点像素值置1;
(13)
‘open’
:进行形态学开运算(即先腐蚀后膨胀);
(14)
‘remove’
:如果一个像素点的4邻域都为1,则该像素点将被置0;该选项将导致边界像素点上的1被保留下来;
(15)
‘skef’
:在这里n = Inf,骨架提取但保持图像中物体不发生断裂;
(16)
‘spur’
:去除小的分支,或引用电学术语“毛刺”;
(17)
‘thicken’
:在这里**n = Inf,**通过在边界上添加像素达到加粗物体轮廓的目的;
(18)
‘thin’
:在这里n=Inf,进行细化操作;
%练习:二值图像的细化
I = imread(‘text.png’);
J = bwmorph(I,‘thin’,Inf);%细化
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);
%二值图像的骨架化
I = imread(‘circbw.tif’);%读入图像
J = bwmorph(I,‘skel’,Inf);%骨架化
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);
%移除二值图像的内部像素点
I = imread(‘circles.png’);
J = bwmorph(I,‘remove’);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);
如果某个像素点的4个邻域都为1,则该像素值设置为0,只剩下图像的边界像素点;