zoukankan      html  css  js  c++  java
  • 基础知识复习

    1、元胞数组

    元胞数组是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的数据类型。

    (1)、创建元胞数组   

    1、用cell命令创建规格为2*2的空元胞

    >> a=cell(2,2)

    a =

    [] []
    [] []

    2、用大括号"{}"创建元胞数组并赋值

    >> b={'abc',[1,2,3];123,'a'}

    b =

    'abc'   [1x3 double]
    [123]  'a'

    (2)、读取元胞数组内容

    1、获取指定元胞的大小,用小括号“()”

    >> b(1,2)

    ans =

    [1x3 double]

    2、获取指定元胞的内容,用大括号“{}”

    >> b{1,2}

    ans =

    1 2 3

    3、进一步获取指定元胞的内容,如b{1,2}为数组,获取该数组指定元素

    >> b{1,2}(1,1)

    ans =

    1

    2、行向量组

    线性代数中,行向量是一个 1×n矩阵,即矩阵由一个含有n个元素的行所组成即行向量。行向量的转置是一个列向量,反之亦然。所有的行向量的集合形成一个向量空间,它是所有列向量集合的对偶空间

    3、标准化处理

    中心化(又叫零均值化):是指变量减去它的均值。其实就是一个平移的过程,平移后所有数据的中心是(0,0)。

    标准化(又叫归一化): 是指数值减去均值,再除以标准差。

    4、叉积计算

    设a=(X1,Y1,Z1),b=(X2,Y2,Z2),
    a×b=(Y1Z2-Y2Z1,Z1X2-Z2X1,X1Y2-X2Y1)

    5、matlab卷积运算

    转 yongbin-H,非常感谢!

    (1)conv(向量卷积运算)

    所谓两个向量卷积,说白了就是多项式乘法。
    比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积如下:
    把p的元素作为一个多项式的系数,多项式按升幂(或降幂)排列,比如就按升幂吧,写出对应的多项式:1+2x+3x^2;同样的,把q的元素也作为多项式的系数按升幂排列,写出对应的多项式:1+x。

    卷积就是“两个多项式相乘取系数”。
    (1+2x+3x^2)×(1+x)=1+3x+5x^2+3x^3
    所以p和q卷积的结果就是[1 3 5 3]。

    记住,当确定是用升幂或是降幂排列后,下面也都要按这个方式排列,否则结果是不对的。
    你也可以用matlab试试
    p=[1 2 3]
    q=[1 1]
    conv(p,q)
    看看和计算的结果是否相同。


    (2)conv2(二维矩阵卷积运算)

    a=[1 1 1;1 1 1;1 1 1];
    b=[1 1 1;1 1 1;1 1 1];
    >> conv2(a,b)

    ans =

         1     2     3     2     1
         2     4     6     4     2
         3     6     9     6     3
         2     4     6     4     2
         1     2     3     2     1

    >> conv2(a,b,'valid')

    ans =

         9

    >> conv2(a,b,'same')

    ans =

         4     6     4
         6     9     6
         4     6     4

    >> conv2(a,b,'full')

    ans =

         1     2     3     2     1
         2     4     6     4     2
         3     6     9     6     3
         2     4     6     4     2
         1     2     3     2     1


    convn(n维矩阵卷积运算)

    >> a=ones(5,5,5)

    a(:,:,1) =

         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1

    a(:,:,2) =

         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1

    a(:,:,3) =

         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1

    a(:,:,4) =

         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1

    a(:,:,5) =

         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1
         1     1     1     1     1

    >> b=ones(5,5,5);

    >> convn(a,b,'valid')

    ans =

       125

    >> convn(a,b,'same')

    ans(:,:,1) =

        27    36    45    36    27
        36    48    60    48    36
        45    60    75    60    45
        36    48    60    48    36
        27    36    45    36    27

    ans(:,:,2) =

        36    48    60    48    36
        48    64    80    64    48
        60    80   100    80    60
        48    64    80    64    48
        36    48    60    48    36

    ans(:,:,3) =

        45    60    75    60    45
        60    80   100    80    60
        75   100   125   100    75
        60    80   100    80    60
        45    60    75    60    45

    2

    1.full

    如下图:

                                      图(1)

     图中蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。图的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。

    2.same

    如下图:

                                                                   图(2)

    卷积的时候需要对卷积核进行180的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值

    3. valid

    如下图:

                                                               图(3)

    太简单,不解释。

    最后,我们可以总结出full,same,valid三种卷积后图像大小的计算公式:
    1.full: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1+N2-1 x N1+N2-1
    如图1, 滑动步长为1,图片大小为2x2,卷积核大小为3x3,卷积后图像大小:4x4
    2.same: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1xN1
    3.valid:滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1-N2)/S+1 x (N1-N2)/S+1
    如图2,滑动步长为1,图片大小为5x5,卷积核大小为3x3,卷积后图像大小:3x3
     
    3
    MATLAB的conv2函数实现步骤(conv2(A,B)):

    其中,矩阵A和B的尺寸分别为ma*na即mb*nb

    ① 对矩阵A补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零);

    ② 将卷积核绕其中心旋转180度;

    ③ 滑动旋转后的卷积核,将卷积核的中心位于图像矩阵的每一个元素,并求乘积和(即将旋转后的卷积核在A上进行滑动,然后对应位置相乘,最后相加);下面分别是shape=full, same, valid时取输出图像大小的情况,其中:位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下角)

     

    MATLAB卷积运算(conv、conv2、convn)解释

    Michael_Xun https://www.cnblogs.com/michaelxun/
  • 相关阅读:
    crash收集上报方案
    keychain的使用
    自定义Xcode文件模板
    iOS实现一个简单的扫码功能
    tableView渲染延迟
    iOS app icons
    fastlane自动打包
    iOS pod封装和升级
    手写代码 -- 数组扁平化
    手写代码 -- Promise
  • 原文地址:https://www.cnblogs.com/michaelxun/p/12684962.html
Copyright © 2011-2022 走看看