形态学图像处理(二)

本文主要包括以下内容

  • 二值形态学的经典应用, 细化和像素化, 以及凸壳
  • 灰度图像的形态学运算, 包括灰度腐蚀、灰度膨胀、灰度开和灰度闭
  • 本章的典型案例分析
    • 在人脸局部图像中定位嘴的中心
    • 显微镜下图像的细菌计数
    • 利用顶帽变换(top-hat)技术解决光照不均问题

细化算法

“骨架”是指一副图像的骨髓部分,它描述物体的几何形状和拓扑结构,是重要的图像描绘子之一,计算骨架的过程一般称为“细化”或“骨架化”,在包括文字识别、工业零件形状识别以及印刷电路板自动检测在内的很多应用中,细化过程都发挥着关键作用。通常,对我们感兴趣的目标物体进行细化有助于突出目标的形状特点和拓扑结构并且减少冗余的信息量。



像素化算法

细化适用于和物体拓扑结构或形状有关的应用, 如前述的手写字符识别。 但有时我们关心的是目标对象是否存在、 它们的位置关系, 或者个数, 这时在预处理中加入像素化步骤会给后续的图像分析带来极大的方便

理论基础
像素化操作首先需找到二值图像中所有的连通区域, 然后用这些区域的质心作为这些连通区域的代表, 即将1个连通区域像素化为位于区域质心位置的1个像素。
有时还可以进一步引入一个低阀值lowerThres和一个高阙值highThres来指出图像中我们感兴趣的对象连通数(连通分量中的像素数目)的大致范围, 从而只像素化图像中大小介于lowerThres和upperThres之间的连通区域, 而连通数低于lowerThres或高于upperThres的对象都将被滤除, 这就相当于使用算法的同时具有了过滤噪声的能力。如图8.29 所示。

凸壳

如果连接物体A内任意两点的直线段都在淫的内部,则称d是凸的。任意物体A的凸亮H是包含A的最小凸物体。
我们总是希望像素化算法能够找到物体的质心来代表读物体,但在实际中,可能由于光照不均等原因导致图像在二值化后,物体本身形状发生缺损,像素化算法就无法找到物体真正的质心。此时可适当地进行凸壳处理,弥补凹损,算法会找到包含原始形状的最小凸多边形,如下图8.30所示.

为确保在上述生长过程中凸壳不会大幅超出凸性所需的最小尺寸, 可以限制其生长以便凸壳不会超出初始时包含物体A的最小矩形.

bwmorph函数
本章的很多形态学操作都可由IPT函数bwmorph实现, 该函数的调用语法为:
Iout = bwmorph(I,operation,n);
operation是一个指定操作类型的字符串, 常用的合法取位如在8.2 所示

灰度图像中的基本形态学运算

本节就们把二值图像的形态学处理扩展到灰度图像的基本操作, 包括灰度膨胀、灰皮腐蚀、灰度开和灰皮闭。此外, 8.4.4 小节还将介绍一个灰度形态学的经典应用一一顶帽变换(top-hat), 用以解决图像的光照不均问题.

灰度膨胀及其实现



matlab实现
只要以灰度图像和相应的灰度膨胀结构元素为参数调用imdilate函数即可实现灰度膨胀,平坦结构元素的创建方法与二值形态学中相同:而非平坦结构元素也可通过 strel函数以如下方式创建。
SE = strel(NHOOD,HEIGHT);
NHOOD 为指明结构元素定义域的矩阵, 只能由0和1 组成.
HEIGHT 是一个与NHOOD 具有相同尺寸的矩阵, 指出了对应于NHOOD 中每个元素的高度.

