第二章

2.1视觉感知要素

2.1.1 人眼的结构

眼睛由角膜与巩膜外壳、脉络膜和视网膜包围,晶状体由通信的纤维细胞层组成,并由附在睫状体上的纤维悬挂;视网膜上分布两类光感受器(锥状体和杆状体),他们主要位于中央凹附近,对颜色高度敏感。其中锥状体视觉称为白昼视觉或亮视觉;杆状体没有色彩感觉,对低照明度敏感,当只有杆状体受刺激时(月光下),称为暗视觉或微光视觉。

*低照明水平下,主要有杆状体执行;高照明水平下,主要有锥状体执行。

2.1.2 眼睛中图像的形成

光接收器的相对刺激作用产生感知,把辐射能转变为电脉冲,最后由大脑解码。

2.1.3 亮度适应和辨别

由人的视觉系统感知的亮度是主观亮度,视觉系统具有亮度适应现象(通过改变整个灵敏度来完成这一较大的变动),视觉系统当前灵敏度级别称为亮度适应级别

在背景光强I的视野中增加一个照射分量ΔI,形成一个持续时间很短的闪烁,ΔI/I称为韦伯比,其值较小意味着可分辨强度较小的百分比变化,表明辨别能力"较好"。

表明感知亮度不是简单强度的函数的两种现象:马赫带,在强度不同的区域边界出现"下冲"或"上冲"现象;同时对比,感知区域的亮度并不简单的取决于其强度,与背景亮度也有关系。下面给出了这两个现象的例子。


2.2 光和电磁波谱

电磁波可以看成以波长λ传播的正弦波,每个无质量的粒子包含一定的能量,其称之为光子。可见光波段在整个电磁波谱中占相当窄的一部分,彩色谱的每种颜色不是突然中止的,而是混合平滑过渡到另外一种颜色。没有颜色的光称之为单色光或五色光,唯一属性是它的强度或大小,灰度级一词通常用来表示单色光的强度。

*从黑到白的单色光的度量值范围称为灰度级,单色图像通常称之为灰度图像。

描述彩色光源:发光强度,从光源流出能量的总量,用瓦特(W)度量;光通量,描述观察者从光源感受到的能量,用流明数(lm)度量;亮度,一种主观描述。

2.3 图像感知和获取

2.3.1 使用单个传感器获取图像

2.3.2 使用条带传感器获取图像

2.3.3 使用传感器阵列获取图像

2.3.4 简单的图像形成模型

我们用形如f(x, y)的二维函数来表示图像,在空间坐标(x, y)处,f的值或幅度是一个正的标量,其物理意义由图像源决定,因为其亮度与物理源的辐射能量有关, f一定是一个非零有限量

函数可以由两个分量来表征:入射到被观察场景的光源总能量和场景中物体反射的光的总能量(有时候用投射来替代反射)。这两个分量分别称为入射分量反射分量,分别用来表示,则

对于单色图像的任意坐标的灰度可以表示为l=f(x, y),其值范围是。这区间称为灰度级,通常情况下是[0, L - 1],最小值为黑色,最大值为白色。

2.4 图像取样和量化

我们将连续的感知数据转换为数字形式有两步处理:取样和量化。

2.4.1 取样和量化的基本概念

对坐标值的数字化称之为取样,对灰度值的离散化称之为量化

2.4.2 数字图像表示

通过取样和量化,我们可以把一幅图像函数转换为数字图像,其坐标张成的实平面部分称为空间域,x和y称之为空间变量空进坐标

一副数字图像可以用三种方式进行标示:

  1. 函数图:x和y是空间坐标,z是f在此坐标处的值。
  2. 灰度图:每个点的灰度值与该点的f值成正比,当图像的一部分被打印并作为数值进行分析时,这种表示相当有用。
  3. 矩阵:可以直接进行处理和算法开发。

