矩阵变换

相机标定程序详解<2>

我怕爱的太早我们不能终老 提交于 2019-12-04 07:07:49
#ifndef _CAMERACALIBRATE_H_ #define _CAMERACALIBRATE_H_ #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv; using namespace std; class CameraCalibrate { private: vector<vector<Point3f>> objectPoints; // 角点的世界坐标系坐标 vector<vector<Point2f>> imagePoints; // 角点的像素坐标系坐标 Mat cameraMatrix; // 内参矩阵 Mat distCoeffs; // 畸变矩阵 vector<Mat> rvecs, tvecs; // 旋转矩阵队列和平移矩阵队列,每一幅标定图像都有对应的一个旋转矩阵和平移矩阵 vector<double> calibrateErrs; // 保存矫正偏差 int flag;

高斯模糊原理,算法

落爺英雄遲暮 提交于 2019-12-04 01:05:11
作者:Hohohong 链接:https://www.jianshu.com/p/8d2d93c4229b 來源:简书 图像卷积滤波与高斯模糊 1.1 图像卷积滤波 对于滤波来说,它可以说是图像处理最基本的方法,可以产生很多不同的效果。以下图来说 图中矩阵分别为二维原图像素矩阵,二维的图像滤波矩阵(也叫做卷积核,下面讲到滤波器和卷积核都是同个概念),以及最后滤波后的新像素图。对于原图像的每一个像素点,计算它的领域像素和滤波器矩阵的对应元素的成绩,然后加起来,作为当前中心像素位置的值,这样就完成了滤波的过程了。 可以看到,一个原图像通过一定的卷积核处理后就可以变换为另一个图像了。而对于滤波器来说,也是有一定的规则要求的。 ① 滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。 ② 滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。 ③ 如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。 ④ 对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。 1.2 卷积核一些用法

LeetCode刷题总结-数组篇(中)

*爱你&永不变心* 提交于 2019-12-03 20:23:01
本文接着上一篇文章 《LeetCode刷题总结-数组篇(上)》 ,继续讲第二个常考问题: 矩阵问题 。 矩阵也可以称为二维数组。在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历、矩阵位置的旋转、矩阵行或列次序的交换、空间复杂度为O(1)等。本期共12道题,2道简单题,8道中等题,2道困难题。 例1是杨辉三角的一个延申题,是一道非常经典的矩阵习题,本题理想解法是动态规划,但是也可以采用递归来求解。 例2是一道顺时针访问矩阵元素的习题,在不少面试题中有见到。 例3、例4和例5则强调如何利用矩阵本身的空间,来变换矩阵中的元素,即空间复杂度为O(1)。用到了元素间交换和位运算策略,其中相关解法很巧妙。 例6是一道如何移动矩阵的问题。 例7和例8则是考察我们快速理解题意,并在较短时间内完成较高质量代码的能力。即编写的代码争取一次性通过。 例9考察我们如何把二分查找的应用场景由一维数组转换到二维数组。 例10是一道动态规划结合矩阵的经典习题,并且还可以延申出求最短路径的问题。 例11则很有意思,该题是 上篇例6中《和为K的子数组》 的一个升级版,把一维数组的场景变换成了二维的场景,并结合了动态思想,因此题目难度由中等变成了困难。 例12是一道困难级别的习题,该题主要考察我们的数学分析能力,如何灵活变换矩阵的行和列,以及细节的处理能力。 例1 杨辉三角 II 题号:119

机器学习专业词汇中英文对照

岁酱吖の 提交于 2019-12-03 13:32:21
activation 激活值 activation function 激活函数 additive noise 加性噪声 autoencoder 自编码器 Autoencoders 自编码算法 average firing rate 平均激活率 average sum-of-squares error 均方差 backpropagation 后向传播 basis 基 basis feature vectors 特征基向量 batch gradient ascent 批量梯度上升法 Bayesian regularization method 贝叶斯规则化方法 Bernoulli random variable 伯努利随机变量 bias term 偏置项 binary classfication 二元分类 class labels 类型标记 concatenation 级联 conjugate gradient 共轭梯度 contiguous groups 联通区域 convex optimization software 凸优化软件 convolution 卷积 cost function 代价函数 covariance matrix 协方差矩阵 DC component 直流分量 decorrelation 去相关 degeneracy 退化 demensionality