f = [0 1 2 3 4 5 4 3 2 1 0];
figure,h_f = plot(f);
seFlat = strel([1 1 1]);fd1 = imdilate(f,seFlat);
hold on,h_fd1 = plot(fd1,'-ro');
axis([1 11 0 8]);
setHeight = strel([1 1 1],[1 1 1]);
fd2 = imdilate(f,setHeight);
hold on,h_fd2= plot(fd2,'-g*');
legend('原灰度1维函数f','使用平坦结构元素膨胀','使用高度为1有结构元素膨胀元素膨胀后');

灰度腐蚀及其实现


与二值形态学不同的是,f(x,y)和 S(x,y)不再是只代表形状的集合,而是二维函数,它们的定义域指明了其形状, 它们的值指出了高度信息。

f = [0 1 2 3 4 5 4 3 2 1 0];
figure,h_f = plot(f);
seFlat = strel([1 1 1]);fe1 = imerode(f,seFlat);
hold on,h_fe1 = plot(fe1,'ro');
axis([1 11 0 8]);
seHeight = strel([1 1 1],[1 1 1]);fe2 = imerode(f,seHeight);
hold on,h_fe2=plot(fe2,'-g*');
legend('原灰度1维函数f','使用平坦结构元素腐蚀','使用高度为1有结构元素膨胀元素腐蚀后');

灰度膨胀和灰度腐蚀的效果比较

I = imread('lena.bmp');
seHeight=strel(ones(3,3),ones(3,3));
Idi1= imdilate(I,seHeight);
Iero = imerode(I,seHeight);
subplot(1,3,1),imshow(I);
subplot(1,3,2),imshow(Idi1);
subplot(1,3,3),imshow(Iero);


我们看到在结构元素的值均大于零的情况下, 灰度膨胀的输出图像总体上比输入图像更亮,这是局部最大值运算作用的结果。此外原图像中一些能够包含于结构元素的暗细节〈如
一部分帽子的槽皱和尾穗)被完全消除, 其余的大部分暗部细节也都得到了一定程度上的减少。而灰度腐蚀的作用正好相反, 输出图像比输入图像更暗, 如果输入图像中的亮部细节比结构元素小, 则亮度会得到削弱。

灰度开、 闭运算及其实现

与二值形态学类似,我们可以在灰度腐蚀和膨胀的基础上定义灰度开和闭运算.灰度开运算就是先灰度腐蚀后灰度膨胀,而灰度闭运算则是先灰度膨胀后灰度腐蚀,下面分别给出定义:

这一过程: (a)为图像中的一条水平像素线:(b)和(d)分别给出了球紧贴着该像素线的下侧和上侧被动的情况:而(c)和(e)则展示了滚动过程中球的最高点形成的曲线,它们分别是开、闭运算的结果。

Matlab实现
使用imopen和imdilate同样可以对灰度图像进行开、闭运算, 用法与灰度腐蚀和膨胀类似, 这里不再赘述,在实际应用中, 开操作常常用于去除那些相对于结构元素s而言较小的高灰度区域〈球体滚不上去〉,而对于较大的亮区域影响不大〈球体可以滚上去〉。虽然首先进行的灰度腐蚀
会在去除图像细节的同时使得整体灰度下降, 但随后的灰度膨胀又会增强图像的整体亮度,因此图像的整体灰度基本保持不变:而闭操作常用于去除图像中的暗细节部分, 而相对地保留高灰度部分不受影响.

顶帽交换(top-hat)及其实现

作为灰度形态学的重要应用之一, 这里学习一种非均匀光照问题的解决方案一一顶帽变换技术(top-hat).图像f的顶帽变换h定义为图像f与图像f的开运算之差, 可表示为:
h = f -(f*s)

