`
海王子1994
  • 浏览: 43682 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多

  在弄图像处理的时候,我们都会经常接触到“二值化”这个名词。例如下面的指纹识别流程中,二值化是作为指纹图像预处理中间关键的一环。

 



 

在此之前,如果你对图像处理的基础知识不熟悉,可以看下之前写的博客巩固下,方便下面的理解。大笑


 

要了解二值化,我们就要认识二值形态学,因为二值化是它其中的一部分内容。二值形态学里的涉及的基本运算及操作多而且偏复杂,需要有一定的耐心才能很好消化吸收。
 

二值形态学

 

1.1基本思想:用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。

 

1.2优点:
1)在图像恢复处理中,基于数学形态学的形状滤波器可借助于先验的几何特征信息,利用形态学算子有效地滤除噪声,又可以保留图像中的原有信息。
2)边缘信息提取处理,不像微分算法对噪声那样敏感,同时,提取的边缘也比较平滑,利用数学形态学方法提取的图像骨架也比较连续、断点少。

 

2.图像形态学

 

首先,我们要认识下最为常用的两个概念,膨胀腐蚀

 

a.膨胀:给图像中的对象边界添加像素,输出像素值是输入图像相应像素邻域内所有像素的最大值。

b.腐蚀:删除图像边界元素,输出像素值是输入图像相应像素邻域内所有像素的最小值。

 

然后,由于膨胀和腐蚀不是互为逆运算,所以可以结合膨胀和腐蚀,又产生了两种运算:开启和闭合。

 

c.开启:先对图像做腐蚀运算,然后对腐蚀结果做膨胀运算。——消除了尺寸较小的亮细节

d.闭合:先对图像做膨胀运算,然后对膨胀结果做腐蚀运算。——消除了尺寸较小的暗细节

 

 谈到膨胀和腐蚀运算,就必须扯到结构元素,它就好比是工具一样。在通常情况下,形态学图像处理以在图像中移动一个结构元素并进行一种类似卷积操作的方式进行。运算产生的效果是取决于结构元素的大小、内容以及逻辑运算的性质。它可以具有任意大小,也可以包含任意的0与1组合。

 

例:

function A=exa_delete(I)
bw=imread(I);
se=strel('line',11,90);   %创建一个线性结构元素
bw2=imdilate(bw,se);      %用线性结构元素来做膨胀操作
bw3=imerode(bw,se);       %用线性结构元素来做腐蚀操作
I1=bwmorph(bw,'open');    %对图像进行开启运算     
I2=bwmorph(bw,'close');   %对图像进行闭合运算
subplot(2,3,1);
imshow(bw);title('原始图像');
subplot(2,3,2);
imshow(bw2);title('膨胀图像');
subplot(2,3,3);
imshow(bw3);title('腐蚀图像');
subplot(2,3,4);
imshow(I1);title('开启运算图像');
subplot(2,3,5);
imshow(I2);title('闭合运算图像');

 



 

 这里说下bwmorph函数,它的功能是对图像做指定的形态运算

 

语法格式:BW2=bwmorph(BW1,operation,n)

 

注:
1)n表示次数,可以取Inf,在这种情况下,操作将持续到图像不再变化为止
2)BW1可以取double型或者unit8型。

 

operation参数有非常多,如bothat(闭合运算)、fill(填充运算)、bridge(连接运算)等等,所以这个函数可以实现的功能非常多!!!

 

3. 细化与骨架提取

 

细化:把输入的具有一定宽度的图像轮廓用逐次去掉边缘的方法最终变为宽度仅为一个像素的骨架。

 

细化通过两步腐蚀来实现:
1)有条件的正常腐蚀,那些被标为除去的像素点并不立刻被除去
2)只去掉那些消除后不破坏连通性的点

 

抽取骨架:也称为中轴变换或焚烧草技术。中轴是所有与物体在两个或更多非邻接边界点处相切的圆心的轨迹。概念上,中轴可设想成按如下方式形成:想象一片与物体形状相同的草,沿其外围各点同时点火,火势向内蔓延,向前推进的火线相遇处各点的轨迹就是中轴。

 

 例:

 

function A=exa_delete(I)
BW1=imread(I);
imshow(BW1);
%用形态学算子去掉图像的内点:若像素的四邻域为1,则像素值为0,使边缘像素是亮点
BW2=bwmorph(BW1,'remove');
%用形态学算子抽取图像的骨架
BW3=bwmorph(BW1,'skel',Inf);
%用形态学算子细化图像
BW4=bwmorph(BW1,'thin',Inf);
subplot(2,2,1);
imshow(BW1);title('原图像');
subplot(2,2,2);
imshow(BW2);title('去除内点图像');
subplot(2,2,3);
imshow(BW3);title('图像骨架');
subplot(2,2,4);
imshow(BW4);title('图像细化');

 

高帽变换可以增强图像的对比度,体现了原始图像中的灰度峰值。

 

function A=exa_delete(BW)
I=imread(BW);
subplot(1,3,1);
imshow(I),title('原始图像');
se=strel('disk',12);
J=imtophat(I,se);    %利用结构元素,进行高帽变换
subplot(1,3,2);
imshow(J);title('高帽变换的结果');
%为了提高图像的可视化,进行直方图变换
K=imadjust(J,stretchlim(J));
subplot(1,3,3);
imshow(K);title('对比度增强的结果');

 

 

 

 

 

 

 

 

  • 大小: 12.8 KB
  • 大小: 3.9 KB
  • 大小: 28 KB
  • 大小: 172.8 KB
1
2
分享到:
评论
3 楼 laogao3232 2015-04-10  
我当年毕业设计就是用matlab处理图像的。
2 楼 jhq198 2015-04-10  
comsci 写道
老大,你这个软件是什么语言开发的? 开源否?

明显人家打了matlab的标签啊 呵呵
1 楼 comsci 2015-04-10  
老大,你这个软件是什么语言开发的? 开源否?

相关推荐

Global site tag (gtag.js) - Google Analytics