图像处理 结构突出

2017-12-03 17:28:28 arryCC 阅读数 3945
  • 2016年上半年上午真题5-9

    没有实际的配置过交换机、路由器等设备,没有系统的学习过案例分析,无法...本门课程紧抓考生痛点,按照短期、速效、重点突出的原则,课件中直接给出知识点的出题形式,让您在短时间内抓住考试要点,顺利通过下午考试。

    615人学习 任铄
    免费试看

数字图像处理


一、学习内容总结

1. 第一章 绪论

本章主要有几个目的:

  1. 定义我们称之为数字图像处理领域的范围;
  2. 通过考察几个领域,给出图像处理技术状况的概念;
  3. 讨论图像处理用到的几种方法;
  4. 概述通用目的的典型图像处理系统的组成。

1.1 什么是数字图像处理

我们给出一些定义:

  • 强度灰度:一幅图像可以被定义为一个二维函数 f(x,y),其中 x,y 是空间(平面)坐标,而在任何一处的幅值 f 被称为在该点的灰度或强度。
  • 数字图像:当 x,y 或灰度值 f有限的离散数值时,称该图像为数字图像。也就是说数字图像是由有限数量的元素组成,每个元素都有特定的位置和幅值。这些元素被称为图画元素图像元素像素
  • 数字图像处理 : 指用特定的计算机来处理数字图像。

本书中将数字图像处理界定为其输入和输出都是图像的处理。

1.2 使用数字图像处理领域的实例

  • 伽马射线成像:医学和天文。
  • X射线成像:最早用于成像的电磁辐射源之一,医学诊断。
  • 紫外波段成像 :荧光显微镜。
  • 可见光及红外线成像 :可见显微镜技术,遥感,天气预测和预报,红外卫星图像,自动视觉检测,检测丢失的部件,指纹图像。
  • 微波波段成像 :雷达。
  • 无线电波段成像 :天文学和医学(核磁共振)。
  • 其他方式 :声波成像,电子显微镜方法,(由计算机产生的)合成图像。

1.3 数字图像处理的基本步骤

这里写图片描述

1.4 图像处理系统的组成

这里写图片描述

2. 第二章 数字图像处理基础

本章主要介绍数字图像处理一些基本概念

2.1 视觉感知要素

  • 人眼的结构

    重点介绍视网膜里的两类光感受器

    • 锥状体 :对颜色高度敏感,这种视觉称为白昼视觉或者亮视觉。高照明水平下执行。
    • 杆状体 :没有彩色感觉,对低照明度敏感,称为暗视觉或微光视觉。低照明水平下执行。
  • 亮度适应与辨别

    • 亮度适应现象 :视觉系统不能同时在一个范围内工作,它是通过改变其整个灵敏度来完成这一较大变动的。
    • 韦伯比 :较大:亮度辨别能力较差;反之,较好。
  • 感知亮度 不是简单的强度的函数

    • 视觉系统往往会在不同强度区域的边界处出现“下冲”或“上冲”现象。
    • 同时对比、错觉

2.2 光和电磁波谱

  • 电磁波是能量的一种,任何有能量的物体都会释放电磁波谱。它可以用 波长 (λ)、频率(v)或能量(E) 来描述,其中

λ=c/v

E=hv

  • 光是一种特殊的电磁辐射,可以被人眼感知。
    • 单色光 是没有颜色的光,也成为无色光。唯一属性就是它的强度或者大小,用 灰度级 来表示。单色图像常被称为 灰度图像
    • 彩色光源 的质量可以用发光强度、光通量和亮度 来表示。

2.3 图像感知和获取

  • 图像获取方式

    • 使用单个传感器来获取图像
    • 使用条带传感器获取图像
    • 使用传感器阵列获取图像
  • 简单的图像形成模型

    用形如 f(x,y) 的二维函数来表示图像,那么:

    0<f(x,y)<

    f(x,y) 可以用两个分量来表征:

    • 入射分量 入射到被观察场景的光源照射总量,用i(x,y) 表示;
    • 反射分量 场景中物体所反射的光照总量,用r(x,y) 表示。

    所以有:

    f(x,y)=i(x,y)r(x,y),0<i(x,y)<,0<r(x,y)<1

2.4 图像取样和量化

  • 取样和量化的基本概念

    • 取样 :对坐标值进行数字化
    • 量化 : 对幅值数字化

    数字图像的质量在很大程度上取决于取样和量化中所用的样本数灰度级

  • 数字图像表示

    用数列矩阵来表示一幅数字图像。在实数矩阵中,每个元素称为图像单元、图像元素或像素。

    对比度 一幅图像最高和最低灰度级间的灰度差为对比度。

    存储数字图像所用的比特数为:

    b=M×N×k,M=Nb=N2k

    灰度级数L=2k

  • 空间和灰度分辨率

    • 空间分辨率 :图像中可辨别的最小细节的度量。在数量上,表示每单位距离线对数和每单位距离点数是最通用的度量(必须针对空间单位来规定才有意义)。
    • 灰度分辨率 :指在灰度级中可分辨的最小变化。
  • 图像内插

    用已知数据来估计未知位置的数据处理。是基本的图像重取样方法。可以处理图像的放大和缩小。

2.5 像素间的基本关系

  • 相邻像素

    位于坐标 (x,y) 处的像素 p 有4个水平和垂直上的相邻像素,用 N4(p) 表示;有四个对角相邻像素,用 ND(p) 表示。如果 p 位于图像边界,则某些邻点可能 落在图像外边。

  • 邻接性、连通性、区域和边界

    • 4邻接、8邻接、混合邻接
  • 距离度量

    • 欧氏距离(圆)
    • D4 城市街区距离(菱形)
    • 棋盘距离(正方形)

2.6 常用数学工具介绍

  • 阵列和矩阵操作
  • 线性操作和非线性操作
  • 算术操作
  • 集合和逻辑操作
    • 基本集合操作
    • 逻辑操作
    • 模糊集合
  • 空间操作
    • 单像素操作
    • 邻域操作
    • 几何空间变换与图像配准
  • 向量和矩阵操作
  • 图像变换

3.第三章

3.1 背景知识

  • 空间域 就是简单的包含图像像素的平面。空间域处理可用以下方式表示:

g(x,y)=T[f(x,y)],T(x,y)

  • 灰度变换函数
    s=T(r),r,s

3.2 基本灰度变换函数

  • 图像反转

    得到灰度范围为 [0,L1] 的一幅图像的反转图像:(得到等效的照片底片)

    s=L1r

  • 对数变换

    对数变换的通用形式:

    s=clog(1+r)

    扩展图像中暗像素的值,同时压缩更高灰度级的值。反对数变换的作用与此相反。

这里写图片描述

  • 幂律变换(伽马)变换

    基本形式:

    s=crγ

    γ<1 变亮,大于1变暗,c=γ=1 恒等变换。

这里写图片描述
* 分段线性变换函数
* 对比度拉伸:扩展图像灰度级动态范围处理,因此它可以跨越记录介质和显示装置的全部灰度范围。

根据$r,s$ 的取值,变换可以为线性函数和阈值处理函数。
  • 灰度级分层:突出特定图像灰度范围的亮度。有两种方法:

    • 突出范围 [A,B] 内的灰度,并将所有其他灰度降低到一个更低的级别;
    • 突出范围[A,N] 内的灰度,并保持所有其他灰度级不变。
  • 比特平面分层:突出特定比特为整个图像外观作贡献。

    • 4个高阶比特平面,特别是最后两个比特平面,包含了在视觉上很重要的大多数数据。
    • 低阶比特平面在图像中贡献更精细的灰度细节。

    得出结论:储存四个高阶比特平面将允许我们以可接受的细节来重建原图像。这样可减少50%的存储量。

3.3 直方图的处理

  • 理论基础:若一幅图像的像素倾向于占据可能的灰度级并且分布均匀,则该图像会有高对比度的外观并展示灰色调的较大变化。

  • 直方图均衡:

    • 灰度范围为 [0,L1] 的数字图像的直方图是离散函数 h(rk)=nk,其中 rk 是第 k 级灰度值,nk 是图像中灰度为rk 的像素的个数。
    • 通过转换函数T(rk)变换,得到直方图均衡化。
    • 应用:自适应对比度增强。
  • 直方图匹配:用于处理后有特殊直方图的方法。

  • 局部直方图处理:以图像中每个像素邻域中的灰度分布为基础设计变换函数,来增强图像中小区域的细节。

  • 在图像增强中使用直方图统计:提供这样一种增强图像的方法:

    在仅处理均值和方差时,实际上直接从取样值来估计它们,不必计算直方图。这些估计被称为取样均值和取样方差。

