zoukankan      html  css  js  c++  java
  • 数字图像处理(MATLAB版)学习笔记(1)——第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,欢迎各位。

  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/endlesscoding/p/6675148.html
Copyright © 2011-2022 走看看