算法

3D重建算法原理

感情迁移 提交于 2020-03-18 10:01:01
3D重建算法原理 三维重建(3D Reconstruction)技术一直是计算机图形学和计算机视觉领域的一个热点课题。早期的三维重建技术通常以二维图像作为输入,重建出场景中的三维模型。但是,受限于输入的数据,重建出的三维模型通常不够完整,而且真实感较低。随着各种面向普通消费者的深度相机(depth camera)的出现,基于深度相机的三维扫描和重建技术得到了飞速发展。以微软的Kinect,华硕的XTion以及因特尔的RealSense等为代表的深度相机造价低廉,体积适当,操作方便,并且易于研究者和工程师进行开发。三维重建技术也是增强现实(Augmented Reality,简称AR)技术的基础,经过扫描重建后的三维模型可以直接应用到AR或VR的场景中。本文将简单介绍基于深度相机的三维重建技术的基本原理及其应用。 背景 对几何3D模型不断增长的需求:电影 游戏 虚拟环境等行业 VR&AR的火爆 房地产 三维地图等领域的需求 中国古代建筑三维数字化保护 三维数字化城市 三维地图 VR&&AR游戏,电影等 医疗行业:三维心脏 教育行业等 应用 方法介绍 传统的三维重建主要是依靠昂贵的三维扫描设备,并且需要被扫描的目标保持一段时间的稳定。近年来,由于计算机硬件大规模计算能力的发展,特别是GPU和分布式计算的发展,实时高效的解决方案成为了可能。目前主流的方法主要分为以下两类:

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

旧街凉风 提交于 2020-03-18 09:32:12
本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归、Logistic回归、矩阵分解推荐算法等ML中。 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x ( i ) 是第i个样本包含的所有特征组成的向量 x ( i ) = ( x ( i ) 1 , x ( i ) 2 . . . , x ( i ) n ) y ( i ) 第i个样本的label,每个样本只有一个label, y ( i ) 是标量(一个数值) h θ ( x ( i ) ) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,是多个变量的向量 θ = [ θ 1 , θ 2 , . . . ] | h θ ( x i ) − y ( i ) | :拟合绝对误差 求解的目标是使得所有样本点( m 个)平均误差最小,即: 或者平方误差最小,即: arg min 表示使目标函数取最小值时的变量值(即 θ )值。 都被称为损失函数(Cost Function) J ( θ ) 不只是上面两种形式,不同的机器学习算法可以定义各种其它形式。 梯度下降迭代公式 为了求解 θ = [ θ 1 , θ 2 , . . . ] 的值,可以先对其赋一组初值,然后改变 θ 的值,使得 J ( θ ) 最小。函数 J ( θ )

数据结构与算法9-排序1

北城余情 提交于 2020-03-17 22:39:49
本篇文章讲解冒泡、插入、选择排序。 1.衡量排序算法执行效率(不太用的到) 时间复杂度 时间复杂度的系数、常数、低阶 比较次数和交换(或移动)次数 2.一些前提概念 上述使用稳定排序算法的例子蛮实用的。 3.冒泡排序 平均时间复杂度呢?—— 使用有序度、逆序度 满有序度 = n*(n-1)/2 逆序度 = 满有序度 - 有序度 最坏情况的逆序度是 n*(n-1)/2,所以算平均是 n*(n-1)/4,所以平均时间复杂度为O(n^2)。 4.插入排序(就是打扑克牌,所以很常用) 上述关于逆序度的trick,了解一下即可。 5.选择排序(就是选苹果) 6.为什么插入排序更受欢迎 7.小结 8.扩展 冒泡排序 动图:https://pic1.zhimg.com/v2-1543c0b97237bb55063e033959706ca0_b.webp 插入排序 动图:https://pic2.zhimg.com/v2-f87ad7d8ad54379dd81f02fcf9b91f49_b.webp 选择排序 动图:https://pic1.zhimg.com/v2-f20b8898585b3ca03843d93ce2c35a68_b.webp 来源: CSDN 作者: Xu_Wave 链接: https://blog.csdn.net/qq_22795223/article/details

浅谈(11)— Apriori算法、FP Growth算法

≡放荡痞女 提交于 2020-03-17 18:59:00
1、Apriori算法   Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策。   Apriori算法采用了迭代的方法,先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到候选的频繁2项集,筛选去掉低于支持度的候选频繁2项集,得到真正的频繁二项集,以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。   可见这个算法还是很简洁的,第i次的迭代过程包括扫描计算候选频繁i项集的支持度,剪枝得到真正频繁i项集和连接生成候选频繁i+1项集三步。   一个项集的 支持度(support) 被定义为数据集中包含该项集的记录所占的比例。比如,图2中{豆奶}的支持度为4/5。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集。 可信度 或置信度(confidence)是针对一条诸如{尿布}->{葡萄酒}的关联关系来定义的。这条规则的可信度被定义为“支持度({尿布,葡萄酒})/支持度({尿布})”           算法步骤:    输入:数据集合D,支持度阈值 α α    输出:最大的频繁k项集    1)扫描整个数据集,得到所有出现过的数据,作为候选频繁1项集。k=1

【c语言】蓝桥杯算法提高 P0401

