转自:http://www.cnblogs.com/tiandsp/archive/2012/10/31/2747971.html 这里所谓的张量和黎曼那里的张量是不一样的,那个张量更多的用在物理上,这个张量就是矩阵的扩展.比如零阶张量就是数,一阶张量就是向量,二阶张量就是矩阵,三阶四阶就是更高维的数的集合.这个领域现在在数学上还都是很新的东西,矩阵的秩我们都知道怎么求,但是三维的张量或更高维的张量的秩现在在数学上也没有结果.至于张量的奇异值分解也只是也只是用很早的如用HOSVD来处理,我感觉这…
主要内容: 1.QR分解定义 2.QR分解求法 3.QR分解与最小二乘 4.Matlab实现   一.QR分解 R分解法是三种将矩阵分解的方式之一.这种方式,把矩阵分解成一个正交矩阵与一个上三角矩阵的积. QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础. 定义: 实数矩阵 A 的 QR 分解是把 A 分解为Q.R,这里的 Q 是正交矩阵(意味着 QTQ = I)而 R 是上三角矩阵.类似的,我们可以定义 A 的 QL, RQ 和 LQ 分解. 更一般的说,我…
转载网址:http://www.cnblogs.com/AndyJee/p/3846455.html 主要内容: 1.QR分解定义 2.QR分解求法 3.QR分解与最小二乘 4.Matlab实现 一.QR分解 R分解法是三种将矩阵分解的方式之一.这种方式,把矩阵分解成一个正交矩阵与一个上三角矩阵的积. QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础. 定义: 实数矩阵 A 的 QR 分解是把 A 分解为Q.R,这里的 Q 是正交矩阵(意味着 QTQ = I)…
    从矩阵分解的角度来看,LU和Cholesky分解目标在于将矩阵转化为三角矩阵的乘积,所以在LAPACK种对应的名称是trf(Triangular Factorization).QR分解的目的在于将矩阵转化成正交矩阵和上三角矩阵的乘积,对应的分解公式是A=Q*R.正交矩阵有很多良好的性质,比如矩阵的逆和矩阵的转置相同,任意一个向量和正交矩阵的乘积不改变向量的2范数等等.QR分解可以用于求解线性方程组,线性拟合.更重要的是QR分解是QR算法的基础,可以用于各种特征值问题,所以QR分集的应用非…
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像等大的目标图像.然后用一个圆形的模板,用模板去遍历原图像每个像素,把模板内的每个像素都和模板中心像素比较,如果灰度小于一个阈值,那么就对目标图像当前和原图像相同位置的像素加一,直到结束.目标图像中在原图像是角点的位置就会取局部极小,所以做一个反向的相减.img=max(img)-img,if img…
1. QR 分解的形式 QR 分解是把矩阵分解成一个正交矩阵与一个上三角矩阵的积.QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础.用图可以将分解形象地表示成: 其中, Q 是一个标准正交方阵, R 是上三角矩阵. 2. QR 分解的求解 QR 分解的实际计算有很多方法,例如 Givens 旋转.Householder 变换,以及 Gram-Schmidt 正交化等等.每一种方法都有其优点和不足.上一篇博客介绍了 Givens 旋转和 Householder…
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测. 算法流程图如下(这篇论文上的): 下面我再结合自己的程序,表述一遍吧: 1.对原图像gamma校正,img=sqrt(img); 2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率. 3.…
将学习到什么 介绍了平面旋转矩阵,Householder 矩阵和 QR 分解以入相关性质.   预备知识 平面旋转与 Householder 矩阵是特殊的酉矩阵,它们在建立某些基本的矩阵分解过程中起着重要的作用. 平面旋转 设 \(1 \leqslant i < j \leqslant n\),称 为平面旋转或者 Givens 旋转. 容易验证对任何一对指数 \(i,j,(1 \leqslant i < j \leqslant n)\) 以及任何参数 \(\theta \in [0,2\pi)…
QR分解: 有很多方法可以进行QR迭代,本文使用的是Schmidt正交化方法 具体证明请参考链接 https://wenku.baidu.com/view/c2e34678168884868762d6f9.html 迭代格式 实际在进行QR分解之前一般将矩阵化为上hessnberg矩阵(奈何这个过程比较难以理解,本人智商不够,就不做这一步了哈哈哈) 迭代终止条件 看了很多文章都是设置一个迭代次数,感觉有些不是很合理,本来想采用A(k+1)-A(k)的对角线元素的二范数来作为误差的,但是我有没有一…
1 orthonormal 向量与 Orthogonal 矩阵 orthonormal 向量定义为 ,任意向量  相互垂直,且模长为1: 如果将  orthonormal 向量按列组织成矩阵,矩阵为 Orthogonal 矩阵,满足如下性质: : 当 为方阵时,为其逆矩阵:当  为长方形矩阵时,为其左逆: 当矩阵 Q 为正交矩阵时,对向量变换变换前后点积不发生改变,,证明如下: ,当 x = y 时,有  . 对任意向量 b ,可以分解为一组正交向量的线性组合,,要求解系数x,可先写成矩阵形式:…
根据结构张量能区分图像的平坦区域.边缘区域与角点区域. 此算法也算是计算机科学最重要的32个算法之一了.链接的文章中此算法名称为Strukturtensor算法,不过我搜索了一下,Strukturtensor这个单词好像是德语,翻译过来就是structure tensor结构张量了. 此处所说的张量不是相对论或黎曼几何里的张量,黎曼几何的张量好多论文都叫张量场了.也不是数学界还没研究明白的对矩阵进行扩展的高阶张量,主要是张量分解.这里的结构张量就是一个矩阵,一个对图像像素进行组织的数据结构而已.…
"QR_H.m" function [Q,R] = QR_tao(A) %输入矩阵A %输出正交矩阵Q和上三角矩阵R [n,n]=size(A); E = eye(n); X = zeros(n,); R = zeros(n); P1 = E; :n- s = -sign(A(k,k))*norm(A(k:n,k)); R(k,k) = -s; w = [A(,)+s,A(:n,k)']'; else w = [zeros(,k-),A(k,k)+s,A(k+:n,k)']'; R(:…
程序思路: 对n进行分解质因数,应先找到一个最小的质数k,从2开始,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n不等于k,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行 (1). Matlab实现的程序如下: clear all n=input('pelase input the number:')                     %保存输入的值 m=2;                          …
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:http://cn.mathworks.com/help/vision/examples/motion-based-multiple-object-tracking.html?s_tid=gn_loc_drop 程序来自matlab的CV工具箱Computer Vision System Toolbo…
本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将一张图像贴到另一张图像上. 两个透视投影都需要先计算投影矩阵,倾斜校正那一篇是通过解线性方程组求的变换矩阵,而这一篇是通过奇异值分解求的变换矩阵. 为了对齐两张图像,还需要对投影后的图像做一次仿射变换,其实就是坐标平移. 这里做投影和仿射直接调用了matlab的系统函数,方便一些. 还是先介绍下如何…
最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交圆求法: 1.求公共弦方程直线. 2.公共弦直线方程和其中一个圆方程联立求解即可. 公共弦直线方程就是两圆方程的差. 结果如下: matlab代码如下: main.m: clear all;close all;clc; n=; cic=rand(n,); %(x,y,r) hold on; :n-…
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文章中用的方法几乎一样,变换前后像素按比例缩减,不过在判断弧度和图像边界到模板中心距离时略有不同. 变换为圆时弧度可以直接计算出来,而变换为任意形状只能算出一个最小相似值. 至于图像边界到模板中心距离只能分八种情况判断了,处理圆时可以根据对称性简化程序,这里似乎没有什么好办法简化. 变换细节上,那篇文…
这个算是ICP算法中的一个关键步骤,单独拿出来看一下. 算法流程如下: 1.首先得到同名点集P和X. 2.计算P和X的均值up和ux. 3.由P和X构造协方差矩阵sigma. 4.由协方差矩阵sigma构造4*4对称矩阵Q. 5.计算Q的特征值与特征向量.其中Q最大特征值对应的特征向量即为最佳旋转向量q. 6.通过四元数q得到旋转矩阵R. 7.根据R计算最佳平移向量qr. 具体公式我就不贴图了,可以参考这篇“ICP算法在点云配准中的应用”论文的3.1节. 处理效果如下: 原始点集: 其中蓝点为原…
这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0.5*sin(pi/6)];b = [0.3,0.5*cos(pi/6),-0.5*sin(pi/6)]; 这三个位置上,向四周发射光线,取光线到y-z平面的模的倒数作为光的强度. 图像如下: 程序如下:   clear all; close all; clc; r = [0.3,0,0.5]; g…
上一篇博客中我们使用了四元数法计算ICP. 本篇我们使用SVD计算ICP. 下面是<视觉slam十四讲>中的计算方法: 计算步骤如下: 我们看到,只要求出了两组点之间的旋转,平移是非常容易得到的,所以我们重点关注R的计算.展开关于R的误差项,得: 注意到第一项和R无关,第二项由于R'R=I,亦与R无关.因此,实际上优化目标函数变为: 接下来,我们介绍怎样通过SVD解出上述问题中最优的R,但关于最优性的证明较为复杂,感兴趣的读者请参考[50,51],为了解R,先定义矩阵: W是一个3*3的矩阵,…
能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线. 程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数. 这里如果n等于log2(h)或log2(w),则图像就全为白了,也算是正好遍历所有像素了. 当然,n很大的话,图像也是全为白的,不过,那样不算正好遍历吧. 代码中生成曲线的核心函数可以在这里找到. 生成图像如下: matlab代码如下: main.m clear all;close all;clc; h=; w=; n=; imgn=zeros(h,w)…
Multiple View Geometry in Computer Vision A.4.1.1 (page 579) 将一个 3x3 矩阵 $ A $ 进行 RQ 分解是将其分解成为一个上三角阵 $ R $ 与一个正交阵(orthogonal matrix) $ Q $ 的乘积.要求矩阵 $ A $ 的秩为3,即满秩. 所谓矩阵 $ Q $ 正交是指 $ Q^TQ=I $, $ Q $ 可以看作是一个旋转矩阵.此旋转矩阵由三个子旋转矩阵点乘而来,即 $ Q = Q_xQ_yQ_z $ .$…
我只是感觉好玩,写了这样一段程序. 原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了. 最后生成了一幅含有很多空洞的图像. 当然,对含有空洞的图像是可以用修复算法修复的. 我也尝试修复了一下,用的算法我过去也写过,可以看这里. 这一次就不贴修复代码了,那段程序中的输入图像img.mask和这里的输出图像img.mask是一模一样的. 原图: 采样后: 修复后: matlab代码如下: main.m: clear all; close all;c…
还记得过去写过径向模糊,不过当时效果似乎不好. 这次效果还可以,程序中用的算法是: 1.求当前处理点和图像中心点之间的距离r与角度ang; 2.通过对r的修改得到径向模糊. 3.通过对ang的修改得到旋转模糊. 一看代码就能全部明白,不仔细解释了. 原图如下: 处理后效果: matlab代码如下: clear all;close all;clc img=imread('lena.jpg'); [h w]=size(img); imshow(img) imgn=zeros(h,w); :h :w…
圆柱投影就是将一张二维的图像投影到三维的圆柱体上,不过在显示图像的时候依然是以二维的形式给出. 投影最重要的步骤就是计算投影变换公式,和图像旋转类似,只要得到变换公式,再依照公式进行代码编写就很容易了. 这里就不写投影变换公式的推导过程了,直接给出变换公式.公式分为正变换和反变换,编程时,反变换公式通常更有用. 正变换公式如下: 其中,x,y为原图的坐标,x',y'为变换后图像的坐标,W,H为原图的宽和高,f=W/(2*tan(hfOV/2)),这里hfOV为相机水平视角,我们通过设置这个参数来…
这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了. 看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,文章点此. 全景图到穹顶图变换,通俗的说就是将全景图首尾相接做成一个圆环的样子. 先看下面这张图: 下面的矩形就是我们要处理的全景图,上面的矩形是变换后的图像.下面图像的底边对应穹顶图的内圆,顶边对应穹顶图的外圆,当然,反过来也是可以的. 程序流程: 1.定义穹顶图内圆和外圆的半径,变换后的像素就填充在这个内外半径的圆环中. 2.遍历穹顶图,当所处理…
图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助的. Dijkstra和Bellman-Ford类似,都是解决单源最短路径问题,不同的是这个方法只能解决边为非负的问题,实现的好的Dijkstra算法运行时间要快于Bellman-ford. 算法步骤如下: 1.首先设置队列,所有节点入列,源节点值为0,其他节点值为无穷. 2.然后在队列中找值最小的…
模拟退火首先从某个初始候选解开始,当温度大于0时执行循环. 在循环中,通过随机扰动产生一个新的解,然后求得新解和原解之间的能量差,如果差小于0,则采用新解作为当前解. 如果差大于0,则采用一个当前温度与能量差成比例的概率来选择是否接受新解.温度越低,接受的概率越小,差值越大,同样接受概率越小. 是否接受的概率用此公式计算:p=exp(-ΔE/T).这里ΔE为新解与原解的差,T为当前的温度. 由于温度随迭代次数逐渐降低,因此获得一个较差的解的概率较小. 典型的模拟退火算法还使用了蒙特卡洛循环,在温…
介绍一下奇异值分解来压缩图像.今年的上半年中的一篇博客贴了一篇用奇异值分解处理pca问题的程序,当时用的是图像序列,是把图像序列中的不同部分分离开来.这里是用的不是图像序列了,只是单单的一幅图像,所以直接就对图像矩阵进行svd了. 吴军的<数学之美>里其实已经介绍过用svd进行大数据的压缩了,不过我这里还是针对图像进行介绍一下吧.比如一幅1000*1000的图像A,存储就需要1000000个像素了.我们对A进行svd分解,则A=USV’,如果rank(A)=r,那么U就为1000*r的矩阵,S…
通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度 Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或Watcom C中的一种 注:在Matlab里,矩阵第一行是从1开始的 1. 主接口 #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mexPrintf("hello,world!\n&q…