用矩阵表示时,矩阵中每个元素是将图像单元、图像元素或像素,注意数字图像的远点位于左上角,出于存储和量化硬件的考虑,灰度级数典型地取2的整数次幂,即,灰度跨越的值域非正式的称谓动态范围,作为一条规则,上限取决于饱和度,下限取决于噪声。与这一概念紧密联系的是图像对比度,我们定义一幅图像中最高和最低灰度级间的灰度差为对比度。饱和度指超过这个值的灰度级将被剪切掉这样的一个最高值,噪声表现为粒状的纹理模式,在较暗区域掩盖了可检测的最低真实灰度级。

2.4.3 空间和灰度分辨率

空间分辨率是图像中可分辨最小细节的度量,每单位距离线对数和单位距离点数是最长用的度量,要注意的是空间分辨率的度量必须针对空间单位来规定才会有效。

灰度分辨率是在灰度级中可分辨的最小变化。

2.4.4 图像内插

内插是在诸如放大、收缩、旋转和几何校正等任务中广泛应用的基本工具,从根本上看,内插是用已知数据来估计未知位置的数值的处理。如将一副500×500的图像放大到750×750的图像。

最简单的方法是最近邻内插法,将原图像中最近邻的灰度赋值给每个新的位置;常用的是双线性内插法,用4个最近邻去估计给定位置的灰度,但它并不是一种线性方法,公式如下:

更复杂的是双三次内插,包括16个最近邻点。它是商业图像编辑程序的标准内插方法,公式为:

2.5 像素间的基本关系

本书中,图像用f(x, y)表示,某个特殊的像素用小写字母表示,如或者。

2.5.1 相邻像素

像素p的4邻域:(x+1, y) (x-1, y) (x, y+1) (x, y-1),这四点称之为p的邻点,用表示;p的四个对角邻点用表示;这8个点称为p的8邻域,用表示。如果p在边界上,在第三章进行处理。

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

    

邻接性分为4邻接、8邻接和m邻接(又称m邻接);令S是贴图想中的一个像素子集,若S的全部像素之间存在一个通路,则可以说两个像素p和q在S中是连通的,对于S中任意像素p,S中连通到该像素的集称为S的连通分量,若S仅有一个连通分量,则S称为连通集。

令R为图像中的一个子集,若R为连通集,则称R为一个区域。

区域R的边界(边缘或轮廓)是这样一些点的集合:这些点与R的补集中的点邻近,这种边界也成为内边界。

2.5.3 距离度量

对于坐标分别为(x, y)(s, t) (v, w)的像素p, q, z,若

则D 称为距离函数或度量;像素p, q的距离定义如下:

2.6 数字图像处理中所用数学工具介绍

http://v.163.com/special/opencourse/daishu.html,这是网易公开课--MIT的线性代数,Gilbert Strang教授讲得很有应用性。

2.6.1 阵列与矩阵操作

2.6.2 线性操作与非线性操作

线性操作针对的是加和操作和数乘操作。

2.6.3 算术操作

值得是两个矩阵点对点做数学运算,图像相加可以做平滑噪声的处理,图像相减可以增强差别,图像相乘或相除可以用来矫正阴影和进行模板操作。

*均值为$m$的随机变量$z$的方差定义为$E[(z-m)^2]$,其中$E{}$是该参量的期望值;两个随机变量的协方差定义为$E[(z_i-m_i)(z_j-m_j)]$,若两个变量不相关,则它们的协方差为0。

2.6.4 集合和逻辑操作

基本集合操作

属于、空集、交集、并集、补集的基本概念与数学中学的类似,还有一个差集的概念:

$$A-B=\{w|w\in A,\,w\notin B\}=A\cap{B^c}$$

图像灰度集合操作中会有些小的变化,首先元素是三元形式$(x, y, z)$,其中$x, y$是空间坐标,$z$是灰度,那么补集定义$A^c=\{(x, y, K-z)|(x, y, z)\in A\}$,并集定义$A\cup B=\{\mathrm{max}_z(a,b)|a\in A,b\in B\}$等等。

逻辑操作

