《MATLAB科学计算从入门到精通》书评
最近收到了面包板社区的《MATLAB科学计算从入门到精通》这本书,现在已经看完了,所以对此写一篇评价。
我本身是电子学专业的,但是修了第二专业,是数学与应用数学,在工作中又大量使用MATLAB这款软件,所以对此非常熟悉,也看过不少相关方面的书。这本书总体来说,偏简单,非常适合入门,就是写给0基础的小白看的书,如果是数学专业或者控制等相关的专业,很适合用这样一本书来入门。
本书的第一章是对MATLAB的基础介绍,简单讲解了一些MATLAB的基础知识,例如数据类型、句柄等操作。第二到第十五章,是针对不同的数学理论,用MATLAB的实现,例如常微分方程、拉格朗日差值公式等。
第二到第十五章的讲解逻辑大致如下:
这样的讲解逻辑,可以很轻松的读懂,并且附有例子和代码,便理解和练习。总体来说,这是一本不错的书,讲解的算是比较详细了,对于新手来说,算是比较友好的,很适合初学者观看,当然,如果是把这本是当做是一本工具书来使用,那也是非常方便,因为各个知识点分的比较清楚,便于查询。在阅读这本书时,唯一要注意的点是,这本书并没有包含MATLAB的使用教程,你可能需要花大约一个小时左右,对MATLAB这个软件有基本的了解,比如工作区等是什么东西,怎么使用,再去阅读。
讲了这么多,我们用书中讲解的东西来举个例子,考虑到只是测评,并且有很多新人看,所以就选一个简单点的问题。
题目:已将一张图片分为如下两张图,请将两张图正确拼接成一个图
首先,应当是用Matlab读取这个图像,然后变成灰度的图像,再将灰度图像二值化,代码用到的函数可以在书的第十二章查到:
a = imread('m2.png');%读取第一张图,叫a
subplot(4,2,1);%将图像窗口分成4*2个部分,在序号1的部分显示
imshow(a);%显示图a
b = imread('m3.png');
subplot(4,2,2);
imshow(b);
c = rgb2gray(a);%将图a转化为灰度,并叫c
subplot(4,2,3);
imshow(c);
d = rgb2gray(b);
subplot(4,2,4);
imshow(d);
e = imbinarize(c,0.5);%将图c二值化,并叫e
subplot(4,2,5);
imshow(e);
f = imbinarize(d,0.5);
subplot(4,2,6);
imshow(f);
结果为:
为什么要这样操作呢,因为图片实际上就是一堆数值的矩阵,彩色图像是三维矩阵,处理起来比较麻烦,如果能转换成二维矩阵,那么处理起来就很方便了,灰度图像就是一个二维矩阵。
灰度转化后,我们还是能出来图像的大致构成,因为灰度是一个范围,可以理解成,目前的图像是由五彩斑斓的黑构成的,不同的地方黑的不一样。我们可以对图像进一步处理,变成一个只有黑和白的图像,就是图像的二值化。
二值化后,图像的特征就极为明显了,我们用朴素的观察法,就能直接看出应该如何拼接图像,但是咱就假装看不出来,用点别的方法处理。
图片变成黑白的,为什么是二值化呢?因为现在矩阵e和f中,只有两个值,1和0,黑用0表示,白用1表示。那接下来问题就很简单了,只要检测矩阵边缘元素的0和1分布情况,相似的话,就应该拼接在一起。
首先我们先看一下两个矩阵的大小:
两个矩阵都是456行,说明应该从图片的长边拼接,就是e的最左边或者最右边跟f的最左边或者最右边拼接在一起。为了方便,e最左边命名为e1,最右边命名为e2,同样的有f1和f2,
那我们只需要检测这四个边元素的差异情况就行了,我们用最简单的方式进行,统计四条边有多少个1。能拼接在一起的两条边,1的数量应该相差不多,结果如下:
可以看到,应当是e2与f2拼接在一起,放在原图中,应该是图a的右边与图b的右边拼接在一起。那么,就需要先将图b旋转180°,然后与图a拼接,这样就可以得到一个完整的图像,最后又将合成后的图像逆时针旋转270°,方便观察,代码为:
结果为:
到此,这个题目就做完了。当然,这是一个简单到不能再简单的例子,运用书中的知识,可以轻松解决,我十分推荐初学者看这本书,可以快速入门MATLAB科学计算。总的来说,这本书的体验感海曙相当不错的,条理清楚,又带有案例,新手可以快速上手,哪怕是当成工具书,也能快速查阅并学会想要的知识点。
作者: 浩瀚星蓝, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3915834.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论