精华内容
下载资源
问答
  • 熟知,两个N维实向量的DFT,可以用一个N维复向量的DFT计算。最近,S.MOshe和D.Hertz提出一个方法:用一个N维复...作者得到了计算二维情形的一些新的直接公式,其证明是简明的,它们公别推广了已有的结果。同时还指出
  • 二维旋转矩阵公式推导

    万次阅读 2019-10-15 21:10:12
    这篇博文来推导一下旋转矩阵。 首先来假设 OP1旋转到了OP2,逆时针矩阵推导。当然也有顺时针矩阵推导。 然后有没有什么办法可以不...之前我的想法,求theta,是先根据三角形的边长求夹角的公式求的cos(theta)...

    这篇博文来推导一下旋转矩阵。


    首先来假设 OP1旋转到了OP2,逆时针矩阵推导。当然也有顺时针矩阵推导。

    然后有没有什么办法可以不考虑顺时针逆时针?这里我考虑了一下OP1和OP2不相等的情况

    因为先求的sin(theta),如果是逆时针,theta就是正值,如果是顺时针,theta就是负值。

     

    之前我的想法,求theta,是先根据三角形的边长求夹角的公式求的cos(theta),然后sin(theta)就根据sqrt求。这种情况,必须提前判断逆时针旋转还是顺时针旋转,然后更改旋转矩阵。非常麻烦,也容易出错。

     

    现在的想法,因为求的是sin(theta),sin(theta)的值就含有了顺时针还是逆时针的信息了。哈哈哈哈哈哈哈哈。

     

    感谢大佬不吝赐教~

    展开全文
  • 计算一副RGB图像的二维信息熵,具有详细的注释。可以正常运行。 matlab版本的
  • 二维卷积/矩阵卷积

    万次阅读 多人点赞 2017-07-22 05:09:02
    二维卷积/矩阵卷积的计算方程设有矩阵A和矩阵B,它们的卷积结果矩阵的元素可由下列公式计算得来: C(j,k)=∑p∑qA(p,q)B(j−p+1,k−q+1)C(j,k)=\sum_p \sum_q A(p,q) B(j-p+1,k-q+1) 其中的index只要在A,B中valid...

    二维卷积/矩阵卷积的计算方程

    设有矩阵A和矩阵B,它们的卷积结果矩阵的元素可由下列公式计算得来:

    C(j,k)=pqA(p,q)B(jp+1,kq+1)

    其中的index只要在A,B中valid都要参与运算。
    举例来说,令矩阵M为卷积核矩阵,矩阵I为图像矩阵,其元素如下:
    M=[1324],I=123234345

    要计算二者的卷积,首先令卷积核旋转 180 ,那么M的变态过程如下
    首先行翻转:
    M1=[3241]

    然后列翻转:
    M2=[4132]

    (为什么称为180°翻转呢,这可以看作是原来的矩阵一行一行写成一个行向量,1 2 3 4,然后倒着写回去(180°翻转),变成 4 3 2 1,再写成矩阵的形式,跟上面的变化结果是一样的。)为了便于书写,将反转后的矩阵记为 K
    如果将矩阵的重叠看作是二维平面上两个矩形的相交,那么相交有无重叠的情况也分为几种:
    1. 不相交,没有重叠的部分
    不交叉
    2. 上边相交,重叠区域在大矩形的上边。
    上边交叉

    1. 左边相交,重叠区域在大矩形的左边
      左交叉
      上两种情况的一个交集就是在大矩形的左上角有相交:
      左上交叉
    2. 完全重叠的相交,小矩形套在大矩形里面。
      全交叉
    3. 右边的相交,重叠区域在大矩形的右边。
      右交叉
    4. 下边缘的相交,重叠区域在大矩形的下边。
      下交叉
      右下的相交,重叠区域在大矩形的右下角。
      右下交叉
      类比卷积中,两个矩阵的元素的重叠也有这么几种。那么最终我们要使用这个相交产生的并集或者交集,或者是并集的一部分作为最后卷积结果的尺寸。
      在matlab的conv2函数里有个’shape’参数,是这样解释的:

      Subsection of the convolution, specified as one of these values:

      1. ’full’ — Return the full 2-D convolution.
      2. ‘same’ — Return the central part of the convolution, which is the same size as A.
      3. ‘valid’ — Return only parts of the convolution that are computed without zero-padded edges.

      现在我们默认conv2(I,M),即第一个array的size比第二个array的size要大一些。(如果相反,那么这三种情况又不太一样,此处不涉及)。分别来看一下

    Valid 型卷积

    这种类型只取用M(自己计算时是K,即180°反转后的矩阵)完全与I重叠的情况,就像是矩阵相交的第4种情况。完全不给任何矩阵补0,最终的卷积结果矩阵与M的尺寸一样(小矩阵的尺寸)。
    就我们的M和I的例子,设结果矩阵为V,一个个元素计算的话,其过程如下:
    V11=41+32+22+13=17
    如下图,
    第一个元素
    V12=42+33+23+14=27
    第二个计算
    V21=42+33+23+14=27
    第三个计算
    V22=43+34+24+15=37
    第四个计算
    最终Valid型结果为:

    V=[17272737]

    Same型卷积

    这种类型除了包含valid型的所有结果之外,还要包含小矩阵与大矩阵的右边缘、以及下边缘有重叠的情况。就像是矩阵相交的第4、第5和第6种情况。给矩阵I补0,已完成右边缘重叠和下方时的计算。最终的卷积结果矩阵与I的尺寸一样(大矩阵的尺寸)。
    就我们的M和I的例子,设结果矩阵为S。I矩阵补零后为

    I=1230234034500000

    (说明:其实给矩阵补零后相交情况就只有4那种了)
    一个个元素计算的话,其过程如下: S11,S12,S21,S22 与前面计算的V一样。
    S13=43+30+24+10=20
    S23=44+30+25+10=26
    S31=43+34+20+10=24
    S32=44+35+20+10=31
    S33=45+30+20+10=20
    same
    最终Same型结果为:
    S=172724273731202620

    结合卷积的物理意义,就是加权叠加,再回头看一下计算.
    S11 是矩阵K和 I11 周围的像素加权求和,这里的周围指的是右,右下,下还有其本身。
    卷积结果矩阵中的其他元也是这样解释。

    full 型卷积

    包含所有重叠的情况,在Same型基础上添加了小矩阵与大矩阵左边重叠的情况。即矩形相交的2,3,4,5种情况。这也是最复杂的一类。
    如果从valid转换为same还比较好理解的话,再转换为full原理也是一样的,不过这次I矩阵是在左边,上边,右边,下边都要补零,为什么要这么做呢?请看下图(博主为了偷懒,就把好几种情况放一起了):
    why
    是不是必须要前后左右全方位补零才可以呢?而且如果M的size更大一些的话,补的就不止是一行一列的0了。(补就是pad,pad就是补)
    最终补零后的I矩阵变成:

    I=0000001230023400345000000

    (再次强调:其实给矩阵补零后相交情况就只有4那种了)
    就我们的M和I的例子,设结果矩阵为F。
    F11=40+30+20+11=1
    F12=40+30+21+12=4
    ......
    依次类推
    full

    最终,Full型的卷积结果为:

    F=1599417272472737316202620

    结合卷积的物理意义,就是加权叠加,再回头看一下计算.
    F 矩阵中的元素也是矩阵K I <script type="math/tex" id="MathJax-Element-919">I</script>周围的像素加权求和,这里的“周围”则比较广义了,既有右边和下边,也有左边和上边。

    展开全文
  • 二维矩阵二维矩阵之间的卷积

    千次阅读 2020-04-25 04:02:24
    由于在数字信号处理(Digital Singal Processing, DSP)这门课中只学了一维矩阵之间的卷积运算。在查阅matlab 函数conv2代码与阅读有关卷积的博客,下面为个人总结部分: 假设我们的卷积核h为kernel矩阵(33): 待...

    最近在学习数字图像处理(Digital Image Processing,DIP)这门课,感觉有些吃力。由于在数字信号处理(Digital Singal Processing, DSP)这门课中只学了一维矩阵之间的卷积运算。

    一维卷积与相关计算 关系详见下面这篇博客:

    https://blog.csdn.net/qq_44143405/article/details/102774161

    在查阅matlab 函数conv2代码与阅读有关卷积的博客,下面为个人总结部分:

    假设我们的卷积核h为kernel矩阵(33):
    在这里插入图片描述
    待处理矩阵f(x,y)为:(5
    5)
    在这里插入图片描述
    h*x的计算过程分为三步:

    第一步,需要将卷积核翻转180°,kernel矩阵 也就变成了
    在这里插入图片描述
    第二步,需要将卷积核h的中心对准f(0,0),然后对应元素相乘后相加,没有元素的地方补0。
    在这里插入图片描述
    即公式为:
    在这里插入图片描述
    因此最后的结果中的第一个元素值为Y11=10+20+10+00+01+02±1*0+(-2)*6+(-1)*7=-19

    第三步每个元素都像这样计算出来就可以得到一个输出矩阵,就是卷积结果
    在这里插入图片描述
    一定要主要conv2中A,B矩阵的顺序!!!
    代码块

    A=[-1 -2 -1; 0 0 0;1 2 1];
    B=[1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15;16 17 18 19 20; 21 22 23 24 25];
    C=conv2(B,A,'same')
    
    C =
    
       -19   -28   -32   -36   -29
       -30   -40   -40   -40   -30
       -30   -40   -40   -40   -30
       -30   -40   -40   -40   -30
        49    68    72    76    59
    

    如果需要计算/了解多维的卷积,可看下面链接的博客。
    https://www.cnblogs.com/hyb221512/p/9276621.html

    展开全文
  • 基于二维矩阵的FFT计算原理

    千次阅读 2020-05-03 16:00:10
    本文针对长点数FFT计算开发了一种基于二维矩阵的FFT算法,此算法将需要计算的复数点序列抽象为一个二维矩阵进行处理,将大点数计算分割为多次小点数FFT计算,并且小点数之间的处理互不影响,进而可在多核处理器上...

    FFT算法是信号处理领域最基本、最经典的算法,在工程实践中用处十分广泛,但是在一些对FFT点数要求较大或者计算FFT实时性要求较高的场合,按常规方式直接计算FFT难以满足工程实际的要求。本文针对长点数FFT计算开发了一种基于二维矩阵的FFT算法,此算法将需要计算的复数点序列抽象为一个二维矩阵进行处理,将大点数计算分割为多次小点数FFT计算,并且小点数之间的处理互不影响,进而可在多核处理器(如多核DSP)或FPGA上并行执行,实时性将得到提高。

    1.1理论推导

    下面对基于二维矩阵的FFT计算过程进行推导:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    1.2算法步骤

    通过1.1小节的推导我们可以总结出二维矩阵FFT算法的步骤:
    1.将待计算序列划分为N1xN2二维矩阵;
    2.进行N2次N1点的FFT;
    3.将N2次N1点FFT结果乘铰链因子;
    4.进行N1次N2点FFT;
    5.译序。

    1.3Matlab仿真实现

    (1)将算法封装成一个函数,方便在其他程序中直接调用,编写程序时按照1.2中说明的步骤来进行,具体代码如下:

    function X=FFT_2DMatrix(x,N,L,M)
    %Function descirption:N points FFT based on two-dimention matrix(N=M*L)
    %Input parameter: x,input time domain data
    %                 N,points
    %                 L,row of 2D matrix
    %                 M,collum of  2D matrix
    %Output parameter:X,output frequency domain data 
    %Created by Baokuo Liu,2020-4-3.All rights reserved.
    x2=zeros(M,L);
    for n1=1:L
        for n0=1:M
           x2(n1,n0)=x(1,(n1-1)*M+n0);  %划分为L*M二维矩阵
        end
    end
    
    X1=zeros(M,L);
    X2=zeros(M,L);
    rot_factor=zeros(M,L);
    for i=1:M
        X1(:,i)=fft(x2(:,i),L);  %M列L点FFT
        rot_factor(:,i)=exp(1j*2*pi*(i-1).*(0:L-1)/N)';  %旋转(铰链)因子
        X2(:,i)=X1(:,i).*rot_factor(:,i);  %FFT结果乘以旋转(铰链)因子 
    end
    
    X3=zeros(M,L);
    for i=1:L
        X3(i,:)=fft(X2(i,:),M);  %L列M点FFT   
    end
    
    X=zeros(1,N);
    for k0=1:L
       for k1=1:M
          X(1,(k1-1)*L+k0)=X3(k0,k1);  %译序
       end
    end
    

    (2)为了验证算法函数编写的正确性,仿真采样率为1.6kHz条件下,对频率100Hz的单频信号做256点FFT,调用上面的算法函数来完成FFT的计算,程序代码如下:

    %parameter
    N=256;  %points
    M=16;  %collum of 2DMatrix
    L=16;  %row of 2DMatrix
    fs=1600; %sample frequency
    f0=100;  %signal frequency
    Vmax=1.8;  %Max input voltage
    Vamp=1;    %amplitude
    AD_bit=14;  %AD bits
    
    %generate single sine wave
    t=0:1/fs:(N-1)/fs;
    x=Vamp*sin(2*pi*f0.*t);
    
    %quantify
    x=round((2^(AD_bit)-1).*x/Vmax);
    
    % output as a txt file(hex)
    % x1=x';
    % q=quantizer([AD_bit+1 0]);
    % x2=num2bin(q,x1);
    % fid1=fopen('C:\Users\radar\Desktop\Science\DSP\FFT_2DMatrix.txt','wt');
    % for i=1:length(x)
    %     fwrite(fid1,x2(i,:));
    %     fprintf(fid1,'\n');
    % end
    % fclose(fid1);
    
    %FFT based on two dimention matrix
    f=(-N/2:1:N/2-1)*fs/N;
    X=FFT_2DMatrix(x,N,L,M);
    
    figure;
    subplot(2,1,1);plot(t,x);xlabel('时间(s)');xlim([0 inf]);
    ylabel('幅度');title('时域波形');
    subplot(2,1,2);plot(f,abs(fftshift(X))*2/N*Vmax/(2^(AD_bit)-1));xlabel('频率(Hz)');
    ylabel('幅度');ylim([0 1.8]);title('幅度谱');
    

    1.4结果分析

    在这里插入图片描述

    仿真结果如上图所示,可见二维矩阵方法所得的FFT结果和常规一维点列FFT的结果完全一致,由此验证了算法程序编写的正确性。

    1.5硬件实现

    由于此2D-FFT算法在硬件实现上较复杂,不同处理器实现方法也不相同,这是暂时不做详细介绍,总的来说还是基于常规的一维FFT,读者可根据算法步骤自己尝试实现。对于在FPGA中的实现,可以参考我的另一篇博客:https://blog.csdn.net/qq_43622265/article/details/105905927,这篇博客是关于FFT IP核的使用方法,大家可以以此为基础来自行实现2D-FFT。

    说明:理论推导部分参考了文献《基于TMS320C6678的多核DSP并行处理应用技术研究》,感兴趣的同学可到知网自行下载阅读。

    展开全文
  • 该文档包括卷积运算的定义及其具体实例,以便读者更好的理解
  • 协方差矩阵的定义及其计算公式 (转)

    万次阅读 多人点赞 2017-02-10 00:07:06
    协方差矩阵的定义及其计算公式   (2014-03-20 18:36:56) 转载▼   分类: matlab 协方差矩阵在机器学习中经常用到,查看wiki:http://zh.wikipedia.org/wiki/协方差矩阵 可知...
  • axis=0,计算每一列的均值 np.mean(A, axis=0) axis=1,计算每一行的均值 np.mean(A, axis=1)
  • 归一化二维互相关矩阵计算

    万次阅读 2017-03-30 10:33:25
    通过讨论归一化二维互相关函数的定义, 将matlab中矩阵的索引和公式中偏移量联系起来.
  • 二维平面旋转公式

    千次阅读 2019-05-13 22:37:00
    在实际中,用到旋转公式的情况一般分二维平面旋转公式和三维立体旋转公式; 1 二维平面旋转公式 如下图,坐标系中的点v(x,y),绕零点,逆时针旋转theta角度,计算旋转后的点v’(x', y'); 2 二维坐标系旋转...
  • 图像的二维傅里叶变换的公式始终没成功推出来,执着地僵持了很久,于是成此文。 二维傅里叶变换的四对公式不清楚可以移步这篇博客的第4种case(因为脉冲阵列就是2维离散周期信号)。 首先应当明确数字图像(M行*N列...
  • 算法-二维数组的各种运算

    千次阅读 2018-07-19 14:06:51
    public class 数组_二维数组 { //找出数组中最大的元素 private static Double max(int[] a) { double max = a[0]; //如果after &gt; before,则将大的这个值赋值给上一个数 for (int i = 1; i &lt; a....
  • 二维图片的矩阵变换

    千次阅读 2019-06-15 19:33:06
    原文地址:原文地址 ...物体变换物体变换是通过变换物体上每一个顶点实现的,因此以点的二维基本几何变换为例讲解二维图形基本几何变换矩阵 。 平移变换矩阵 比例变换矩阵 旋转变换矩阵 反射变换矩阵 错...
  • 二维数组实验题:按如下公式递归计算矩阵行列式的值: 提示信息:“Please enter matrix size n(1<=n<20):” “Please input matrix line by line:\n” “matrix a:\n” **输出格式要求:“Submatrix:\n” ...
  • 单应矩阵公式推导及计算

    千次阅读 2019-03-08 16:09:36
    单应矩阵描述的是空间中同一平面上的三点在两张图像中的对应关系。这里需要强调的是同一平面。 单应矩阵可以应用在图像矫正、图像配准拼接、视角转换以及计算两张图像的相机运动(旋转和平移)上。 下面我们...
  • 二维旋转矩阵推导

    千次阅读 2019-03-18 21:21:17
    旋转矩阵问题 问题 已知A(x,y),求旋转 \alpha 后的B(x’,y’)
  • 二维数组的地址计算 (m*n的矩阵) 行优先 设每个元素的大小是size,首元素的地址是a[1][1],则a[i][j]? 分析:a[i][j]位于第i行,第j列。它之前有i-1行,在第i行它之前有j-1个元素。 即a[i][j] = a[1][1] + [n*(i-1) ...
  • 二维变换矩阵

    千次阅读 2018-05-04 21:54:42
    二维平面上常见的三种几何变换 平移 缩放 旋转 平移 在二维平面上每个点可以用(x,y)(x,y)(x,y)表示,假设有一点P(x,y)P(x,y)P(x,y),它平移到P′(x′,y′)P′(x′,y′)P'(x',y'),则相应...
  • 二维数组计算协方差java

    千次阅读 2017-06-21 10:01:00
    * 数据封装二维数组并调用计算两个二维数组协方差的方法 */ @Override public double[][] selectCovariance(int i) { double[][] allList1 = new double[45][]; double[][] allList2 = new double[45][]; //=...
  • 本文以rssi(接收信号强度)滤波为背景,结合卡尔曼的五个公式,设计 rssi 一卡尔曼滤波器,用MATLAB语言实现一卡尔曼滤波器,并附上代码和滤波结果图; 本文工分为以下几个部分: 1、引言 2、模型的系统方程和...
  • 维矩阵*三维矩阵 import torch tensors = torch.tensor([[[1,2],[1,2],[1,2]],[[1,2],[1,2],[1,2]],[[1,2],[1,2],[1,2]]]) print(tensors.data) print(tensors.data.shape) mul_result = torch.matmul(tensors...
  • 二维傅里叶变换的矩阵表示

    千次阅读 2020-03-30 23:25:29
    二维傅里叶变换的矩阵表示二维傅里叶变换公式二维傅里叶矩阵公式表达1. F(v,u)F(v,u)F(v,u) 为 R1×1R^{1\times1}R1×1 时2. F(v,u)F(v,u)F(v,u) 为 RNv×MuR^{N_v\times M_u}RNv​×Mu​ 时 说明: 做完了图像处理...
  • 图像处理 二维离散傅里叶变换DFT matlab代码图像处理领域离散傅里叶变换的作用二维离散傅里叶变换二维离散傅里叶变换公式二维的离散傅里叶变换进行转化将系数转化为矩阵形式注意,从矩阵的乘积i形式可以看出,原来...
  • 具体到二维的仿射变换的计算如下: 几种典型的仿射变换如下: 平移变换 Translation 将每一点移动到(x+tx, y+ty),变换矩阵为: 平移变换是一种“刚体变换”,rigid-body transformation,就是不会产生...
  • 二维向量旋转公式

    万次阅读 2015-04-18 15:16:29
    在2-D的迪卡尔坐标系中,一个位置向量的旋转公式可以由三角函数的几何意义推出。比如上图所示是位置向量R逆时针旋转角度B前后的情况。在左图中,我们有关系:  x0 = |R| * cosA => cosA = x0 / |R|  y0 = |R| *...
  • 差分——(2)二维差分

    千次阅读 多人点赞 2020-02-25 23:28:30
    下面我们扩展一下,来介绍二维差分。 什么是二维差分 我们有一个矩阵,如下图所示。 根据二维前缀和表示的是右上角矩形的和,由于差分只涉及前面相邻的数(由一维可以推出),并且由前面范围的数相加得到这个...
  • C#二维数组双线性插值算法

    热门讨论 2014-03-16 11:59:34
    C#的二维数组双线性插值算法。 用于二维数组的双线性插值算法,可分别设置长度和宽度。
  • 矩阵是按照长方阵列排列的实数集合,在C语言中可以用二维数组来表示 若A是m*n的矩阵 ,在C++中可以创建一个二维数组A [m] [n], 用两个变量ij来描述矩阵中某一数的行与列即A [i] [j],如下是程序的一部分, 功能是...
  • 二维,三维坐标旋转算法(公式

    千次阅读 2018-01-06 21:40:42
    本文是有关二维,三维坐标旋转算法笔记...二维坐标旋转公式图下: void Rotate2(double x1, double y1, double alpha, double& x2, double& y2){ x2 = x1 * cos(alpha) - y1 * sin(alpha); y2 = x1 * sin(a...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,372
精华内容 27,348
关键字:

二维矩阵计算公式