I = imread('rice.png');
subplot(2,4,1),imshow(I,[]);
thresh = graythresh(I);
Ibw = im2bw(I,thresh);
subplot(2,4,2),imshow(Ibw,[]);
subplot(2,4,3),surf(double(I(1:8:end,1:8:end))),zlim([0 255]),colormap;bg = imopen(I,strel('disk',15));
subplot(2,4,4),surf(double(bg(1:8:end,1:8:end))),zlim([0 255]),colormap;Itophat = imsubtract(I,bg);
subplot(2,4,5),imshow(Itophat);
subplot(2,4,6),surf(double(Itophat(1:8:end,1:8:end))),zlim([0 255]);I2 = imadjust(Itophat);
subplot(2,4,7),imshow(I2);
thresh2 = graythresh(I2);
Ibw2 = im2bw(I2,thresh2);
subplot(2,4,8),imshow(Ibw2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习实战学习笔记 一 k-近邻算法

k-近邻算法很简单,这里就不赘述了,主要看一下python实现这个算法的一些细节。下面是书中给出的算法的具体实现。 def clssify(inX,dataset,label,k):#计算距离datasetSize dataset.shape[0]diffMat tile(inX,(dataSize,1))-datasetsqdiffMat diffMat …

最全的大数据解决方案(多图)

来源:网络大数据未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网&…

Foreach语法

先看例子&#xff1a; Random rand new Random(47);float f[] new float[10];for(int i 0; i < 10; i){f[i] rand.nextFloat();}for(float x: f) {System.out.println(x);} foreach语法&#xff1a; for(float x: f) {System.out.println(x);}转载于:https://www.cnblog…

图像分割

图像分割是指将图像中具有特殊意义的不同区域划分开来&#xff0c; 这些区域互不相交&#xff0c;每个区域满足灰度、纹理、彩色等特征的某种相似性准则。图像分割是图像分析过程中最重要的步骤之一&#xff0c;分割出的区域可以作为后续特征提取的目标对象。 本文主要包括以下…

重磅:IBM 340亿美元收购红帽软件,开源生态或将迎来重大变化

来源&#xff1a;人工智能和大数据北京时间10月29日上午消息&#xff0c;据报道&#xff0c;IBM周日宣布&#xff0c;将以约340亿美元价格收购开源软件和技术主要供应商红帽公司&#xff08;Red Hat&#xff09;。根据两家公司的联合声明&#xff0c;IBM将支付现金&#xff0c;…

ACM/ICPC竞赛

第04篇 ACM/ICPC竞赛之STL--vector 在STL的<vector>头文件中定义了vector&#xff08;向量容器模板类&#xff09;&#xff0c;vector容器以连续数组的方式存储元素序列&#xff0c;可以将vector看作是以顺序结构实现的线性表。当我们在程序中需要使用动态数组时&#xf…

阈值分割与区域分割

本文主要包括以下内容 阈值分割技术基于区域的图像分割技术本章的典型案例 基于LoG和Canny算子的精确边缘检测基于Hough变换的直线检测图像的四叉树分解 阈值分割 我们曾在3.5节学习过灰度阈值变换的相关知识&#xff0c; 利用灰度阈值变换分割图像就称为阈值分割&#xf…

边缘计算芯片格局分析

来源&#xff1a;半导体行业观察 近日&#xff0c;华为和比特大陆纷纷发布了针对边缘计算的新芯片产品。华为的Ascend系列采用达芬奇架构&#xff0c;其中Ascend 310功耗8W算力8TOPS正是针对边缘计算市场。而之后比特大陆发布的BM1682和BM1880也是针对边缘计算市场&#xff0c;…

基于PCA的人脸特征抽取

我们将应用PCA技术来抽取人脸特征。一幅人脸照片往往由比较多的像素构成&#xff0c;如果以每个像素作为1维特征&#xff0c;将得到一个维数非常高的特征向量&#xff0c; 计算将十分困难&#xff1b;而且这些像素之间通常具有相关性。这样&#xff0c;利用PCA技术在降低维数的…

[置顶] 删除:大数据取舍之道读书笔记

1 对于人类而言&#xff0c;遗忘一直是常态&#xff0c;而记忆才是例外。然而&#xff0c;由于数字技术与全球网络的发展&#xff0c;这种平衡已经被打破了。如今&#xff0c;往事正像刺青一样刻在我们的数字皮肤上&#xff0c;遗忘已经变成了例外&#xff0c;而记忆却成了常态…

超市的100年发展史:好日子终结 亚马逊无人店是趋势

来源&#xff1a;网易智能 电商巨头亚马逊已经在旧金山、西雅图和芝加哥等地开设了多家无人便利店Amazon Go&#xff0c;它们向顾客展现了无缝购物体验这种未来购物模式&#xff0c;它依赖于高科技追踪技术&#xff0c;消费者只需将商品从货架上取下&#xff0c;并放入帆布手提…

图像识别初步

本文主要包括以下内容 模式与模式识别的基本概念过度拟合最小距离分类器基于相关的模板匹配本章的典型案例分析 基于最小距离分类器的鸾尾属植物分类基于相关技术的图像模式匹配 模式识别概述 模式识别(Pattern Recognition)是人类的一项基本智能&#xff0c;在日常生活中…

下一个人才大缺口:量子计算研究人员

来源&#xff1a;36Kr初创公司Zapata Computing的创始人兼首席执行官克里斯托弗萨瓦&#xff08;Christopher Savoie&#xff09;表示&#xff0c;他向三位专攻量子计算的外国科学家提供了就业机会&#xff0c;他在等他们的工作签证获得批准。但几个月过去了&#xff0c;这家位…

LIBCMTD.lib与libcpmtd冲突的解决方法。

error: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2YAPAXIZ) 已经在 LIBCMTD.lib(new.obj) 中定义 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??…

