从今天开始系统的学习一下Matlab吧,通过处理一下图像,来学习一下Matlab,把以前落下的功课都补上!
我们首先要认识一个图像的数据结构,从而更好地对图像进行操作,主要有矩阵,链表,拓扑结构这些
一、矩阵
矩阵可表示黑白图像,灰度图像,彩色图像,矩阵中一个元素即代表了一个像素点
黑白图像
- 黑白图像,矩阵取值只有0,1,即也称为二值图像
I = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0;
0, 0, 0, 1, 1, 1, 1, 0, 0, 0;
0, 0, 0, 1, 1, 1, 1, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 1, 1, 1, 1, 0, 0, 0;
0, 0, 0, 1, 1, 1, 1, 0, 0, 0;
0, 0, 0, 1, 1, 1, 1, 0, 0, 0];
imshow(I);
可得到像素点小一些的一个图片,注意绘制时使用imshow,这是由于matlab计算用的是double类型,对double类型图片imshow认为它的数值在0-1之间,大于1的认为是1
灰度图像
- 灰度图像,一般为灰度级0-255(这是由于马赫带效应而设定的),同时其为2的8次方,占计算机里一个字节8位,0表示黑色,1表示白色,取值均为整数
A=[
1.00 0.96 0.98 0.88 0.94 0.61 0.96 0.80 0.98 0.89
0.96 1.00 0.94 0.90 0.95 0.71 0.96 0.83 0.90 0.88
0.98 0.94 1.00 0.84 0.91 0.54 0.93 0.73 0.97 0.90
0.88 0.90 0.84 1.00 0.89 0.85 0.94 0.94 0.80 0.82
0.94 0.95 0.91 0.89 1.00 0.72 0.94 0.84 0.90 0.90
0.61 0.71 0.54 0.85 0.72 1.00 0.74 0.90 0.48 0.64
0.96 0.96 0.93 0.94 0.94 0.74 1.00 0.90 0.92 0.87
0.80 0.83 0.73 0.94 0.84 0.90 0.90 1.00 0.70 0.75
0.98 0.90 0.97 0.80 0.90 0.48 0.92 0.70 1.00 0.85
0.89 0.88 0.90 0.82 0.90 0.64 0.87 0.75 0.85 1.00];
mat = A;
imagesc(mat); %imagesc将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色。
colormap('gray'); %转为灰度图
axis off %去除边框
%set(gcf, 'color', [1 1 1]);
彩色图像
- 彩色图像,三原色红绿蓝RGB构成,RGB中的每个像素由不同的灰度级RGB来描述,即每种单色有一种灰度级描述
RGB 三元组是包含三个元素的行向量,其元素分别指定颜色的红、绿、蓝分量的强度。强度必须在 [0, 1] 范围内。
颜色 | RGB三元组 |
---|---|
黄色 | [1 1 0] |
品红色 | [1 0 1] |
青蓝色 | [0 1 1] |
红色 | [1 0 0] |
绿色 | [0 1 0] |
蓝色 | [0 0 1] |
白色 | [1 1 1] |
黑色 | [0 0 0] |
mat = [0.2 0.1 0.5
0.1 0.5 0.8
0.2 0.7 0.6
0.8 0.7 0.3
0.9 1 0];
这是5个颜色值
A = zeros(100, 100, 3, 'uint8'); %创建数组100*100*3的三维数组,相当于三个图层,默认均为0
A(:, :, 1) = 255; %第一个图层全设定为白色
A(1:50, 1:50, 2) = 255; %第二个图层前50行50列设定为白色
A(50:100, 50:100, 3) = 255; %第三个图层后50行50列设定为白色
imshow(A)
二、链码
即freeman码,用于描述目标图像的边界,规定链的起始坐标以及以起始点坐标开始的斜率,其余点用线段的方向数表示方向即可,按标准方向的斜率分为4向链码或8向链码
![](/qrcode.jpg)
原链码
从边界(曲线)起点S开始,按顺时针方向观察每一线段走向,并用相应的指向符表示,结果就形成表示该边界(曲线)的数码序列,称为原链码。
2、归一化链码
原链码具有平移不变性(平移时不改变指向符),但当改变起点S时,会得到不同的链码表示,即不具备唯一性。为此可引入归一化链码,其方法是:对于闭合边界,任选一起点S得到原链码,将链码看作由各方向数构成的n位自然数,将该码按一个方向循环,使其构成的n位自然数最小,此时就形成起点唯一的链码,称为归一化链码,也称为规格化链码。
给定一个从任意点开始得到的链码,把它看作一个由各方向数构成的自然数。将这些方向数依一个方向循环,以使它们所构成的自然数的值最小。我们将这样转换后所对应的链码起点作为这个边界的归—化链码的起点。
(因为能力有限,这部分代码还敲不出来哈~)
三、拓扑结构
拓扑结构用于描述图像的基本结构,通常在于形态学的图像处理或是二值图像中,用于描述目标事件发生的次数,在一个目标事件中有多少个孔洞,有多少连通区域等。
邻域
在图像中定义相邻的概念,一个像素与它周围的像素组成一个邻域,如下图所示(其中p为参考像素)
图为4邻域(即只有4个方向),记为N4(p)
首先要注意一下,其坐标轴为以左上角为原点,竖向为x轴,横向为y轴,若中心p的坐标为(x,y),则左边r像素坐标为(x,y-1)
图为对角邻域,记为p的对角邻域(ND(p))
图为8邻域,记为N8(p)(8个方向,其中s表示p的对角邻域)
邻域仅考虑像素间的空间关系
邻接
空间上相邻且像素灰度值相似
- 两个像素是否邻接:
(1) 是否接触(在邻域内)
(2) 灰度值是否满足某个特定的相似准则:同在一个灰度值集合V中
这里假设V为灰度值集合 V ={1}
4-邻接
这里对于中心像素1来说,只有上面那个黄色区域中的1满足其4-邻接的关系(由于满足在邻域内,且灰度值在集合中
8-邻接
对于中心像素1,其8-邻域有周围所有的像素点,但是只有正上方和右下角满足灰度级在灰度集合中,故这两个像素点满足8-邻接关系
m-邻接
m-邻接(混合邻接):
2个像素 p 和 r 在V 中取值,且满足下列条件之一
① r 在N4 (p)中
② r 在ND(p)中且集合N4(p)∩N4(r)是空集
分析可知,(b)中存在m-邻接,这是由于满足条件2,不满足条件1,而(c)中不存在,因为条件二也不满足,存在交集1
连通
反映两个像素间的空间关系
像素p(x, y)到像素q(s, t)的一条通路 由一系列具有坐标(x0,y0), (x1,y1) ,…, (xi, yi) ,…,(xn, yn)的独立像素组成。这里 (x,y)= (x0,y0), (xn, yn) = (s, t),且 (xi, yi)与 (xi-1,yi-1)邻接。
其中1≤i≤n,n为通路长度
根据 (xi,yi)与 (xi-1,yi-1)邻接类型分为:
4-连通;8-连通;m-连通
4-连通没有p到q的路径,故n为无穷
对于8-连通,有两条路径可以到达,取其中路径短的,即n=2
对于m-连通,有一条路径,即n=3,前两步满足条件1,后一步满足无交集
四、关系结构
关系结构用于描述一组目标物体之间的相互关系,常用的描述方法为串描述和树描述。
- 串描述
一种一维结构,当用串描述图像时,需要建立一种合适的映射关系,将二维图像降为一维形式。串描述适用于那些图像元素的连接可以用来从头到尾或用其他连续形式的图像元素的描述。链码表示就是基于串描述思想描述的。
- 树描述
树是一种能够对不连接区域进行很好描述的方法。树是一个或一个以上节点的有限集合。其中,有一个唯一指定的节点为根,剩下的节点划分为多个互不连接的集合,这些集合称为子树,树的末稍节点称为叶子。在树图中有两类重要信息:一个是关于节点的信息,另一个是节点与其相年节点的关系信息。第一类信息表示目标物体的结构,第二类信息表示一个目标物体和另一个目标物体的关系。
图像结构就学习到这里咯!后面就要实战实练啦!