3.4 空间滤波基础

  • 空间滤波机理

    • 空间滤波器的组成:
    • 一个邻域
    • 对该邻域包围的图像像素执行的预定义操作

    滤波产生的是一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。

  • 空间相关与卷积

    • 相关:滤波器模板移过图像并计算每个位置乘积之和的处理。一个大小为m×n 的滤波器与一幅图像 f(x,y) 做相关操作,可表示为w(x,y)f(x,y)
    • 卷积:与相关机理相似,但滤波器首先要旋转180o 一个大小为m×n 的滤波器与一幅图像 f(x,y) 做j卷积操作,可表示为w(x,y)f(x,y)

3.5 平滑空间滤波器

用于模糊处理和降低噪声。

  • 平滑线性滤波器(均值滤波器)

    它使用滤波器确定的邻域内像素的平均灰度值代替图像中每个像素的值。应用:

    • 降低噪声
    • 灰度级数量不足而引起的伪轮廓效应的平滑处理
    • 去除图像的不相关细节
  • 统计排序(非线性)滤波器

    最有代表性的是中值滤波器 ,特点:

    • 将像素邻域内灰度的中值(在中值计算中,包括原像素值)代替该像素的值;
    • 对处理脉冲噪声(椒盐噪声)非常有效。

3.6 锐化空间滤波器

  • 拉普拉斯算子:最简单的各向同性微分算子,是一个线性算子。因其为微分算子,因此强调的是图像中灰度的 突变而不是灰度级缓慢变换的区域。

  • 非锐化隐蔽和高提升滤波:从原图像中减去一部分非锐化的版本。步骤:

    • 模糊原图像
    • 从原图像减去模糊图像
    • 将模板加到原图像上
  • 梯度:图像处理中的一阶微分用梯度实现。对于函数f(x) ,在坐标(x,y) 处的梯度定义为二维列向量。它指出在位置f(x,y)f的最大变化率方向。

    应用:边缘增强。

4.第四章

本章主要为傅里叶变换的原理打一个基础,并介绍在基本的图像滤波中如何使用傅里叶变换。

4.1. 基本概念

  • 傅里叶概念:任何周期函数都可以表示为不同频率的正弦和或余弦和的形式,每个正弦项和或余弦项乘以不同的系数(傅里叶级数)。
  • 傅里叶变换:在非周期函数用正弦和或余弦和乘以加权函数的积分来表示的公式。
  • 介绍复数、傅里叶级数、冲击及其取样特征、连续函数的傅里叶变换以及之前提过的卷积。

4.2. 取样与取样函数中的傅里叶变换

  • 取样

    在连续函数f(x,y) 中模拟取样的一种方法是:用一个ΔT 单位间隔的冲击串作为取样函数去乘以f(t) .

  • 取样函数的傅里叶变换

    空间域来两个函数乘积的傅里叶变换是两个函数在频率域的卷积。

  • 取样定理

    如果以超过函数最高频率的两倍的取样来获取样本,连续的带限函数可以完全从它的样本集来恢复。

4.3. DFT小结

在课本上,作者给了我们详细的总结:

这里写图片描述
这里写图片描述
这里写图片描述

4.4. 频率域滤波

  • 步骤
    • 等到填充参数PQ
    • 形成大小为P×Q 的填充后的图像fp(x,y)
    • (1)x+y 乘以fp(x,y)移到其变换中心
    • 计算上一步骤的DTF,得到F(u,v)
    • 生成实的、对称的滤波函数H(u,v)
    • 得到处理后的图像gp(x,y)
    • gp(x,y) 的做上限提取M×N区域 ,得到最终的处理结果g(x,y)
  • 空间域与频率域间的纽带是卷积定理。

4.5. 使用频率域滤波器平滑图像

三种低通滤波器来平滑图像

  • 定义总结

这里写图片描述

  • 特性
    • 理想低通滤波器(ILFP)
    • 特性:模糊和振铃。
    • 布特沃斯低通滤波器(BLPF)
    • 特性:随着阶数增高,其振铃和负值变明显。(一阶时无)
    • 高斯低通滤波器(GLPF)
    • 特性:无振铃

4.6. 使用频率域滤波器锐化图像

  • 三种高通滤波器来锐化图像
    • 定义总结

这里写图片描述
* 特性

* 理想高通滤波器(IHPF)
  * 有振铃
* 布特沃斯高通滤波器(BHPF)
  * 比IHPF更平滑
* 高斯低通滤波器(GHPF)
  * 比前两个更平滑,即使微小物体和细线条得到的结果也比较其清晰
  • 其他方式

    • 拉普拉斯算子
    • 钝化模板、高提升滤波和高频强调滤波
    • 同态滤波

4.7.选择性滤波器

处理指定频段或者频率域的小区域

  • 带阻滤波器和带通滤波器

    • 带阻滤波器
      这里写图片描述

    • 带通滤波器

    • 通过1减去带阻得到。

  • 陷波滤波器:拒绝事先定义的关于频率矩形中心的一个邻域的频率。

    • 陷波带阻滤波器

    用中心已被平移到陷波滤波中心的高通滤波器的乘积来构造。

    • 陷波带通滤波器

    通过1减去带阻得到。

2019-05-11 08:31:12 Dujing2019 阅读数 3571
  • 2016年上半年上午真题5-9

    没有实际的配置过交换机、路由器等设备,没有系统的学习过案例分析,无法...本门课程紧抓考生痛点,按照短期、速效、重点突出的原则,课件中直接给出知识点的出题形式,让您在短时间内抓住考试要点,顺利通过下午考试。

    615人学习 任铄
    免费试看

数字图像处理—形态学图像处理

同样的,暂时对书上已经写得很清楚的知识点不再重复赘述,主要做一些总结,思考以及知识点的梳理和扩展。

(一)预备知识

介绍一下形态学中的一些基本概念。

  1. 用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具
  2. 基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析识别的目的
  3. 形态学图像处理的数学基础和所用语言是集合论
  4. 形态学图像处理的应用可以简化图像数据, 保持它们基本的形状特性,并除去不相干的结 构
  5. 形态学图像处理的基本运算有4个:膨胀、 腐蚀、开操作和闭操作

1.1 集合理论中的基本概念

介绍一下比较陌生的几个概念,其他的看书就好:

  1. 所有像素坐标的集合均不属于集合A,记为AcA^c,由下式给出:
    在这里插入图片描述
    这个集合称为集合A的补集

  2. 集合B的反射,定义为:

    即关于原集合原点对称 .

  3. 集合A平移到点z=(z1,z2),表示为(A)z,定义为:

1.2 二值图像、集合及逻辑算子

二值图像

二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1Bit就可以完整存储信息。如果把每个像素看成随机变量,一共有N个像素,那么二值图有2的N次方种变化,而8位灰度图有255的N次方种变化,8为三通道RGB图像有255255255的N次方种变化。也就是说同样尺寸的图像,二值图像保存的信息更少。二值图像(binary image),即图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。

二值图像集合

如果A和B是二值图像,那么C=A∪B仍是二值图像。这里,如 果 A 和B中相应的像素不是前景像素就是背景像素,那么 C中的这个像素就是前景像素。以第一种观点,函数 C由下式给出:
在这里插入图片描述
另一方面,运用集合的观点,C由下式给出:
在这里插入图片描述
集合运算

  1. A为图像集合,B为结构元素(集合)。
  2. 数学形态学运算时B对A进行操作。
  3. 结构元素要有1个原点(即结构元素参与形态学运算的参考点),可以是中心像素,原则上可选任何像素。
    注意:原点可以包含在结构元素中,也可以不包含在结构元素中,但运算的结果常不相同。

编码

f = imread('D:\数字图像处理\第九章学习\Fig0903(a).tif');
g = imread('D:\数字图像处理\第九章学习\Fig0903(b).tif');
subplot(2,3,1), imshow(f);title('(a)二值图像 A:');
subplot(2,3,2), imshow(g);title('(b)二值图像 B:');
subplot(2,3,3), imshow(~f);title('(c)A的补集~A:');
subplot(2,3,4), imshow(f|g);title('(d) A和B的并集 A|B:');
subplot(2,3,5), imshow(f&g);title('(e)A和B的交集 A & B:');
subplot(2,3,6), imshow(f&~g);title('(f)A和B的差集 A&~B');

代码运行效果如下
在这里插入图片描述
分析

图像(d)是 “ UTK”和 “ GT” 图像的并集,包括来自两幅图像的所有前景像素。相反,两幅图像的交集(图(e))显示了字母 “ UTK”和 “ GT”中重叠的像素。最后,集合的差集图像(图(f))显示了 “ UTK”中除去 “ GT” 像素后的字母。

(二)膨胀和腐蚀

2.1 膨胀