基于PCA和SVM的人脸识别

svm推广到多类情况 一对多的最大响应策略(one against all) 假设有A 、B、C.. D四类样本需要划分。在抽取训练集的时候&#xff0c;分别按照如下4种方式划分。 A. 所对应的样本特征向量作为正集&#xff08;类标签为1), B、C、D所对应的样本特征向量作为负集&#xff08;类…

为何协作机器人能够兴起?“协作机器人-激烈的市场谁能杀出重围”

来源&#xff1a;机器人大讲堂作者&#xff1a;包文涛&#xff0c;哈尔滨工业大学机器人研究所工学硕士&#xff0c;在机器人和工业自动化领域有超过10年的专业经验。曾任职于ABB集团&#xff0c;先后在新加坡、美国、加拿大等地工作&#xff0c;在产品管理、技术方案、项目工程…

5款新颖的ReSharper插件

ReSharper是著名的代码生成工具。自ReSharper 8.0版本发布以来&#xff0c;新的扩展管理器、模板设置、分发安装等功能改革使得对插件的要求变高。接下来小编整理了5款新颖插件。 JetBox 当开发者工作在不同的机器设备时&#xff0c;这个插件可以利用DropBox同步ReSharper设置。…

机器学习实战之K近邻算法

k近邻算法概述 简单地说,K近邻算法采用测量不同特征值之间的距离方法进行分类。 优 点 :精度高、对异常值不敏感、无数据输入假定。 缺点:计算复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。 它的工作原理是:存在一个样本数 据集合,也称作训练样本集,并且样本集…

神经网络的叛离:32年前从心理学与生理学分离的瞬间

来源&#xff1a;大数据文摘编译&#xff1a;Andy反向传播算法隶属于深度学习&#xff0c;它在解决模型优化问题的方面有着重要的地位。这一算法由被誉为深度学习之父的Geoffrey Hinton提出。1986年&#xff0c;他发表了名为Learning representations by back-propagating erro…

希尔排序-插入改进

引自&#xff1a;http://hi.baidu.com/gsgaoshuang/item/17a8ed3c24d9b1ba134b14c2 学习算法的一个好网站 http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.2.2.1.htm 希尔排序&#xff08;Shell Sort&#xff09;又称为缩小增量排序&#xff0c;输入插入…