线段树+矩阵快速幂 codeforces718C Sasha and Array

放肆的年华 提交于 2019-12-03 13:22:54
传送门: 点击打开链接 题意:操作1,区间[l,r]的数字+x 操作2,求sigma f(i),l<=i<=r,f是斐波那契数列。 答案取模1e9+7 首先斐波那契数列用矩阵快速幂求,谁都会的。 这里有一个矩阵乘法的性质,A*B+A*C=A*(B+C) 有了这个性质,这题就非常傻逼了。 在求斐波那契数列中,是A*F,A是变换矩阵,F是列矩阵 那么我们用线段树的懒惰标记维护A矩阵,然后用sum维护F矩阵 之后在线段树上,就变成了区间更新乘以x。 就是一个很简单的手速题了。 #include <map> #include <set> #include <cmath> #include <ctime> #include <stack> #include <queue> #include <cstdio> #include <cctype> #include <bitset> #include <string> #include <vector> #include <cstring> #include <iostream> #include <algorithm> #include <functional> #define fuck(x) cout<<"["<<x<<"]"; #define FIN freopen("input.txt","r",stdin); #define FOUT

opencv标定程序

南楼画角 提交于 2019-12-03 07:12:57
一. 标定原理 摄像机在成像的过程中会在边缘产生显著的畸变,对于普通的摄像机拍摄的图像,会产生径向畸变,切向畸变和其他类型的畸变,我们需要对图像进行矫正处理。使用opencv标定图像的过程,先根据一个标定物体计算旋转矩阵和平移向量,寻找标定物的角点cvFindchessboardCorners;再精确角点的位置(也叫亚像素角点)cvfindCornerSubPix;绘制出所有的标定物角点cvDrawChessboardCorners ;使用标定函数计算摄像机的内参数矩阵和畸变系数,旋转变量和平移变量 cvCalibrateCamera2;根据内参数矩阵和畸变系数求出畸变映射cvInitUndistortMap ,再使用重映射转换图片 cvRemap ,也可以使用cvUndistort2完成所有的事项。 二. 函数简介 1. cvFindchessboardCorners 寻找棋盘上的角点位置 2. cvfindCornerSubPix 精确角点位置 3. cvDrawChessboardCorners 绘制检测到的棋盘角点 4. cvCalibrateCamera2 利用定标来计算摄像机的内参数和外参数 5. cvfindExtrinsicCameraParam2 只计算外参数 6. cvRodrigues2 进行旋转矩阵和旋转向量间的转换 7. cvUndistort2

matlab中fft快速傅里叶变换

核能气质少年 提交于 2019-12-03 02:36:01
视频来源: https://www.bilibili.com/video/av51932171?t=628 。 博文来源:https://ww2.mathworks.cn/help/matlab/ref/fft.html?searchHighlight=fft&s_tid=doc_srchtitle 视频来源很好的解释了: 1 .傅里叶变换过程,经过傅里叶变化得到了,频率w,振幅a0,相位角φ; 2. 傅里叶变换 主要应用领域: 声音, 图像处理; 博文则很好的解释了: 1. 傅里叶变换在matlab软件中怎样应用 2.. 傅里叶变换的作用效果的展示,从时域到频域的变化,时域难以解决的问题到频域中却很清晰。 语法 Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) 说明 示例 Y = fft( X ) 用快速傅里叶变换 ( FFT) 算法计算 X 的 离散傅里叶变换 (DFT)。 如果 X 是向量,则 fft(X) 返回该向量的傅里叶变换。 如果 X 是矩阵,则 fft(X) 将 X 的各列视为向量,并返回每列的傅里叶变换。 如果 X 是一个多维数组,则 fft(X) 将沿大小不等于 1 的第一个数组维度的值视为向量,并返回每个向量的傅里叶变换。 示例 Y = fft( X , n ) 返回 n 点 DFT。如果未指定任何值,则 Y 的大小与 X 相同