膨胀:膨胀是在二值图像中“加长”或“变粗”的操作。这种特殊的方式和变粗的程度由一个称为结构元素的集合控制。(实际就是将结构元素的原点与二值图像中的1重叠,将二值图像中重叠部分不是1的值变为1,完成膨胀)。

公式

A和B是两个集合,A被B膨胀定义为:

公式解释:

  1. B的反射进行平移与A的交集不为空。
  2. B的反射:相对于自身原点的映象。
  3. B的平移:对B的反射进行位移

图解

      

(a)集合A    (b)结构元素B (黑色为原点所在)

      

(c)结构元素B的映像    (d)图中两种阴影部分(深色为扩大的部分)合起来为A+B

注意

  1. 膨胀运算只要求结构元素的原点在目标图像的内部平移,换句话说,当结构元素在目标图像上平移时,允许结构元素中的非原点像素超出目标图像的范围
  2. 膨胀运算具有扩大图像和填充图像中比结果元素小的成分的作用,因此在实际应用中可以利用膨胀运算连接相邻物体和填充图像中的小孔和狭窄的缝隙

膨胀举例

膨胀函数

D = imdilate(A,B)

图像膨胀的应用:桥接文字裂缝

编码:

A = imread('D:\数字图像处理\第九章学习\Fig0906(a).tif');
B = [0 1 0; 1 1 1; 0 1 0];   %指定结构元素由0和1组成的矩阵
A2 = imdilate(A, B);    %二值图像
subplot(1,2,1), imshow(A);title('(a)包括断开文本的输入图像:');
subplot(1,2,2), imshow(A2);title('(b)膨胀后图像:');

在这里插入图片描述
图片中字体的加粗,且填充了字母中的小孔和狭窄的缝隙。

2.2 结构元的分解

公式
在这里插入图片描述
公式理解

B膨胀A等同于B1先膨胀A,再用B2膨胀之前的结果。

举例

下面是由1组成的5x5数组的膨胀:
在这里插入图片描述
这个结构元能够分解为值为 1 的 5 元素行矩阵和值为 1 的 5 元素列矩阵:

在这里插入图片描述
分析

在原结构元中,元素个数为 25; 但在行列分解后,总元素数目仅为 10。这意味着首先用 行结构元膨胀,再用列结构元膨胀,能够比 5x5 的数组膨胀快 2.5 倍。在实践中,速度的增长稍微慢一些,因为在每个膨胀运算中总有些其他开销。然而,由分解执行获得的速度方面的增 长仍然有很大意义。

2.3 strel函数

工具箱函数 strel 用于构造各种形状和大小的结构元。

基本语法

se = strel(shape, parameters)

shape用于指定希望形状的字符串,parameters是描述形状信息的参数列表。

具体例子参考课本,是基础语法。

2.4 腐蚀

腐蚀:与膨胀相反,对二值图像中的对象进行“收缩”或“细化”。(实际上将结构元素的原点覆盖在每一个二值图像的1上,只要二值图像上有0和结构元素的1重叠,那么与原点重叠的值为0)同样由集合与结构元素完成。

公式

A和B是两个集合,A被B腐蚀定义为:

公式解释:

  1. A被 B 腐蚀是包含在A中的B由z平移的所有点z的集合。
  2. B包含在A中的声明相当于B不共享A背景的任何元素。

图解
     

(a)集合A(阴影部分)   (b)结构元素B(阴影部分,深色部分为原点)(c)阴影部分合起来为A-B

注意

  1. 当结构元素中原点位置不为1(也即原点不属于结构元素时),也要把它看作是1,也就是说,当在目标图像中找与结构元素B相同的子图像时,也要求子图像中与结构元素B的原点对应的那个位置的像素的值是1。
  2. 腐蚀运算要求结构元素必须完全包括在被腐蚀图像内部:换句话说,当结构元素在目标图像上平移时,结构元素中的任何元素不能超过目标图像范围。
  3. 腐蚀运算的结果不仅与结构元素的形状选取有关,而且还与原点位置的选取有关
  4. 腐蚀运算具有缩小图像和消除图像中比结构元素小的成分的作用,因此在实际应用中,可以利用腐蚀运算去除物体之间的粘连,消除图像中的小颗粒噪声

腐蚀举例

腐蚀函数

A2 = imerode(A, se)

图像腐蚀应用:消除图像细节部分

编码:

f = imread('D:\数字图像处理\第九章学习\Fig0908(a).tif');
se = strel('disk', 10);
g = imerode(f, se);
se = strel('disk', 5);
g1 = imerode(f, se);
g2 = imerode(f, strel('disk', 20));
subplot(2,2,1), imshow(f);title('(a)原始图像的尺寸为480x480像素:');
subplot(2,2,2), imshow(g);title('(b)用半径为10的圆形腐蚀:');
subplot(2,2,3), imshow(g1);title('(c)用半径为5的圆形腐蚀:');
subplot(2,2,4), imshow(g2);title('(d)用半径为20的圆形腐蚀');

分析

假设要除去图a中的细线,但想保留其他结构,可以选取足够小的结构元来匹配中心方块,但较粗的边缘线因太大而无法匹配全部线。图b几乎成功去掉了模板中的细线,图c中一些引线还没有去掉,图d中引线都被去掉了,但是边缘引线也丢失了,所以选取合适的结构元很重要。

(三) 膨胀与腐蚀的结合

3.1 开操作和闭操作

开操作

  1. 使图像的轮廓变得光滑,断开狭窄的间断和消除细的突出物。
  2. 使用结构元素B对集合A进行开操作,定义为:

    先用B对A腐蚀,然后用B对结果膨胀。
  3. 与开操作等价的数学表达式为:
  4. A o B 的边界通过B中的点完成。
  5. B在A的边界内转动时,B中的点所能到达的A的边界的最远点。
  6. A o B 是 A的子集合。
  7. 如果C是D的子集,则 C o B是 D o B的子集。
  8. (A o B) o B = A o B

闭操作

  1. 同样使图像的轮廓变得光滑,但与开操作相反,它能消除狭窄的间断和长细的鸿沟,消除小的孔洞,并填补轮廓线中的裂痕。
  2. 使用结构元素B对集合A进行闭操作,定 义为:

    先用B对A膨胀,然后用B对结果腐蚀。
  3. A . B的边界通过B中的点完成 。
  4. B在A的边界外部转动 :
  5. A 是 A . B的子集合。
  6. 如果C 是 D 的子集 , 则C . B 是 D . B的子集。
  7. (A . B) . B = A . B

工具箱函数

开操作:

C = imopen(A, B)

闭操作:

C = imclose(A, B)

A为二值图像,B为0,1矩阵组成,并且是指定结构元素。

函数imopen 和 imclose 的应用

编码:

f = imread('D:\数字图像处理\第九章学习\Fig0910(a).tif');
se = strel('square', 40);
fo = imopen(f, se);
fc = imclose(f, se);
foc = imclose(fo, se);
subplot(2,2,1), imshow(f), title('(a)原图');
subplot(2,2,2), imshow(fo), title('(b)开操作');
subplot(2,2,3), imshow(fc), title('(c)闭操作');
subplot(2,2,4), imshow(foc), title('(d) (b)的闭操作结果');

分析

  1. 图(a)中的图像设计了一些用于演示开操作和闭操作的特征,比如细小突起、细的桥接点、几个弯口、孤立的小洞、 小的孤立物和齿状边缘。
  2. 图 (b)显示了结果。注意,从图中可以看出,细的突出和外部点的边缘的不规则部分被去除掉了,细的桥接和小的孤立物也被去除了。
  3. 图 ©中的结果: 这里,细的弯口、内部的不规则边缘和小洞都被去除了。先做开操作的闭操作的结果有平滑效果.
  4. 图 (d)显示了平滑过的物体。

噪声滤波器

先开操作再闭操作,构成噪声滤波器。

编码:

f = imread('D:\数字图像处理\第九章学习\Fig0911(a).tif');
se = strel('square', 6);
fo = imopen(f, se);
foc = imclose(fo, se);
subplot(1,3,1), imshow(f), title('(a)带噪声的指纹图像');
subplot(1,3,2), imshow(fo), title('(b)图像的开操作');
subplot(1,3,3), imshow(foc), title('(c)先用开操作,再用闭操作');

在这里插入图片描述
分析

  1. 图(a)是受噪声污染的指纹二值图像,噪声为黑色背景上的亮元素和亮指纹部分的暗元素。
  2. 图(b)所示的图像。发现,对图像进行开操作可以去除噪声点,但是这种处理在指纹的纹脊上又引入一些缺口
  3. 图( c )显示了最终结果。在这个结果中,大多数噪声被消除了,开运算的闭运算可以给指纹填充缺口,但是指纹纹路并没有完全恢复 。