包括的操作有非(NOT)、与(AND)、或(OR)、与非(做差集AND[NOT])和异或(XOR)操作,其中需要注意的是AND, OR, NOT是功能完备的。

模糊集合

用以处理界限不精确的分类集合,比如用年龄区分。

2.6.5 空间操作

空间操作可以分作三类:

单像素操作:

$$s=T(z)$$

其中$z$是源图像中某像素的灰度,$s$是处理后图像中相应的灰度,$T$是变换函数。

邻域操作

令$S_{xy}$代表图像$f$中任意一点$(x,y)$为中心的一个邻域坐标集,然后在这个邻域内经过一些操作生成一个像素的坐标值。

几何空间变换和图像配准

几何变换也叫橡皮膜变换,它由两个基本操作组成:坐标空间变化+灰度内插(空间变换之后的像素赋灰度值)。

最常用的空间坐标变换是仿射变换,形式如下:

$$\begin{bmatrix} x & y & 1 \end{bmatrix}=\begin{bmatrix}v & w & 1 \end{bmatrix}T=\begin{bmatrix} v & w & 1 \end{bmatrix}\begin{bmatrix} t_{11} & t_{12} & 0\\ t_{21} & t_{22} & 0 \\ t_{31} & t_{32} & 0 \end{bmatrix}$$

其中矩阵$T$可以实现恒等变换、尺度变换、旋转变换、平移变换、以及垂直和竖直方向的便宜变换。对于$T$中的元素,$t_{11}$ 和$t_{22}$表明尺度变换因子,$t_{12}$表明水平偏移变换,$t_{21}$表明垂直偏移变换,$t_{31}$和$t_{32}$表明平移变换情况。

上式可以有两种方法来使用,一种是向前映射,一种是逆计算,称作反向映射,即$(v,w)=T^{-1}(x,y)$的,就实现角度来讲,往往反向映射更为有效。

图像配准是数字图像处理的一种重要应用,用于对齐多幅相同场景的图像。这多幅图像可能是多模态的,使用的方法是利用约束点。往往约束点选取的越多,其准确度也越高,但计算量会相应增加。

2.6.6 向量与矩阵操作

一个像素可以用向量来表示,如RGB彩色图像;一幅图像也可以用向量来表示,即一个$M\times N$的矩阵变为$MN\times 1$的向量。

对于用矩阵表示的像素,任一点$a$在$n$维空间的欧氏距离$D$可以表示为:

$$D(\vec{z},\vec{a})=\begin{bmatrix}(\vec{z}-\vec{a})^T(\vec{z}-\vec{a})\end{bmatrix}^{\frac{1}{2}}=\sum_{i=1}^{n}{(z_i-a_i)^2}^{\frac{1}{2}}$$

2.6.7 图像变换

一种二维线性变换$T(u,v)$可以表示为

$$T(u,v)=\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)r(x,y,u,v)$$

其中$f(x,y)$是图像,$r(x,y,u,v)$称为正变换核,如果从$T$到$f$,需要的变换核称为反变换核,这两种变换在一起称为变换对。对于变换核,如果可以拆分,如

$$r(x,y,u,v)=r_1(x,u)r_2(r,v)$$

那么我们称变换核是可分的,如果$r_1=r_2$,那么变换是对称的,例如二维傅里叶变换

$$r(x,y,u,v)=e^{-j2\pi(\frac{ux}{M}+\frac{vy}{N})}$$

上图描述了线性变换域执行图像处理的基本步骤,变换可以看作一个变换举矩阵作用到图像矩阵上。

2.6.8 概率方法

随机变量$z$的第$n$阶矩定义为:

$$\mu_n(z)=\sum_{k=0}^{L-1}(z_k-m)^np(z_k)$$

其中$p(z_k)$是图像中灰度级$z_k$出现的概率,$m$为整幅图像的灰度均值,所以我们可以得到$\mu_0(z)=1$,表示概率之和为1;$\mu_1(z)=m$,表示整幅图像的期望值;$\mu_2(z)=\sigma^2$,表示方差。

