tag 标签: 科学计算

相关博文
  • 热度 4
    2024-1-9 12:10
    796 次阅读|
    0 个评论
    《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科学计算。总的来说,这本书的体验感海曙相当不错的,条理清楚,又带有案例,新手可以快速上手,哪怕是当成工具书,也能快速查阅并学会想要的知识点。
相关资源