3.2 击中或击不中变换

击中击不中变换(HMT),HMT变换可以同时探测图像的内部和外部。研究解决目标图像识别模式识别等领域,在处理目标图像和背景的关系上能够取得更好的效果。

作用:形状检测的基本工具。

公式

A中对B进行的匹配(击中)表示为:

B1是由与一个对象相联系的B元素构成的集合,B1是由与一个对象相联系的B元素构成的集合。

图解

工具箱函数

C = bwhitmiss(A, B1, B2)

其中的 C为结果,A为输入图像,B1、B2表示结构元素。

定位图像中物体左上角的像素

编码:

f = imread('D:\数字图像处理\第九章学习\Fig0913(a).tif');
B1 = strel([0 0 0;0 1 1; 0 1 0]);
B2 = strel([1 1 1;1 0 0;1 0 0]);
g = bwhitmiss(f,B1,B2);
subplot(1,2,1), imshow(f), title('(a)原始图像');
subplot(1,2,2), imshow(g), title('(b)击中、击不中变换的结果');

分析

  1. 图(a)显示了包括各种尺寸的正方形图像。我们要定位有东、南相邻像素(这些 “击中”)和没有东北、北、西北、西和西南相邻像素(这些 “击不中”)的前景像素。这些要求导致以下B1,B2两个结构元。这两个结构元都不包括东南邻域像素,这称为不关心像素。用函数 bwhitmiss 来计算变换。
  2. 图 (b)中的每个单像素点都是图 (a)中物体左上角的像素。图 (b)中是放大后的像素,以便更清晰。bwhitmiss的替代语法可以把Bl 和 B2 组合成间隔矩阵。只要 B1等于 1 或-1,B2 等于 1, 间隔矩阵就等于 1。对于不关心像素,间隔矩阵等于 0。

3.3 bwmorph函数

工具箱函数 bwmorph 执行许多以膨胀、腐蚀和查找表运算相结合为基础的形态学操作, 调用语法为:

g = bwmorph(f, operation, n);

f 是输入的二值图像,operation 是指定所希望运算的字符串,n 是指定重复次数的正整数。

细化

f = imread('D:\数字图像处理\第九章学习\Fig0911(a).tif');
g1 = bwmorph(f, 'thin',1);
g2 = bwmorph(f, 'thin',2);
ginf = bwmorph(f,'thin', Inf);
subplot(1,4,1),imshow(f);title('(a)指纹图像:');
subplot(1,4,2),imshow(g1);title('(b)细化一次后的指纹图像:');
subplot(1,4,3),imshow(g2);title('(c)细化两次后的图像:');
subplot(1,4,4),imshow(ginf);title('(d)一直细化到稳定状态的图像:');

在这里插入图片描述
骨骼化

f = imread('D:\数字图像处理\第九章学习\Fig0916(a).tif');
fs = bwmorph(f,'skel',Inf);
for k = 1:5
    fa = fs & ~endpoints(fs);
end
subplot(1,3,1),imshow(f);title('(a)骨头图像:');
subplot(1,3,2),imshow(fs);title('(b)使用函数 bwmorph 得到的骨豁:');
subplot(1,3,3),imshow(fa);title('(c)使用函数 endpoint 裁剪后的骨豁:');

在这里插入图片描述
分析:骨骼化(Gonzalez和 Woods[2008])是另一种减少二值图像中的物体为一组细“笔画”的方法, 这些细骨豁仍保留原始物体形状的重要信息。当 operation 置为 'skel '时,函数 bwmorph 执行骨骼化。令 f 代表图(a)中类似骨头的图像,为了计算骨骼,调用 bwmorph, 令 n=Inf,图(b)显示了骨骼化的结果,与物体的基本形状相似。骨骼化和细化经常产生短的无关的“毛刺” ,有时这被叫做寄生成分。清除(或除去)这些“毛刺”的处理称为裁剪。方法是反复确认并去除端点。通过 5 次去除端点的迭代,得以后处理骨骼化图像 fs,图(c )显示了结果。

(四)标记连通分量

工具箱函数

[L, num] = bwlabel (f, conn)

f 是输入二值图像,coon指定希望的连接方式(不是4连接就是8连接),输出L叫做标记矩阵,函数num则给出找到的连通分量总数。

计算和显示连通分量的质心:

f = imread('D:\数字图像处理\第九章学习\Fig0917(a).tif');
imshow(f);title('(a)标注连通分量原始图像:');
[L,n]=bwlabel(f);        %L为标记矩阵,n为找到连接分量的总数
[r,c]=find(L==3);        %返回第3个对象所有像素的行索引和列索引 
rbar=mean(r);
cbar=mean(c);
figure,imshow(f);title('(b)标记所有对象质心后的图像:');
hold on            %保持当前图像使其不被刷新
for k=1:n
   [r,c]=find(L==k);
   rbar=mean(r);
   cbar=mean(c);
   plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k',...
        'MarkerFaceColor','k','MarkerSize',10);
   plot(cbar,rbar,'Marker','*','MarkerFaceColor','w'); %其中的marker为标记
end

(五)形态学重建

概述:重构是一种涉及到两幅图像和一个结构元素的形态学变换。一幅图像,即标记,是变换的开始点。另一幅图像是掩膜,用来约束变换过程。结构元素用于定义连接性。

定义:若G是掩膜,f为标记,则从f重构g可以记为RgR_g(f),由下列的迭代过程定义:

  1. 将h1初始化为标记图像f。
  2. 创建结构元素 :B = ones(3)。
  3. 重复

    直到

    其中,标记f必须是g的一个子集。

函数

out = imreconstruct(marker,mask)

masker是标记,mask是掩膜。

5.1 通过重建进行开操作

在形态学开操作中,腐蚀典型地去除小的物体,且随后的膨胀趋向于恢复保留的物体形状。 然而,这种恢复的精确度取决于形状和结构元之间的相似性。本节讨论的方法,通过重建进行开操作能准确地恢复腐蚀之后的物体形状。用结构元B对图像 G通过重建进行开操作可定义为 :
在这里插入图片描述

f = imread('D:\数字图像处理\第九章学习\Fig0917(a).tif');
subplot(3,2,1),imshow(f);title('(a)重构原始图像');
fe=imerode(f,ones(51,1));%竖线腐蚀
subplot(3,2,2),imshow(fe);title('(b)使用竖线腐蚀后的结果');
fo=imopen(f,ones(51,1));%竖线做开运算
subplot(3,2,3),imshow(fo);title('(c)使用竖线做开运算结果');
fobr=imreconstruct(fe,f);%fe做标记
subplot(3,2,4),imshow(fobr);title('(d)使用竖线做重构开运算');
ff=imfill(f,'holes');%对f进行孔洞填充
subplot(3,2,5),imshow(ff);title('(e)对f填充孔洞后的图像');
fc=imclearborder(f,8);%清除边界,2维8邻接
subplot(3,2,6),imshow(fc);title('(f)对f清除边界后的图像');

在这里插入图片描述
分析

  1. 传统开运算中,腐蚀去除掉小对象,随后的膨胀恢复原始对象形状,但受元素结构影响,恢复的往往不是很精确。
  2. 重构则能精确恢复原始图像。

5.2 填充孔洞

令I表示二值图像,假设我们选择标记图像F,除了图像边缘外,其余部分都为 0, 边缘部分设值为 1-I:
在这里插入图片描述
函数

g = imfill(f,‘holes’);

5.3 清除边界物体

定义标记图像F为:
在这里插入图片描述
其中,/是原始图像,然后以/作为模板图像,重建
在这里插入图片描述
得到一幅图像H, 其中仅包含与边界接触的物体。

函数

g = imclearborder(f,conn)

f 是输入图像,g 是结果。conn 的值不是 4 就是 8(默认)。 物体更亮且与图像边界相连接的结构。

(六)灰度级形态学

6.1 膨胀和腐蚀

灰度图像的形态学梯度定义为膨胀运算与腐蚀运算的结果之间的差值。

膨胀定义

  1. 使用结构元素b对f的灰度膨胀定义为:

    其中,DfD_fDbD_b分别是f和b的定义域,f和b是函数而不是二值形态学情况中的集合。

  2. 当结构元素b是平坦的,即b(x,y)在其定义域内都为0时:
    在这里插入图片描述

腐蚀定义

  1. 使用结构元素b对f的灰度腐蚀定义为:
    在这里插入图片描述
    其中,DfD_fDbD_b分别是f和b的定义域。

  2. 当结构元素b是平坦的,即b(x,y)在其定义域内都为0时:
    在这里插入图片描述

膨胀和腐蚀操作

编写代码:

f = imread('D:\数字图像处理\第九章学习\Fig0923(a).tif');
se=strel('square',3);  %构造了一个平坦的3x3的结构元素
gd=imdilate(f,se);    %对原图像进行膨胀操作
ge=imerode(f,se);     %对原图像进行腐蚀操作
morph_grad=imsubtract(gd,ge); %从膨胀的图像中减去腐蚀过得图像产生一个形态学梯度。
subplot(3,2,1);imshow(f,[]);title('(a)原始图像');
subplot(3,2,2),imshow(gd,[]);title('(b)膨胀的图像');
subplot(3,2,3),imshow(ge,[]);title('(c)腐蚀的图像');
subplot(3,2,4),imshow(morph_grad,[]);title('(d)形态学梯度');

在这里插入图片描述
分析

  1. 膨胀得到的图像比原图像更明亮,并且减弱或消除小的,暗的细节部分。即比原图像模糊。
  2. 腐蚀得到的图像更暗,并且尺寸小,明亮的部分被削弱 。

6.2 开操作和闭操作

图像开运算

  1. 在灰度图像中,开操作的表达式与二值图像拥有相同的形式。
  2. 把一幅图像看做是一个三维表明,其亮度值代表xy平面上的高度值,则当结构元素b在f下面活动时,结构元素的任何部分的最高值构成了开运算的结果。
  3. 先进行腐蚀操作可以除去小的亮的图像细节,但这样会使图像变暗,接下来进行膨胀操作增强图像的整体亮度。

图像闭运算

  1. 在灰度图像中,闭操作的表达式与二值图像拥有相同的形式。
  2. 当结构元素b在f的上面活动时,结构元素的任何部分的最低值构成了闭运算的结果 。
  3. 先通过膨胀操作除去图像中的暗细节,同时增加图像的亮度,接下来对图像进行腐蚀,而不会将膨胀操作除去的部分重新引入图像中。

用开操作和闭操作做形态学平滑

f = imread('D:\数字图像处理\第九章学习\Fig0925(a).tif');
subplot(3,2,1),imshow(f);  
title('(a)木钉图像原图');   
se=strel('disk',5);     %disk其实就是一个八边形  
fo=imopen(f,se);        %经过开运算  
subplot(3,2,2),imshow(f);  
title('(b)使用半径5的disk开运算后的图像');   
foc=imclose(fo,se);  
subplot(3,2,3),imshow(foc);  
title('(c)先开后闭的图像'); 
focd=imclose(f,se);  
subplot(3,2,4),imshow(focd);  
title('(d)原始图像的闭操作'); 
foce=imopen(focd,se);  
subplot(3,2,5),imshow(foce);  
title('(e)先闭后开的图像'); 
fasf=f;  
for i=2:5  
    se=strel('disk',i);  
    fasf=imclose(imopen(fasf,se),se);  
end  
subplot(3,2,6),imshow(fasf);  
title('(f)使用开闭交替滤波后图像'); 


在这里插入图片描述
分析

  1. 图 (b)显示了开操作的图像 fo, 在这里,我们看到,亮区域己经被调低了(平滑),木钉上的暗条文几乎没有受影响。
  2. 图 (c )显示了开操作的闭操作 foe。现在我们注意到,暗区域已经被平滑得很好了,结果是整个图像得到全部平滑。这种过程通常叫做开-闭滤波。先开运算后闭运算构成噪声滤波器,用来平滑图像并去除噪声。
  3. 图 (d)显示了原始图像的闭操作结果。木钉上的暗条文已经被平滑掉了,主要留下了亮的细节(注意背景中的亮条文)。
  4. 图 (e)显示了这些条文的平滑和木钉表面的进一步平滑效果。最终结果是原始图像得到全部平滑。
  5. 图(f)是交替顺序滤波,交替顺序滤波的一种形式是用不断增大的一系列结构元执行开-闭滤波,刚开始用小的结构元,增加大小,直到与图 (b)和©中结构元的大小相同为止。交替顺序滤波与单个开-闭滤波相比,处理图像更平滑一些。

非均匀背景的补偿

f = imread('D:\数字图像处理\第九章学习\Fig0926(a).tif');
g = f>=(255*graythresh(f));
se=strel('disk',100);
fo=imopen(f,se);
f2=imsubtract(f,fo); 
g1 = f2>=(255*graythresh(f2));
subplot(2,3,1),imshow(f);  
title('(a)原始图像');  
subplot(2,3,2),imshow(g);  
title('(b)经过阈值处理后的图像');   
subplot(2,3,3),imshow(f);  
title('(c)原图开运算后的图像');  
subplot(2,3,4),imshow(f2);  
title('(d)原图减去开运算');  
subplot(2,3,5),imshow(g1);  
title('(e)最终结果');  

在这里插入图片描述
分析

  1. 图 (a) :显示了一幅米粒的图像f,图像下部的背景比上部的黑。这样的话,对不平坦的亮度进行阈值处理会很困难。
  2. 图 (b) "是阈值处理方案,图像顶端的米粒被很好地从背景中分离开来,但是图像底部的米粒没有从背景中正确地提取出来。
  3. 图(c ):对图像进行开操作,可以产生对整个图像背景的合理估计。
  4. 图(d) :把图(c )从原始图像中减去,生成一幅拥有合适的均勾背景的米粒图像.
  5. 图(e):显示了新的经阈值处理后的图像。注意,改进效果超过了图 (b)。

粒度测定 :

颗粒分析:形态学技术可以用与间接地度量颗粒的大小分布,但不能准确地识别每一个颗粒。对于形状规则且亮于背景大的颗粒,基本方法是应用不断增大尺寸的形态学开运算。

f = imread('D:\数字图像处理\第九章学习\Fig0926(a).tif');
sumpixels=zeros(1,36);  
for k=0:35  
    se=strel('disk',k);  
    fo=imopen(f,se);  
    sumpixels(k+1)=sum(fo(:));  
end    
%可以看到,连续开运算之间的表面积会减少  
plot(0:35,sumpixels),xlabel('k'),ylabel('surface area');  
title('(a)表面积和结构元素半径之间的关系');  
figure,plot(-diff(sumpixels));%diff()函数为差分或者近似倒数,即相邻2个之间的差值  
xlabel('k'),ylabel('surface area reduction');  
title('(b)减少的表面积和结构元素半径之间的关系'); 

分析

  1. (a)连续开运算之间的表面积会减小。
  2. (b)图峰值表明出现了大量的有着这种半径的对象。

6.3 重建

重建

  1. h极小值变换:标记图像是由掩膜挑选ing减去常量所得。
  2. 开运算重建:先腐蚀后重建。
  3. 闭运算重建:对图像求补、计算其开操作重建并对结果求补。

重建移去复杂的背景

f = imread('D:\数字图像处理\第九章学习\Fig0930(a).tif');
subplot(3,3,1),imshow(f);  
title('(a)原图像');    
f_obr=imreconstruct(imerode(f,ones(1,71)),f);  
subplot(3,3,2),imshow(f_obr);  
title('(b)重建的开操作');   
f_o=imopen(f,ones(1,71));    
subplot(3,3,3),imshow(f_o);  
title('(c)开操作');    
f_thr=imsubtract(f,f_obr);    %顶帽重构
subplot(3,3,4),imshow(f_thr);  
title('(d)重建的顶帽操作');  
f_th=imsubtract(f,f_o)    %标准顶帽运算,方便比较
subplot(3,3,5),imshow(f_th);  
title('(e)顶帽操作');  
g_obr=imreconstruct(imerode(f_thr,ones(1,11)),f_thr);  
subplot(3,3,6),imshow(g_obr);  
title('(f)用水平线对(b)经开运算后重建图');   
g_obrd=imdilate(g_obr,ones(1,2));  
subplot(3,3,7),imshow(g_obrd);  
title('(g)使用水平线对(f)进行膨胀');  
f2=imreconstruct(min(g_obrd,f_thr),f_thr);  
subplot(3,3,8),imshow(f2);  
title('(h)最后的重建结果');  

在这里插入图片描述
分析

为了消除每个键盘上方的水平反射光,利用这些反射比图像中任何文本字符都要宽的这个事实。用长水平线的结构元执行重建的开操作,重建的开操作(f_obr) 显示于图(b)中。为了进行对比,图(c )显示了标准的开操作 (f_o) 。重建的开操作在提取水平的相邻键之间的背景方面的确较好。从原始图像中减去重建的开操作被称为顶帽重建 , 结果示于图 (d)中。消除图 (d)中键右边的垂直反射光。这可以通过用短的水平线执行重建的开操作来完成,在这个结果中(见图 (f)),垂直的反射光不见了。但是,包括字母的垂直的细笔画也不见了。我们利用了那些已被错误消除的字母非常接近第一次膨胀(见图 (g))后还存在的其他字符这一事实,以 f_thr 作为模板,以 min(g_obrd,f_thr) 作为标记,图 (h)显示了最后的结果。注意,背景上键盘的阴影和反射光都成功去除了。