*高阶矩的敏感性更高,对于图像的视觉特性也有越明显的作用。

 

 

MATLAB 版

这一章节主要是一些概念介绍和函数介绍。

2.1 数字图像的表示

2.1.1 坐标约定

IPT(Image Process Tools)中关于坐标的描述与数学上的描述略有不同,主要区别有:

  1. 使用$(r,c)$来代表行和列。
  2. 远点在$(1,1)$处。

MATLAB的基本单位是矩阵,对于一个数来说,可以看做是$1\times 1$的标量,一副数字图像可以表示成:

$$f=\begin{bmatrix}f(1,1) & f(1,2) & \cdots & f(1,N) \\ f(2,1) & f(2,2) & \cdots & f(2,N) \\ \vdots & \vdots & \ddots & \vdots \\ f(M,1) & f(M,2) & \cdots & f(M,N) \\\end{bmatrix}$$

一个$1\times N$矩阵称为一个行向量,一个$M\times 1$矩阵称为一个列向量

2.2 读取图像

imread - Read image from graphics file.

用法:f = imread('路径名+文件名+扩展名')

其支持的格式有

size – Size of array.给出一幅图像的行数和列数

    用法:[M, N] = size(f)

whos - List current variables, long form. 显示出一个数组的附加信息

    用法:whos f

2.3 显示图像

imshow - Display image in Handle Graphics figure.

    用法:imshow(f, G)

其中G是该图像的灰度级数,默认是256,用一个数组表示[low high],如果参数不写,那么会将整幅图像的像素灰度值等比例拉伸到0-255,如下图效果:

Figure - Create figure graphics object. 用以显示多福图像时辅助使用。

    用法:imshow(f), figure, imshow(g)

2.4 保存图像

Imwrite - Write image to graphics file.

    用法:imwrite(f, '路径名+文件名+扩展名')

针对JPEG图像使用imwrite,可以通过调整最后一个缺省参数达到压缩效果:

    用法:imwrite(f, '路径名+文件名+扩展名', q)

其中的q是一个0-100之间的整数,q越小,图像退化越严重。

其支持的格式有

imfinfo - Information about graphics file.

    用法:k = imfinfo ('路径名+文件名+扩展名')

此时的k可以看做一个结构体(针对C语言),具体显示可以使用"."操作符,如k.Filename。

round – Round to nearest integer.

    用法:m = round(x)

2.5 数据类

MATLAB默认的数据类型是double,其支持的数据类有

 

 

 

2.6 图像类型

支持四种图像类型:亮度图像、二值图像、索引图像、RGB图像。

2.6.1亮度图像

类型有unit8 ,范围是[0, 255];unit16,范围[0, 65535];double,归一化之后范围[0, 1]。

2.6.2 二值图像

其像素取值只能是0或者1。

logical – Convert numeric values to logical

    用法:B = logical(A)

islogical - Determine if input is logical array

    用法:tf = islogical(A)

如果是二值图像,返回1,;如果不是,返回0。

2.7 数据类与图像类型间的转换

2.7.1 数据类型间转换

语法简单:B = data_class_name(A);比如B = double(A)。

*从double到Unit8的时候,小于0的全部置为0,大于255的置于255,其他部分向下取整。

2.7.2 图像类和类型间的转换

mat2gray - Convert matrix to grayscale image.

im2bw – Convert image to binary image, based on threshold.

im2double – Convert image to double precision.

等等函数,其中用关系运算符也可以生成二值图像,如

$$f=\begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix} \ f > 2 : \ \begin{bmatrix} 0 & 0 \\ 1 & 1 \end{bmatrix}$$

2.8 数组索引

2.8.1 向量索引

转置运算符(.'),可以将行向量转置为列向量;取元素的数据块可以使用冒号操作符(:);end表示向量的最后一个元素

linspace – Generate linearly spaced vectors

    用法:x = linspace(a, b, n)

产生一个含有n个元素的行向量x,这n个元素线性地隔开并且包含a与b。

2.8.2 矩阵索引

example:

$$A=\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}$$

