0、下定决心

当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门。以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成果的。

1、本章知识点结构

下面的思维导图主要用xmind制作。知识点是对第1章的一些个人认为比较重要的知识概括了一下,然后加了自己的一点点理解。

2、书中例子实践

第一个例子,试一试手。

 function f = twodsin(A, u0, v0, M, N)
f = zeros(M, N);
for c = :N
v0y = v0 * (c - );
for r = :M
u0x = u0 * (r - );
f(r, c) = A * sin(u0x + v0y);
end
end

运行速度,只要0.0154秒,但是书上的用了0.0471秒,看来我的电脑比作者的电脑好了不少哈,或者是高版本的MATLAB(2014a),优化做得更好。

>> timeit(@() twodsin(, /(*pi), /(*pi), , ))

ans =

    0.0154

将第一个例子的第2行注释掉,运行如下,果然速度还是下降了不少,所以还是预分配内存比较好。

>> timeit(@() twodsin(, /(*pi), /(*pi), , ))

ans =

    0.0263

就是一个二维的sin(x,y)函数,它的幅度就表示亮度,如下图所示,黑白正弦起伏,感觉很不错的,MATLAB果然很强大。

>> f=twodsin(, /(*pi), /(*pi), , );
>> imshow(f,[]);

当然此例子的关键不在画出图像,而是要通过向量化的方式将上述函数中的两个for循环去掉,从而提高算法的速度。

 function f = twodsin2(A, u0, v0, M, N)
r = :M-;
c = :N-;
[C, R] = meshgrid(c, r);
f = A * sin(u0 * R + v0 * C);

同样的参数,只用了0.0072,比上个0.0154,快了50%多。

>> timeit(@() twodsin2(, /(*pi), /(*pi), , ))

ans =

    0.0072

对meshgrid(M,N)函数,我是直接把它理解为生个一个网格,这个网格的就是MxN的面积大小,而向量M和N中的元素,就是这个网格上的点,可以用如下图来表示,更加直观一点,如理解有误,欢迎指正。

上述网格表示的是如下meshgrid,有了图,应该非常容易理解。

>> [X,Y]=meshgrid(:,:)

X =

Y =

总结一下

通过对本章的学习,对图像的理解,更加深入,可以从数学的角度来看一幅图像,同时,也更加清楚以明白图像的信息是如何存储的。这一章中,也讲子许多MATLAB的技巧,很实用,也深深体会到了MATLAB处理矩阵的强大功能,这一优势确实是C/C++/C#等语言无法比拟的。路漫漫,吾必将上下求索。Keep on!!

本博文纯原创,未经博主同意(我的邮箱:endless@139.com),请勿转载。有想交流学习的小伙伴,可以加我的QQ:1449494575,欢迎各位。

数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言的更多相关文章

  1. 数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波

    0.小叙闲言 1.本章整体结构 2.书中例子 例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把 >> imread('myimage.jpg'); >> ...

  2. 锋利的jQuery第2版学习笔记4、5章

    第4章,jQuery中的事件和动画 注意:使用的jQuery版本为1.7.1 jQuery中的事件 JavaScript中通常使用window.onload方法,jQuery中使用$(document ...

  3. 锋利的jQuery第2版学习笔记6、7章

    第6章,jQuery与Ajax的应用 Ajax的优势和不足 Ajax的优势 1.不需要插件支持 2.优秀的用户体验 3.提高Web程序的性能 4.减轻服务器和带宽的负担 Ajax的不足 1.浏览器对X ...

  4. C++Primer第5版学习笔记(二)

    C++Primer第5版学习笔记(二) 第三章的重难点内容         这篇笔记记录了我在学习C++常用基本语法的学习过程,基本只记录一些重难点,对概念的描述不是一开始就详尽和准确的,而是层层深入 ...

  5. C++Primer第5版学习笔记(一)

    C++Primer第5版学习笔记(一) 第一.二章的重难点内容        这个笔记本主要记录了我在学习C++Primer(第5版,中文版)的过程中遇到的重难点及其分析.因为第一.二章都比较简单,因 ...

  6. [学习一个] Matlab GUI 学习笔记 Ⅰ

    Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...

  7. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  8. 【Head-First设计模式】C#版-学习笔记-开篇及文章目录

    原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证 ...

  9. C++Primer第5版学习笔记(四)

    C++Primer第5版学习笔记(四) 第六章的重难点内容         你可以点击这里回顾第四/五章的内容       第六章是和函数有关的知识,函数就是命名了的代码块,可以处理不同的情况,本章内 ...

随机推荐

  1. vue2.0全局组件之pdf

    目的:像elementUI那样注册全局组件 预览pdf文件 技术支持:使用火狐的pdf.js http://mozilla.github.io/pdf.js/ 准备:新建一个CPdf.vue文件,把火 ...

  2. js检测数据类型的方法你都掌握了几个?

    //1.typeof检测/*var obg = {};var ary = [];var reg = /^$/;var fn = function () {};var num = 1;var bool ...

  3. Android网络编程要学的东西与Http协议学习

    本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...

  4. Django之Session

    Django  -- Seeion介绍 问:       Django的session是什么? 答:       Django 完全支持匿名 Session的. Session 框架允许每一个用户保存 ...

  5. oracle数据库命令-持续更新

    一.系统命令 登录 dba用户命令 sqlplus / as sysdba 2. 用户命令 删除用户 DROP USER **** CASCADE; DROP SCHEMA **** CASCADE; ...

  6. 消消乐、candy crush类三消游戏程序逻辑分析

    最近在开发一款类似消消乐的三消游戏,在碰到实现斜方向下落的时候卡住了很长时间.好几天没有思路,原本的思路是一次性预判多个宝石的一连串运动路径,运用缓动运动队列来实现宝石运动路径,例如 下落->滑 ...

  7. Ionic android 底部tabs

    ionic android tabs 默认显示在上部,如果要跟苹果一起统一在底部,那么可以在app.js添加配置 .config(function($ionicConfigProvider) { $i ...

  8. Robot Framework 关键字自定义

    关键字自定义有三种方法: 1.在自动化目录中右键-->New User Keyword 2.选中case中的步骤(可选多行),右键-->Extract Keyword 3.自己写模块,自定 ...

  9. 小命令tac、cat、rev的用法

    cat:输出文件的内容(正序,由上至下) tac:输出文件的内容(倒序,由下至上) rev: 反转每行的文字内容,行号不变 示例:建立一个文件夹 1.演示cat效果 按原始样式正常显示 2.演示tac ...

  10. rsync+inotify脚本

        #!/bin/bash src=/data/                           # 需要同步的源路径 des=data                             ...