2018-02-08 20:01:33 huayunhualuo 阅读数 4485
  • 2016年上半年上午真题5-9

    没有实际的配置过交换机、路由器等设备,没有系统的学习过案例分析,无法...本门课程紧抓考生痛点,按照短期、速效、重点突出的原则,课件中直接给出知识点的出题形式,让您在短时间内抓住考试要点,顺利通过下午考试。

    615人学习 任铄
    免费试看

图像分析的数据结构

1 图像数据表示的层次

四个层次

  1. 图标图像(iconic images):最底层的表示,有含有原始数据的图像组成,原始数据也就是像素亮度数据的整数矩阵。为了突出对后续处理重要 的图像的某些方面,需要进行预处理(滤波或边缘锐化)
  2. 分割图像(segmented images):为可能属于同一物体的区域。
  3. 几何表示(geometric representation):保存2D和3D形状知识。
  4. 关系模型(relational models):使我们能更有效地,并且在更高的抽象层次上的处理数据。

2 传统图像数据结构

矩阵,链,图,物体属性表,关系数据库

2.1 矩阵

矩阵是底层图像表示的最普通的数据结构,矩阵元素是整型的数值。

特殊图像

  • 二值图像(binary image):仅有两个亮度级别的图像,用仅含有0和1的矩阵来表示
  • 多光谱图像(multispectral image):可以用多个矩阵来表示,每个矩阵含有一个频带的图像。
  • 分层图像数据结构(bierarchical image data structures):用不同的分辨率的矩阵来获得。

共生矩阵(co-occurrence matrix)

​ 它是亮度为z的像素(i1,j1)和亮度为y的像素(i2,j2)的具有空间关系的两个像素的概率估计。

​ 假设这个概率仅依赖于亮度z的像素和亮度y的像素之间的某个空间关系r,那么关于关系r的信息就记录在方形的共生矩阵C中,它的维数对应图像的亮度级别数。

算法:关系r的共生矩阵Cr(x,y)

  1. Cr(z,y)=0,对于所有的z,y[0,L],L是最大的亮度。
  2. 对于图像中所有的像素(i1,j1) ,找到与像素(i1,j1)有关系r的像素(i2j2),做Cr[f(i1,j1),f(i2,j2)]=Cr[f(i1,j1),f(i2,j2)]+1.

积分图像

​ 描述全局信息的矩阵表示方法。积分图像的构造方式是位置(i,j)处的值ii(i,j)是原图像的(i,j)左上角所有像素的和:ii(i,j)=ki,ljf(k,l)

算法:积分图像的构建

  1. s(i,j)表示行方向的累加和,初始化s(i,1)=0

  2. ii(i,j)表示一个积分图像,初始化ii(1,i)=0

  3. 逐行扫描图像,递归计算每个像素(i,j)行方向的累加和s(i,j)和积分图像ii(i,j)的值

    s(i,j)=s(i,j1)+f(i,j)

    ii(i,j)=ii(i1,j)+s(i,j)

  4. 扫描图像一遍,当到达图像右下角像素时,积分图像ii构造好了。

积分图像这个数据结构主要用来快速计算多个尺度的简单矩阵图像特征。

2.2 链

​ 链在计算机视觉中用于描述物体的边界。链的元素是一个基本符号,这种方法使得在计算机视觉任务中可以使用任何形式的理论。链适合组织成符号序列的数据,链中相邻的符号通常对应于图像中邻接的基元。

2.3 拓扑数据结构

图(graph)G(V,E)是一个代数结构,有一组结点V=v1,v2,,vn和一组弧E=e1,e2,,en构成。每条弧ek代表一对无次序的结点{vi,vj}。结点的度数等于该结点所具有的弧数。

赋值图(evaluated graph):指弧和结点或两者都带有数值的图。

区域邻接图(region adjacency graph):其中结点对应与区域,相邻的区域用弧连接起来。

2.4 关系结构

3 分层数据结构

3.1 金字塔

M型金字塔(M-pyramids)矩阵

M型金字塔:是一个图像序列{ML,ML1,,M0}其中ML是具有与原图像同样的分辨率和元素的图像Mi1Mi降低一半分辨率得到的图像。通常我们只考虑维数是2的幂的方阵。

M型金字塔存储所有图像矩阵需要的像素个数为N2(1+14+116+)=1.33N2

T型金字塔(T-pyramids)树形

T型金字塔:树状结构。设2l是原图像的大小(最高分辨率)。

定义:

  1. 一个结点集合P={P=(k,i,j)}使得级别k[0,L]i,j[0,2k1]
  2. 一个映射F,定义在金字塔的结点Pk1,Pk之间F(k,i,j)=(k1,i div 2,j div 2)div表示整除
  3. 一个函数V,将金字塔的结点P映射到Z,其中Z是对应于亮度级别数的所有数的子集合

    特点:

  4. 对于给定的k,T型金字塔的结点对应于M型金字塔的一些图像点,结点P={(k,i,j)}集合的每个元素对应于M型金字塔的一个矩阵,称k为金字塔的层数。

  5. 对于给定的k ,图像P={(k,i,j)}构成金字塔的第k层的一个图像。
  6. F是所谓的父亲映射,在T型金字塔中,除了根(0,0,0)之外的所有的结点Pk都有定义。
  7. 除了叶子结点外,T型金字塔的每个结点都有4个子结点,叶子结点是第L层的结点,对应于图像的单个像素。

3.2 四叉树

​ 对T型金字塔的改进,除叶子结点外每个结点有4个子结点(西北NW,东北NE,西南SW,东南SE),在每个层次图像被分解为4个象限。

2015-12-11 10:57:38 majinlei121 阅读数 8107
  • 2016年上半年上午真题5-9

    没有实际的配置过交换机、路由器等设备,没有系统的学习过案例分析,无法...本门课程紧抓考生痛点,按照短期、速效、重点突出的原则,课件中直接给出知识点的出题形式,让您在短时间内抓住考试要点,顺利通过下午考试。

    615人学习 任铄
    免费试看

介绍

本节主要由学习论文Structure Extraction from Texture via Relative Total Variation一文中的内容而来。我们知道,很多自然场景和人工艺术品都包含纹理(如,墙上,火车和地铁表面上的涂鸦和图案。像地毯,毛衣,和其他一些精美的工艺品包含格式各样的几何图案)。在人类历史中,马赛克被视为一种艺术形式,它可以表示人和动物这类复杂的场景,并可以用石头,玻璃,陶瓷和其他一些材料模仿油画。当用Bing或Google收索这些图像的时候,你可以很快的找到成千上万类似图片。

下图所示展示了一些代表不同形式场景的实例。他们有一个共同的特征:图像中有意义的结构和纹理单元融合在一起。所以我们通常称这类图片为“结构+纹理”图片。一个很有意思的现象:在不去除纹理的前提下,人类的视觉感知系统完全有能力理解这些图像。从心里学角度分析,图像的整体结构特才是人类视觉感知的主要数据,而不是那些个体细节(纹理)。因此从图像中提取那些有意义的结构数据是一项具有意义的工作,同时对于计算机来说也是非常有挑战性的。


理论描述

在这篇论文一文中,提出了一种基于总变差形式新模型,该模型可以有效的分解图像中的结构信息和纹理,并且无需特别指定纹理是否规则或者对称。换言之,该方法具有一般性和随意性,它适用于非统一的或各向异性的纹理。下面介绍一下该方法。


上式为总变差模型, I代表输入图像,p代表2D图像像素的索引,S代表输出结构图像。其中可以写成如下各向异性的形式:


改进的模型如下

其中:


q为以p点为中心的一个正方形区域内所有的像素点的索引,g为高斯核函数:


我们看一幅包含纹理的图像。如下图所示:


其中图(a)所示是一幅包含纹理的图像。(b)则反映了纹理和结构像素点都会产生比较大的D(D值大反应在图像中也就是对应像素点的亮度高);(c)可以看出结构部分中的L(L值大反应在图像中也就是对应像素点的亮度高)值大于纹理部分的L值,造成这种现象的一种直觉上的解释为:在包含在一个局部的小窗口中主要结构往往产生比包含在另一个窗口的复杂纹理具有更多相似方向的梯度。(d)为 (也就是(3)式中的规则项)的映射,而这个规则项让主要结构部分更加突出。(e)则是(a)用式(3)去除纹理后的结构图像。

现在,我们介绍怎么样求解公式(3): 先讨论X方向,Y方向的计算类似。