使用end作为索引:$B = A(2 : end, end : -2 :1)$,得到的结果为$\begin{bmatrix} 6& 4 \\ 7 & 9 \end{bmatrix}$,是因为从行方向上看取第2行至第3行;从列方向上看,从最后一行至第1行间隔取。

使用向量作为索引:$C = A([1 3], [2 3])$,得到的结果为$\begin{bmatrix} 2 & 3 \\ 8 & 9 \end{bmatrix}$,是因为行方向取1,3行,列方向取2,3列。

矩阵索引还可以使用寻址方式,形式为$A(D)$,其中D是一个逻辑数组,例如$\begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 1\\ 0 & 0 & 0 \end{bmatrix}$,那么$A(D) = \begin{bmatrix} 1 \\ 6\end{bmatrix}$

使用冒号,会将交矩阵所有元素按照列方向排成一个列向量,比如$E = B(:)$可以得到结果$E = \begin{bmatrix}1 \\ 4 \\ 7 \\ 2 \\ 5 \\ 8 \\ 3 \\ 6 \\ 9 \end{bmatrix}$

sum – Sum of array elements

    用法:sum(A)

可以得到的结果是 $\begin{bmatrix}12 & 15 & 18\end{bmatrix}$

2.8.3 选择数组维数

Operation(A, dim)

operation是一个可能的操作, A是一个数组,dim是一个标量,表明沿着第dim维给出相应结果。

ndims – Number of array dimensions

    用法:ndims(A)

其结果不会小于2,因为即使是标量,我们也认为是个$1\times 1$的数组。

2.9 一些重要的标准数组

$zeros(M,N)$生成一个大小$M\times N$的double类数组,其元素均为0。

$ones(M,N)$生成一个大小$M\times N$的double类数组,其元素均为1。

$true(M,N)$生成一个大小$M\times N$的logical类数组,其元素均为1。

$false(M,N)$生成一个大小$M\times N$的logical类数组,其元素均为0。

$magic(M)$生成一个大小$M\times M$的魔方数组,每一行元素之和、每一列元素之和和主对角线元素之和相等,主要用于测试目的,且元素均为整数。

$rand(M,N)$生成一个大小$M\times N$的double类数组,其元素在[0, 1]之间。

$randn(M,N)$生成一个大小$M\times N$的double类数组,其元素是正态分布的随机数,随机数均值为0,方差为1,如高斯分布。

2.10 M函数编程简介

2.10.1 M文件

M文件可以是简单执行一系列MATLAB语句的脚本,也可以是接受变量并产生一个或多个输出的函数。

函数的定义形式:

$$function [outputs] = name(inputs)$$

2.10.2 运算符

三类运算符:

  1. 执行数值计算的算术运算符
  2. 在数量上比较操作数的关系运算符
  3. 执行函数AND、OR和NOT的逻辑运算符

算术运算符

*点操作符,比如".^"、".*"都是点对点操作,两个操作数必须是相同的维数。

关系运算符

作用于两个相同维数的矩阵,点对点进行关系判断。其中"非"是"~="

逻辑运算符和函数

AND:"&"        OR:"|"    NOT:"~"

逻辑函数:

  • xor(异或):作用于两个相同维数的数组
  • all:若一个向量中所有元素都非零,则返回1。矩阵中按列操作。
  • any:若一个向量中任何元素都非零,则返回1。矩阵中按列操作。

一些重要的变量和常量

数的表示

可以使用科学技术规则。

2.10.3 流控制

if, else , else if:

if expression1

    statements

elseif expression2

    statements

else

    statements

end

for:

for index = start: increment: end

    statement

end

switch

switch switch_expression

    case case_expression

        statement

    case case_expression

        statement

    otherwise

        statement

end

如果case中有多个表达式,用花括号;且与C语言的switch相比,不需要break语句。