十年热恋 提交于 2020-03-17 15:16:15
问题描述 输入一个无符号整数x,输出x的二进制表示中1的个数. 输入 :   76584 输出 :   7 # include <stdio.h> int main ( int argc , char * argv [ ] ) { unsigned int n ; scanf ( "%d" , & n ) ; int cnt = 0 ; while ( n ) { if ( n & 1 ) //位运算,判断n的二进制位是否为0,n=1为真,非0为假 cnt ++ ; n >>= 1 ; //n的二进制位向右移动一位,判断是否等于1;即n=n>>1 } printf ( "%d\n" , cnt ) ; return 0 ; } 来源: CSDN 作者: 折腾的小飞 链接: https://blog.csdn.net/qq_41666142/article/details/104919183

看完这篇 HTTPS,和面试官扯皮就没问题了

泄露秘密 提交于 2020-03-17 13:37:24
下面我们来一起学习一下 HTTPS ,首先问你一个问题,为什么有了 HTTP 之后,还需要有 HTTPS ?我突然有个想法,为什么我们面试的时候需要回答 标准答案 呢?为什么我们不说出我们自己的想法和见解,却要记住一些所谓的标准回答呢? 技术还有正确与否吗 ? HTTPS 为什么会出现 一个新技术的出现必定是为了解决某种问题的,那么 HTTPS 解决了 HTTP 的什么问题呢? HTTPS 解决了什么问题 一个简单的回答可能会是 HTTP 它不安全。由于 HTTP 天生明文传输的特性,在 HTTP 的传输过程中,任何人都有可能从中截获、修改或者伪造请求发送,所以可以认为 HTTP 是不安全的;在 HTTP 的传输过程中不会验证通信方的身份,因此 HTTP 信息交换的双方可能会遭到伪装,也就是 没有用户验证 ;在 HTTP 的传输过程中,接收方和发送方并 不会验证报文的完整性 ,综上,为了结局上述问题,HTTPS 应用而生。 什么是 HTTPS 你还记得 HTTP 是怎么定义的吗?HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol) 协议, 它 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范 ,那么我们看一下 HTTPS 是如何定义的 HTTPS 的全称是 Hypertext Transfer

支持国密算法的OpenSSL分支

非 Y 不嫁゛ 提交于 2020-03-17 11:50:13
https://www.jianshu.com/p/db55261ed19e 支持国密SM2/SM3/SM4算法的OpenSSL分支 官方网站: http://gmssl.org/ 开源地址: https://github.com/guanzhi/GmSSL GmSSL 是支持国密算法和标准的OpenSSL分支,增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持,实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息安全实验室开发和维护。 GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支,是一个提供了丰富密码学功能和安全功能的开源软件包。在保持OpenSSL原有功能并实现和OpenSSL API兼容的基础上,GmSSL新增多种密码算法、标准和协议,其中包括: 椭圆曲线公钥加密国际标准ECIES 国密SM2椭圆曲线公钥密码标准,包含数字签名算法、公钥加密算法、密钥交换协议及推荐椭圆曲线参数 国密SM3密码杂凑算法、HMAC-SM3消息认证码算法、PBKDF2口令加密算法 国密SM4/SMS4分组密码、ECB/CBC/CFB/OFB/CTR/GCM/FFX加密模式和CBC-MAC/CMAC消息认证码算法 组合公钥(CPK)身份密码,可同时支持椭圆曲线国际标准算法和国密标准算法 国密动态口令密码规范

设计模式——策略模式

蓝咒 提交于 2020-03-17 11:16:56
本系列博客是自己在学习设计模式过程中收集整理的文章集合,其他文章参看 设计模式传送门 本文是转载文章 ,原文请参见 设计模式(十二)——策略模式 概念 学习过设计模式的人大概都知道 Head First设计模式 这本书,这本书中介绍的第一个模式就是策略模式。把策略模式放在第一个,笔者认为主要有两个原因:1、这的确是一个比较简单的模式。2、这个模式可以充分的体现面向对象设计原则中的 封装变化 、 多用组合,少用继承 、 针对接口编程,不针对实现编程 等原则。 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。 用途 结合策略模式的概念,我们找一个实际的场景来理解一下。 假设我们是一家新开的书店,为了招揽顾客,我们推出会员服务,我们把店里的会员分为三种,分别是初级会员、中级会员和高级会员。针对不同级别的会员我们给予不同的优惠。初级会员买书我们不打折、中级会员买书我们打九折、高级会员买书我们打八折。 我们希望用户在付款的时候,只要刷一下书的条形码,会员再刷一下他的会员卡,收银台的工组人员就能直接知道应该向顾客收取多少钱。 在不使用模式的情况下,我们可以在结算的方法中使用 if/else 语句来区别出不同的会员来计算价格。 但是

开关语句实现顺序表合并(第二章 P26)

爱⌒轻易说出口 提交于 2020-03-17 10:57:18
此程序来着 P26 下面对算法 2.7的分析部分,修改算法2.7的第一个循环语句中的条件语句为开关语句,且当 *pa=*pb时,只将两者中之一插入Lc。则此操作的结果和算法2.1相同,而时间复杂度确不同 。 /* 修改算法2.7的第一个循环语句中的条件语句为开关语句,且当 *pa=*pb时,只将两者中之一插入Lc。此操作的结果和算法2.1相同 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */ typedef int ElemType; #include<malloc.h> /* malloc()等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<process.h> /* exit() */ /* 函数结果状态代码 */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 //#define OVERFLOW -2 /* -----------------------线性表的动态分配顺序存储结构 -----------------------