数字图像处理(MATLAB版)学习笔记——第1章 绪言
Posted 静哥哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字图像处理(MATLAB版)学习笔记——第1章 绪言相关的知识,希望对你有一定的参考价值。
0、下定决心
当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门。以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成果的。
1、本章知识点结构
下面的思维导图主要用xmind制作。知识点是对第1章的一些个人认为比较重要的知识概括了一下,然后加了自己的一点点理解。
2、书中例子实践
第一个例子,试一试手。
1 function f = twodsin(A, u0, v0, M, N) 2 f = zeros(M, N); 3 for c = 1:N 4 v0y = v0 * (c - 1); 5 for r = 1:M 6 u0x = u0 * (r - 1); 7 f(r, c) = A * sin(u0x + v0y); 8 end 9 end
运行速度,只要0.0154秒,但是书上的用了0.0471秒,看来我的电脑比作者的电脑好了不少哈,或者是高版本的MATLAB(2014a),优化做得更好。
>> timeit(@() twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512)) ans = 0.0154
将第一个例子的第2行注释掉,运行如下,果然速度还是下降了不少,所以还是预分配内存比较好。
>> timeit(@() twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512)) ans = 0.0263
就是一个二维的sin(x,y)函数,它的幅度就表示亮度,如下图所示,黑白正弦起伏,感觉很不错的,MATLAB果然很强大。
>> f=twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512); >> imshow(f,[]);
当然此例子的关键不在画出图像,而是要通过向量化的方式将上述函数中的两个for循环去掉,从而提高算法的速度。
1 function f = twodsin2(A, u0, v0, M, N) 2 r = 0:M-1; 3 c = 0:N-1; 4 [C, R] = meshgrid(c, r); 5 f = A * sin(u0 * R + v0 * C);
同样的参数,只用了0.0072,比上个0.0154,快了50%多。
>> timeit(@() twodsin2(1, 1/(4*pi), 1/(4*pi), 512, 512)) ans = 0.0072
对meshgrid(M,N)函数,我是直接把它理解为生个一个网格,这个网格的就是MxN的面积大小,而向量M和N中的元素,就是这个网格上的点,可以用如下图来表示,更加直观一点,如理解有误,欢迎指正。
上述网格表示的是如下meshgrid,有了图,应该非常容易理解。
>> [X,Y]=meshgrid(1:3,10:14) X = 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 Y = 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14
总结一下
通过对本章的学习,对图像的理解,更加深入,可以从数学的角度来看一幅图像,同时,也更加清楚以明白图像的信息是如何存储的。这一章中,也讲子许多MATLAB的技巧,很实用,也深深体会到了MATLAB处理矩阵的强大功能,这一优势确实是C/C++/C#等语言无法比拟的。路漫漫,吾必将上下求索。Keep on!!
本博文纯原创,未经博主同意(我的邮箱:endless@139.com),请勿转载。有想交流学习的小伙伴,可以加我的QQ:1449494575,欢迎各位。
以上是关于数字图像处理(MATLAB版)学习笔记——第1章 绪言的主要内容,如果未能解决你的问题,请参考以下文章