2.10.4 优化代码

  1. 向量化代码:将循环问题变成向量或矩阵预算。
  2. 预分配内存:计算开始前就分配足够的空间内存。

2.10.5 交互式I/O

input – Request user input.

disp – Display text or array.

strread – Read formateed data from string.

strcmp – Compare strings(case sensitive)

2.10.6 单元数组与结构简介

单元数组:是一个多维数组,其元素是其他数组元素的副本。(MATLAB中的赋值并不是做一个副本,而是做一个标号,除非原始数组发生了变化)比如$C={A, B}$之后数组A、B可能会改变,但C中不会跟着相应改变。

结构:类似单元数组,更接近于C语言中的结构体。

Digital Image Processing 学习笔记2的更多相关文章

  1. Digital Image Processing 学习笔记3

    第三章 灰度变换与空间滤波 3.1 背景知识 3.1.1 灰度变换和空间滤波基础 本章节所讨论的图像处理技术都是在空间域进行的.可以表示为下式: $$g(x, y) = T[f(x,y)]$$ 其中$ ...

  2. Digital Image Processing 学习笔记1

    第一章 1.1 数字图像 一幅图像可以定义为一个而为函数, 其中x和y是空间坐标,而在任何一对空间坐标(x, y)处的幅值f称为图像在该点处的强度或灰度.当x, y和灰度值f是有限的离散数值时,该图像 ...

  3. processing学习笔记

    这是从http://funprogramming.org/视频学习过程中做的笔记,没法看视频的话,请FQ 点point(x,y); 线line(x,y,x2,y2); 背景background(x), ...

  4. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  5. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  6. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  7. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  8. Hadoop学习笔记(2)

    Hadoop序列化:Long 和Int---变长编码的方法: 如果整数在[ -112, 127] ,所需字节数为1,即第一个字节数就表示该值. 如果大于127,则第一个字节数在[-120,-113]之 ...

  9. Dynamic CRM 2013学习笔记(四十一)流程4 - 异步工作流(Workflow)用法图解

    在CRM 2013 里,工作流被分成二类:异步工作流和实时工作流.异步工作流依赖一个windows 服务: Microsoft Dynamics CRM Asynchronous Processing ...

随机推荐

  1. Nonove js timer 计时器

    <html> <head> <title> Nonove js timer 计时器 </title> </head> <body> ...

  2. Linux 安装Rsync和配置

    1.检查rsync 是否已经安装 [root@test home]# rpm -qa|grep rsync 若已经安装,则使用rpm -e 命令卸载. [root@test home]#rpm -e ...

  3. android-解决 Android N 上 报错:android.os.FileUriExposedException

    解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appN ...

  4. DEDECMS 后台登录空白怎么办 后台无法登陆

    刚安装完dedecms,兴致冲冲的准备进后台,输入完用户名和密码后,页面 中显示一片空白. 立马到网上搜搜,发现大家各抒己见,但是都没有解决问题. 不过,下面的这个方法是可以的.马上记录下来,以备其他 ...

  5. [POJ1383]Labyrinth

    [POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...

  6. Stanford机器学习---第八讲. 支持向量机SVM

    原文: http://blog.csdn.net/abcjennifer/article/details/7849812 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回 ...

  7. 更改win7开机界面

    按“win+R”组合键,打开运行框,在打开框中输入"regedit”,单击“确定”. 打开注册表编辑器,依次展开注册表里: “HKEY_LOCAL_MACHINE---SOFTWARE--- ...

  8. POJ 1797 Heavy Transportation (Dijkstra变形)

    F - Heavy Transportation Time Limit:3000MS     Memory Limit:30000KB     64bit IO Format:%I64d & ...

  9. HDOJ 1203 I NEED A OFFER!(01背包)

    10397507 2014-03-25 23:30:21 Accepted 1203 0MS 480K 428 B C++ 泽泽 题目链接:http://acm.hdu.edu.cn/showprob ...

  10. PHP 逻辑思维题

    约瑟夫环 一群猴子排成一圈,按1,2,...,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止 ...