mul函数

匿名 (未验证) 提交于 2019-12-03 00:22:01
基本信息 mul函数 Unity3d 中,若是OpenGL,用的应该是GLSL,mul方法是(M,V)。 矩阵 内置的矩阵(float4x4): 名称 说明 UNITY_MATRIX_MVP 当前模型视图投影矩阵 UNITY_MATRIX_MV 当前模型视图矩阵 UNITY_MATRIX_V 当前视图矩阵 UNITY_MATRIX_P 当前的投影矩阵 UNITY_MATRIX_VP 当前视图投影矩阵 UNITY_MATRIX_T_MV 模型视图矩阵的转置 UNITY_MATRIX_IT_MV 模型视图矩阵的逆转置 _Object2World 当前模型矩阵 _World2Object 当前世界矩阵的逆矩阵 这里要特别说明一下UnityObjectToClipPos(v.vertex)) 方法, 官方网站 上说明,在写Instanced Shader时,通常情况下并不用在意顶点空间转换,因为所有内建的矩阵名字在Instanced Shader中都是被重定义过的,如果直接使用UNITY_MATRIX_MVP,会引入一个额外的矩阵乘法运算,所以推荐使用UnityObjectToClipPos / UnityObjectToViewPos函数,它们会把这一次额外的矩阵乘法优化为向量-矩阵乘法。 相机 名称 类型 数值 _WorldSpaceCameraPos float3 世界空间相机的位置

Android学习之OpenGL ES概述基础

匿名 (未验证) 提交于 2019-12-03 00:21:02
最近写一个有关视频的项目,需要用到GLSurfaceView,先自己琢磨琢磨。 在Android平台上使用OpenGL ES主要有两种方式:NDK和SDK。通过NativeActivity,应用在native(c/c++)中管理整个activity的声明周期,以及绘制过程。由于爱native代码中,可以访问OpenGL ES的代码,因此,可以认为NativeActivity提供了一个OpenGL ES的运行环境。同时,Android提供了两个可以运行在OpenGL ES的类:GLSurfaceView和TextureView。由于真正的OpenGL ES仍然运行在native在层,因此在performance上,使用SDK并不比NDK差。而避免了JNI,客观上对于APP开发者来说使用SDK要比NDK容易。而GLSurfaceView和GLSurfaceView.Renderer是使用OpenGL ES的基础: GLSurfaceView: 这个是我们使用OpenGL ES来进行绘制和操作的view,它和SurfaceView在功能上相似。 GLSurfaceView.Renderer: 这个接口定义了在GLSurfaceView上绘制的方法,我们必须将它实例化attach到GLSurfaceView。 onSurfaceCreated()

java实现矩阵变换加密法

匿名 (未验证) 提交于 2019-12-02 21:52:03
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 ( Creative Commons ) 一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下: 1.首先按行填入密钥串。 2.紧接其后,按字母序按行填入不在密钥串中的字母。 3.由于方阵中只有25个位置,最后剩下的那个字母则不需变换。 如果密钥为youandme,则该方阵如下: y o u a n d m e b c f g h i j k l p q r s t v w x 在加密一对字母时,如am,在方阵中找到以这两个字母为顶点的矩形: o u a m e b 这对字母的加密字母为该矩形的另一对顶点,如本例中为ob。 请设计程序,使用上述方法对输入串进行加密,并输出加密后的串。 另外有如下规定: 1、一对一对取字母,如果最后只剩下一个字母,则不变换,直接放入加密串中; 2、如果一对字母中的两个字母相同,则不变换,直接放入加密串中; 3、如果一对字母中有一个字母不在正方形中,则不变换,直接放入加密串中; 4、如果字母对出现在方阵中的同一行或同一列,如df或hi,则只需简单对调这两个字母,即变换为fd或ih; 5、如果在正方形中能够找到以字母对为顶点的矩形