由于引入了小上述公式的第二行实际是一个近似计算。同时重新构造二次项和非线性部分。它们可以分别表示为如下形式:

上式中为标准差为的高斯核函数,*为卷积符号。Y方向上的求解类似

其中


有了这些算子可以将公式(3)写成如下矩阵的形式:


其中是vs和vi代表S和I的两个列矢量。Cx和Cy是向前差分梯度算子的Toeplitz Matrices.都为对角矩阵,他们对线线上的值分别为:。然后,对矩阵(4)求导得到如下线性方程:


上公式可以至直接求矩阵的逆运算,或者用预处理共轭梯度法来求解。

编码实现

  1. function S = tsmooth(I,lambda,sigma,sharpness,maxIter)  
  2.     if (~exist('lambda','var'))  
  3.        lambda=0.01;  
  4.     end     
  5.     if (~exist('sigma','var'))  
  6.        sigma=3.0;  
  7.     end   
  8.     if (~exist('sharpness','var'))  
  9.         sharpness = 0.02;  
  10.     end  
  11.     if (~exist('maxIter','var'))  
  12.        maxIter=4;  
  13.     end      
  14.     I = im2double(I);  
  15.     x = I;  
  16.     sigma_iter = sigma;  
  17.     lambda = lambda/2.0;  
  18.     dec=2.0;  
  19.     for iter = 1:maxIter  
  20.         [wx, wy] = computeTextureWeights(x, sigma_iter, sharpness);  
  21.         x = solveLinearEquation(I, wx, wy, lambda);  
  22.         sigma_iter = sigma_iter/dec;  
  23.         if sigma_iter < 0.5  
  24.             sigma_iter = 0.5;  
  25.         end  
  26.     end  
  27.     S = x;        
  28. end  
  29.   
  30. function [retx, rety] = computeTextureWeights(fin, sigma,sharpness)  
  31.   
  32.    fx = diff(fin,1,2);  
  33.    fx = padarray(fx, [0 1 0], 'post');  
  34.    fy = diff(fin,1,1);  
  35.    fy = padarray(fy, [1 0 0], 'post');  
  36.         
  37.    vareps_s = sharpness;  
  38.    vareps = 0.001;  
  39.   
  40.    wto = max(sum(sqrt(fx.^2+fy.^2),3)/size(fin,3),vareps_s).^(-1);   
  41.    fbin = lpfilter(fin, sigma);  
  42.    gfx = diff(fbin,1,2);  
  43.    gfx = padarray(gfx, [0 1], 'post');  
  44.    gfy = diff(fbin,1,1);  
  45.    gfy = padarray(gfy, [1 0], 'post');       
  46.    wtbx = max(sum(abs(gfx),3)/size(fin,3),vareps).^(-1);   
  47.    wtby = max(sum(abs(gfy),3)/size(fin,3),vareps).^(-1);     
  48.    retx = wtbx.*wto;  
  49.    rety = wtby.*wto;  
  50.   
  51.    retx(:,end) = 0;  
  52.    rety(end,:) = 0;  
  53.      
  54. end  
  55.   
  56. function ret = conv2_sep(im, sigma)  
  57.   ksize = bitor(round(5*sigma),1);  
  58.   g = fspecial('gaussian', [1,ksize], sigma);   
  59.   ret = conv2(im,g,'same');  
  60.   ret = conv2(ret,g','same');    
  61. end  
  62.   
  63. function FBImg = lpfilter(FImg, sigma)       
  64.     FBImg = FImg;  
  65.     for ic = 1:size(FBImg,3)  
  66.         FBImg(:,:,ic) = conv2_sep(FImg(:,:,ic), sigma);  
  67.     end     
  68. end  
  69.   
  70. function OUT = solveLinearEquation(IN, wx, wy, lambda)  
  71.     [r,c,ch] = size(IN);  
  72.     k = r*c;  
  73.     dx = -lambda*wx(:);  
  74.     dy = -lambda*wy(:);  
  75.     B(:,1) = dx;  
  76.     B(:,2) = dy;  
  77.     d = [-r,-1];  
  78.     A = spdiags(B,d,k,k);  
  79.     e = dx;  
  80.     w = padarray(dx, r, 'pre'); w = w(1:end-r);  
  81.     s = dy;  
  82.     n = padarray(dy, 1, 'pre'); n = n(1:end-1);  
  83.     D = 1-(e+w+s+n);  
  84.     A = A + A' + spdiags(D, 0, k, k);   
  85.     if exist('ichol','builtin')  
  86.         L = ichol(A,struct('michol','on'));      
  87.         OUT = IN;  
  88.         for ii=1:ch  
  89.             tin = IN(:,:,ii);  
  90.             [tout, flag] = pcg(A, tin(:),0.1,100, L, L');   
  91.             OUT(:,:,ii) = reshape(tout, r, c);  
  92.         end      
  93.     else  
  94.         OUT = IN;  
  95.         for ii=1:ch  
  96.             tin = IN(:,:,ii);  
  97.             tout = A\tin(:);  
  98.             OUT(:,:,ii) = reshape(tout, r, c);  
  99.         end      
  100.     end  
  101.           
  102. end  

实验结果与分析

实验中ε和εs是2个小正值用来避免分母出现0的情况。其中ε固定为0.001. 而εs稍微大点会帮助保持光滑变化的结构部分,通常设定为0.02。公式(5)中的λ是一个不可或缺的权重它用来控制图像的光滑程度,但是仅仅调节它不会使纹理分离太多。而增加λ也会造成图像的模糊并且纹理反而保留下来。 一般λ选取为0.01到0.03之间。图1表示不同迭代步数显示的结果,实验发现该算法3-5步就可以达到收敛状态。


空间尺度参数σ控制了公式(4)中窗口的大小,它的选取取决于纹理的尺度大小并且在结构纹理分离过程中至关重要,经验的选取σ为0到8之间,图2说明了增强σ可以很好地抑制纹理。并且实验中发现在每一次迭代时成倍的减小,可以起到锐化边缘的效果,同时不会减弱纹理去除的能力.


当一幅物体的表面包含多重纹理形式或者可以看成非正面方向,纹理单元就可以认为是不同变化尺度的。图2和图3就是这样一类图像。因为在该算法中小于相对于尺度参数 那些纹理都得到了有效的惩罚,所以文章的提出模型可以很好的处理这种类型的图像。当然,如果远处的结构和近处的纹理相似,他们也都会被去除。因为该算法依赖于局部的数据,所以我们不需要认为局部的梯度是各项同性的。只要在一个局部窗口中方向相反的梯度相互抵消,该方法就能生效,而不管梯度模式是不是各项同性的或是异性的。

图像矢量化就是把一个像素图像转化为一个矢量图。矢量图可以任意的放大和缩小而不会丢失细节部分,然而大多数矢量化的方法都不能表示好的细节部分。由于复杂的纹理模式和局部像素点的不断震荡的普遍存性,矢量化“结构+纹理”这一类图像变的更加困难。观察如下图所示:


图8(c)和(e),经典的矢量化软件Vector Magic也不能很好地完成矢量化。在本文中,我们开始先分解纹理和结构,分解的结构图为图8(b),然后矢量化就可以很好地运用了。在矢量化的过程中,结构图像(b)直接被放大。于此同时,纹理图像可以用双线性插值作为一个位图重新被放大。最后合成这两层图像获得图8(f)。相对于传统的方法,该矢量化算法可以产生更好地效果:不丢失边缘和细节信息。

本文的算法还可以用于边缘提取。如下图所示,展示了一个例子,该幅图像中包含很明显的前景和背景的纹理,这往往导致边缘提取的失败。图9(b)和(c)使用不同参数的额Canny边缘检测提取的边缘。很明显这样的边缘是不令人满意的。该方法可以先获得好的结构图像(d),然后再检测该结构图像的边缘得到(e)。图(6)说明了一样的道理。


由于源纹理和目标纹理的不兼容性,有时涂鸦图像,油画,和素描不能直接运用到图像融合中。图11和图12就是一个很好的例子。


直接将图11(a)和图12(a)融入目标场景中得到图11(c)和图12(e),不难发现融合的图像很不自然。然而将纹理分离后的图11(b)和图12(b)融入相同场景得到的图11(d)和图12(d)却很自然。改组实验说明了本文算法可以很好运用到图像融合中。

补充说明

一般来说,我们知道Matlab只适合于科研。如果想做成产品,需要用其他的比如C/C++之类的实现该算法,对于这点,这个程序可能有点困难,主要的困难在于其中的解线性方程组。因为在本算法中,方程组的系数矩阵式一个很大的稀疏矩阵,有多大呢,比如如果图像时600x600的,那么这个矩阵的大小就是500000x500000,因此,直接的实现对于内存等方面肯定不现实,必须研究稀疏矩阵的存储方式,另外,解方程所用的共轭梯度法也不是一下子就能实现的,正在研究......同时,关于C/C++版本程序也还在研究中......(^_^)。但是,此算法由于占用太多内存,那Android手机上更不用说了。不过,如果有时间还是可以好好优化一下。呵呵......

参考文献

[1] Li Xu, Qiong Yan, Yang Xia, Jiaya Jia, "Structure Extraction from Texture via Relative Total Variation", ACM Transactions on Graphics (TOG), 31(6), 139, Proceedings of ACM SIGGRAPH Asia 2012.

2018-06-28 18:47:11 Julialove102123 阅读数 2498
  • 2016年上半年上午真题5-9

    没有实际的配置过交换机、路由器等设备,没有系统的学习过案例分析,无法...本门课程紧抓考生痛点,按照短期、速效、重点突出的原则,课件中直接给出知识点的出题形式,让您在短时间内抓住考试要点,顺利通过下午考试。

    615人学习 任铄
    免费试看

第九章:形态学图像处理

1、图像的腐蚀和膨胀是两个基本的形态学操作,利用一些基于腐蚀和膨胀的形态学算法如边界提取、孔洞填充、凸壳、细化、骨架、裁剪等,可以从输入的图像中,输出感兴趣的特征。

预备知识

集合论:集合的并、交、补、差、平移、反射



这里写图片描述

>> f1 = imread('Fig0903(a)(utk).tif');
>> f2 = imread('Fig0903(b)(gt).tif');
>> g1 = ~f1;
>> g2 = f1|f2;
>> g3 = f1&f2;
>> g4 = f1&~f2;
>> subplot(161) ,imshow(f1)
>> subplot(162) ,imshow(f2)
>> subplot(163) ,imshow(g1)
>> subplot(164) ,imshow(g2)
>> subplot(165) ,imshow(g3)
>> subplot(166) ,imshow(g4)

这里写图片描述

腐蚀&膨胀

结构元SE : strel

这里写图片描述

这里写图片描述

这里写图片描述

腐蚀:使图像缩小 A和B是两个集合,A被B腐蚀定义为:



应用:消除图像细节部分,产生滤波作用


膨胀:使图像扩大 A和B是两个集合,A被B膨胀定义为


   上式1表示:B的反射进行平移与A的交集不为空

    B的反射:相对于自身原点的映象

    B的平移:对B的反射进行位移


应用:桥接文字裂缝



对偶性:

膨胀和腐蚀彼此关于集合求补运算和反运算是对偶的:




开操作&闭操作

开操作:使图像的轮廓变得光滑,断开狭窄 的间断和消除细的突出物

Ø 使用结构元素B对集合A进行开操作,定义为:


含义:先用B对A腐蚀,然后用B对结果膨胀


闭操作:同样使图像的轮廓变得光滑,但与开操作相反,它能消除狭窄的间断和长细的鸿沟,消除小的孔洞,并填补轮廓线中的裂痕

Ø    使用结构元素B对集合A进行闭操作,定义为:


 含义:先用B对A膨胀,然后用B对结果腐蚀

对偶性质:


应用:指纹

Ü   a图是受噪声污染的指纹二值图像,噪声为黑色背景上的亮元素和亮指纹部分的暗元素

ü   b图是使用的结构元素

ü   c图是使用结构元素对图a腐蚀的结果:黑色背景噪声消除了,指纹中的噪声尺寸增加

ü   d图是使用结构元素对图c膨胀的结果:包含于指纹中的噪声分量的尺寸被减小或被完全消除,带来的问题是:在指纹纹路间产生了新的间断

ü   e图是对图d膨胀的结果,图d的大部分间断 被恢复,但指纹的线路变粗了

ü   f图是对图e腐蚀的结果,即对图d中开操作的闭操作。最后结果消除了噪声斑点

ü    缺点:指纹线路还是有缺点,可以通过加入限制性条件解决


击中或击不中变换:形状检测的基本工具

基本形态学算法

1、边界提取

定义:

上式表示:先用B对A腐蚀,然后用A减去腐蚀得到,B是结构元素

应用:

1表示为白色,0表示为黑色

 



2、孔洞填充

定义:

寻找背景点


X0=p,如果Xk=Xk-1,则算法在迭代的第k步结束。Xk 和A的并集包含被填充的集合和它的边界

条件膨胀:如果对上述公式的左部不加限制,则 上述公式的膨胀将填充整个区域。利用Ac的交集将结果限制在感兴趣区域内,实现条件膨胀

 


应用:




3、连通分量提取

定义:令Y表示一个包含于集合A中的连通分量,并假设Y中的一个点p是已知的。用下列迭代式生成Y的所有元素:

寻找前景点

x0=p,如果Xk=Xk-1,算法收敛,令Y=Xk


应用:自动检测


4、凸壳

用处:对物体描绘有帮助;

ü     如果连接集合A内任意两个点的直线段都在A的内部,则A是凸形的

ü     集合S的凸壳H是包含S的最小凸集合

ü     H-S称为S的凸缺

ü     求取集合A的凸壳C(A)的简单形态学算法:

令Bi表示4个结构元素,i=1,2,3,4,

A的凸壳为


ü     先对A用B1运用击中或击不中变换,反复使用,当不再发生变化时,执行与A的并集运算,用D1表示结果

ü     上述过程用B2重复,直到不发生变化。

ü     最后得到的4个D的并集组成了A的凸壳

(x表示不考虑)

 


上述过程的一个明显缺点是:凸壳可能超出确保凸性所需的最小尺寸

ü 解决办法:限制生长

1>限制水平和垂直方向上的尺寸大小,如下图所示。

2>限制水平、垂直和对角线方向上的最大尺寸。缺点是增加了算法的复杂性

 


5、细化

定义:

ü     细化过程根据击中或击不中变换定义


ü     定义结构元素序列为


Bi是Bi-1旋转后的形式,如在B4中旋转900

ü  用结构元素序列定义细化为


即连续使用B1,B2,…,Bn对A细化


6、粗化

ü     粗化和细化在形态学上是对偶过程,定义为


ü     用结构元素序列定义粗化为


即连续使用B1,B2,…,Bn对A粗化

ü     粗化可以通过细化算法求补集实现:先对所讨论集合的背景进行细化,然后对结果求

补集,即粗化可以通过细化算法求补集实现: 为了对集合A进行粗化,先令C=Ac,然后对C进行细化,最后形成Cc



7、骨架

集合A的骨架符号为S(A),A的骨架可用腐蚀和开操作来表达


其中:

    B:结构元素   为对A,k次腐蚀

    第K次是A被腐蚀为空集前最后一次迭代


    还可以重构


这种方法的实质是细化可以抽于其骨架,但并不能延伸到边缘通过找到端点并对其进行有限制的膨胀,可恢复细化失去的有用的端线(点),从而去掉那些无用的分支。

重构:




8、裁剪(后处理)

对细化处理和骨架绘制算法的补充,因为这些处理过程会将附加部分保留下来,应请除干净。

    现在想去除寄生分量(毛刺)的多余部分。

    可分4步来完成:

      (1) 令

   

 其中B为{B1,B2,B3,...B8},Bi为Bi-1转90°得到;

       (2)取X1端点集合X2

  

用来检测端点的结构元素;

       (3)端点三次膨胀,并用A作限定器

H为{x}结构元素,值为1

       (4)计算

 例如手写字体识别字母a的处理:


9、形态学重建

前面都是一幅图像和一个结构元;这里涉及两幅图像和一个结构元;

【测地腐蚀和膨胀】

F:标记图像;G:模板图像;(假设F、G二值图),且F⊆G.

测地膨胀:

  • 大小为1的标记图像关于G的测地膨胀,∩(集合的交,等同于逻辑AND(与))


  • F关于G的大小为n的测地膨胀:


其中:


测地腐蚀:

  • 大小为1的F关于G的测地腐蚀,∪(集合的并,等同于逻辑OR(或))


  • F关于G的大小为n的测地腐蚀:


其中:


【用膨胀和腐蚀的形态学重建】

标记图像F对模板图像G的膨胀形态学重建表示为(被定义为F关于G的测地膨胀),反复迭代至稳定状态:


模板图像G对标记图像F的腐蚀形态学重建表示为(被定义为F关于G的测地腐蚀),反复迭代至稳定状态:


【应用】

1>重建开操作:来自F的大小为n的腐蚀的F的膨胀重建


eg:从一个文本图像中提取长的、垂直笔画的字符;


2>填充孔洞



3>边界清除




10、二值图像形态学操作小结


 


灰度级形态学



代码练习:

http://www.cnblogs.com/tornadomeet/archive/2012/03/20/2408086.html

对应图片下载