了解点儿MATLAB,知道它非常有用,但一直不太会用,如何快速掌握并运用它呢?
本专栏力争用最简洁的语言和逻辑,让您在最短时间内,学到教材课程中罕见的MATLAB运用技法,从新手迈向成手。
图像就是矩阵
在本专栏——《重新学习MATLAB》的前面几课中,我们反复强调:
一切都是矩阵。
图像当然也不例外,在MATLAB中,图像有三种形式的矩阵:A 二值图像
矩阵中元素“非0即1”,一般0代表黑,1代表白。B 灰度图像
每个像素由一个数字表示灰度,这个数字是0到255之间的一个整数。C 彩色图像
彩色图像的每一个元素不是一个数字了,而是多个数字组成的向量。比如最常用的RGB彩色图像,每个元素是一个1x3向量,分别代表红/绿/蓝,每个数字也是0到255。
科技千里眼把三者总结成如下图:
三种图像的矩阵表达
核心概念——邻域
邻域是学习图像处理最先遇到的关键概念,它不是常规上泛泛地理解是邻近的区域,而是有更严格的定义。
邻域分为两种:
4-邻域 和8-领域。
看下图就能明白什么意义了:
像素 p 的两种邻域的定义
面向邻域有大量的操作,主要原理是建立一个邻域范围内的模板,模板上每个位置设置一个权重系数,再加权相加得到P点的新值。
这种方法其实专业上叫做:卷积,是不是似曾相识啊。
利用相似的原理,对于邻域上操作可以实现太多功能了,比如:模糊图像;
增强图像;
检测边缘;
消除噪声。
图像工具箱
啥叫工具箱?其实就是一大堆函数打了一个包,当你需要什么功能,就直接调用函数了,这就叫做你使用这个工具箱了。
使用MATLAB工具箱就相当于站在巨人的肩膀上
图像工具箱都有啥功能?太多了,你能想到的图像处理功能它基本都能涵盖,所以说,如果想到对图像进行什么处理,第一反应不应该是自己去编写,而是先查找是否有现成的函数可以用的。
最最基本的几个图像处理函数简介
图像处理最基本的函数就是图像的读写了:imread
读取几乎所有格式的图像,并存入一个矩阵中,这是图像处理的开始。imshow
显示一幅图像,还包含了多个参数选项可以设置。
图像处理就是矩阵计算imtool
也是显示图像,不过它更厉害了,提供了浏览和探索工具,比如像素区域工具/图像信息工具/对比度调整工具等。imwrite
将矩阵保存为图像。
算术运算
算术和逻辑运算是图像处理的重头戏,算数运算长什么样呢?
X opn Y = Z其中,opn代表+ - * / 操作符。
就这么简单。
直接上一个加的例子:imadd
I = imread('rice.png');J = imadd(I,50);imshow(I)figureimshow(J)
上面的代码,意思是打开一张图片存入I,再将I加了50,使用的是函数imadd,看看效果吧:
I 与 J 的结果显示——亮度提高了
所以,使用imadd将一个图像加上一个常数,效果是亮度提高,称为加性图像偏移。
imadd还可以将两幅图像加在一些,即imadd(X,Y)。
有加就有减,减是imsubtract.
加和减都会遇到一个问题,比如我们操作灰度图像,那么数值是0到255之间,那么加减之后,结果有可以上溢出(>255)或者下溢出(<>A 截断
简单粗暴,把上溢出的全设为255,把下溢出的全设为0。B 归一化
溢出后的元素也还是有最大值最小值的,我们作一个线性的处理,让最大值成255,最小值变成0。
其它函数:imabsdiff
计算两幅图像的绝对差。imcomplement
图像求反。来试一试吧:
图像求反,有点像老胶卷的感觉
逻辑运算
逻辑运算是二值图像处理的核心,因为二值图像由0-1组成,所以可以认为二值图像就是一个逻辑矩阵。
那么,逻辑运算符都可以用上了:AND 与:bitand
XOR 与或: bitxor
OR 或:bitor
NOT 非: bitcmp
认真看看下图,就可以了解逻辑运算了。
一张图理解逻辑运算
从上图我们还可以直观地了解到逻辑运算的用途——提取图像中的某一部分,这种方式称为掩膜法。
形态图像处理
紧接上面的逻辑运算,深入发展出了图像的形态学处理,简单地说,就是提取几何和拓扑的信息的方法,本文只介绍二值图像形态处理。