自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Linear_Luo的专栏

因为理想,所以拼搏;墨迹淡淡,理解方纯。

  • 博客(25)
  • 资源 (7)
  • 收藏
  • 关注

转载 THE EVILS OF UNITY BUILDS

Unity builds. I don’t like them.Of all the tools at your disposal to make a build faster, this is the worst. And it’s not just the “hey let’s #include .cpp files” weirdness, but the way that it can

2016-09-29 10:13:38 790

转载 加快C++代码的编译速度方法

C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 -

2016-09-29 10:09:03 11822 1

原创 #include 理解与思考

关于#include的用法和作用网上大致有如下说法,其实大致思想是相同的:#include 就是复制粘贴xxx到这个位置C++ include本质上就是插入替换语法上,扩展名并没有什么特殊的地方,它只是文件名字符串的一部分,并不具有什么特殊的地位。不管你include啥扩展名都可以,你就是#include < a.txt > 都可以。不过习惯上cpp一般是做函数体实现的,编译的时候每个cpp单

2016-09-29 00:22:37 1239

转载 C++虚函数与纯虚函数的区别

今天在做一道面试题的时候遇到一个纯虚函数的概念,就翻了下书,查资料,对比下虚函数,现在整理一下和大家分享: 什么是虚函数? 那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。虚函数声明如下:virtual ReturnT

2016-09-28 23:47:41 631

转载 纯虚函数和虚函数的区别

首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。简介假设我们有下面的类层次:class A{public: virtual void foo() {

2016-09-28 23:43:07 650

原创 PCL1.8之features模块编译预处理PCL_ONLY_CORE_POINT_TYPES

最近要用到PCL,先编译了1.7版本,发现features模块下面的pcl_features_release.lib和pcl_features_debug.lib都接近40M大小;但是后来编译了1.8版本之后,发现这两个文件都是6M多一点。在理论上1.8版本这个模块还多几个.cpp和.hpp,1.8生成的.lib应该要大一些啊,但是事实却相反,不禁引起了我的兴趣,想要一探究竟。   后来发现原来是

2016-09-28 23:35:05 1071

原创 PCL读取PCD文件

#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>int main(int argc, char ** argv){ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (p

2016-09-26 22:10:41 3420

转载 k-d tree算法的研究

动机先前写了一篇文章《SIFT算法研究》讲了讲SIFT特征具体是如何检测和描述的,其中也提到了SIFT常见的一个用途就是物体识别,物体识别的过程如下图所示:如上图(a),我们先对待识别的物体的图像进行SIFT特征点的检测和特征点的描述,然后得到了SIFT特征点集合。接下来生成物体目标描述要做的就是对特征点集合进行数据组织,形成一种特殊的表示,其作用是为了加速特征点匹配的过程。所谓的特征

2016-09-26 21:30:03 894

原创 'static_cast': cannot convert from 'double' to 'pcl::visualization::LookUpTableRepresentationPropert

在win10上用vs2013编译PCL1.8的时候,编译到visualization模块时,如下语句会报错。if (!pcl::visualization::getColormapLUT (static_cast<LookUpTableRepresentationProperties>(value), table)) break;解决方案: 将所有的static_cast<LookUpTa

2016-09-25 11:13:02 2316 3

原创 CMake构建PCL项目

当我们下载、编译并安装好PCL之后,我们来看看如何利用CMake来构建依赖PCL的项目。最关键的一点是CMakeLists.txt文件的编写,例子如下:cmake_minimum_required(VERSION 2.6 FATAL_ERROR)project(HELLO_WORLD)#设置PCL_DIR这个变量,你安装PCL的cmake文件夹路径。或者直接设置为环境变量应该也是可以的set(P

2016-09-24 15:24:48 5942 2

翻译 PCL-基本结构PointCloud

PCL中的基本数据结构是PointCloud,PointCloud是一个C++类,包含了如下数据域:width (int) 用点云数据集中的点数初始化width,width其实有两个含义: (1)对于无组织或者说无结构的点云来说,width就是指点云中点的个数。 (2) 对于有结构的点云来说,width是指点云数据集一行上点的个数。有结构的点云可以理解成这个点云像image(或者说是一个矩阵

2016-09-24 06:48:32 20343

转载 OpenMP并行程序设计(一)

OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。   在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。在其他VS中设置也是相同的。   先看一个简单的

2016-09-23 22:42:03 2094

原创 认识OpenMP优点

进入多核时代后,必须使用多线程编写程序才能让各个 CPU 核得到利用。在单核时代,通常使用操作系统提供的 API 来创建线程,然而,在多核系统中,情况发生了很大的变化, 如果仍然使用操作系统 API 来创建线程会遇到一些问题。具体来说,有以下三个问题:#1 CPU 核数扩展性问题  多核编程需要考虑程序性能随 CPU 核数的扩展性,即硬件升级到更多核后,能够丌修改程序就让程序性能增长,这要求程序中创

2016-09-23 22:19:14 2543

转载 超像素分割技术发展情况梳理(Superpixel Segmentation)

一. 基于图论的方法(Graph-basedalgorithms):1.Normalized cuts, 2000.Jianbo Shi and Jitendra Malik.Normalized cuts and image segmentation. IEEE Transactions onPattern Analysis and Machine Intelligence

2016-09-19 19:25:52 3862

原创 超像素(Superpixel)理解

最近看点云处理的文章,有些文章中提到了superpixel这个概念,查了一些资料,对其理解记录如下:超像素就是把一幅原本是像素级(pixel-level)的图,划分成区域级(district-level)的图。可以将其看做是对基本信息进行的抽象。超像素分割属于图像分割(image segmentation),再细化应该属于过分割(over segmentation)。比如我们对一幅图像进行超像

2016-09-19 19:21:33 30439 7

原创 ICP算法理解

1 经典ICP  ICP的目的很简单,就是求解两堆点云之间的变换关系。怎么做呢?思路很自然,既然不知道R和t(针对刚体运动),那我们就假设为未知量呗,然后通过某些方法求解。下面我们来看看具体怎么求的~没办法,要把问题描述清楚,数学是少不了的了。假设有两堆点云,分别记为两个集合X=x1,x2,...,xmX=x_1,x_2,...,x_m和Y=y1,y2,...,ymY=y_1,y_2,...,y_m

2016-09-18 17:15:13 20450 4

转载 Kinect与KinectFusion重建

有关Kinect应用开发正日新月异,稍有懈怠就会被远远甩在身后。不过,Kinect目前带给我们的仍只是一个充满无限可能的远景,正如App store能吸引年仅11岁的开发者一样,Kinect未来将对“全民开发者”产生重要推动作用。另一方面,一些基于Kinect的应用研究仍颇复杂,主要是因为一些关键环节的滞后而导致的。2011年的siggraph talks上,KinectFusion首次展示了实时、

2016-09-17 15:39:36 4067 1

原创 DIP关键算法-去噪算法评价标准

去噪算法是图像处理里面一个基础的问题,对于去噪算法的好坏一个直接的判断就是视觉上的感知,但是这只能作为一个定性的判断,在实际的应用中,我们还需要进行定量分析,进而做出最终的判断。在实际中往往采用原始图像IoriginI_{origin}和去噪图像IdenoiseI_{denoise}之间的残差图像Iresidual=Iorigin−IdenoiseI_{residual}=I_{origin}-I_

2016-09-15 17:57:55 4246

原创 格拉姆-斯密特过程

在线性代数中,格拉姆-斯密特过程应该是个比较基础的东西,一直都只是有个模糊的印象,不知道具体的操作,其实我以为这是个高大上的算法,没想到这个算法是这么地亲民。   格拉姆-斯密特过程是实现正交化的一个方法:给定矩阵AA,若AA中各列向量线性无关,则AA可以产生一个正交矩阵QQ,可以简单地将QQ理解为各列向量之间互相垂直的矩阵。下面在二维平面上对这个过程进行具体的描述。1 二维情形假设我们有两个线性

2016-09-14 15:46:15 3912 1

原创 DIP关键算法-自适应直方图均衡化

1 自适应直方图均衡化(AHE)  自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同,AHE算法通过计算图像的局部直方图,然后重新分布亮度来来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节。但是,AHE有过度放大图像中相同区域的噪音的问题,另外一种自适应的直方图均衡算法即限制对比度直方图均衡(CLAHE)算法能有限地

2016-09-13 17:04:23 7577

原创 DIP关键算法-直方图均衡化

直方图均衡化中均衡的含义指图像的直方图是平直的,即各灰度级具有相同的出现频数,而均衡化则是将原图像的直方图通过变换函数修正为均匀的直方图,使图像看起来更清晰。即直方图均衡化的本质就是找到合理的映射,将原图像中的亮度重新调整,以使亮度的分配更加均匀。matlab实现如下,结合代码来看思路更加清晰。  %直方图均衡化 I = imread('rice.png'); [height,width]

2016-09-13 09:27:53 1830

原创 VCG笔记-mesh元素的创建/删除

1 创建mesh元素  我们在创建简单的网格模型或者为已存在的网格模型添加元素的时候,我们应该使用AddVertices和AddFaces这两个函数,新的元素被添加到网格模型的尾部,函数会返回指向第一个新分配(或者说是添加)的第一个元素的指针。向vector添加元素会引起存储空间的重新分配(reallocation),因此可能会出现无效的指针指向网格元素。而上述的AddVertices和AddFac

2016-09-11 10:29:40 2822

原创 VCG笔记-如何定义mesh

VCG lib提供了很多对mesh进行编码的方式,最常见的就是由一个顶点(vertices )集合和一个三角形(triangles )集合构成,(即三角形构成三角形网格,四面体构成四面体网格)。如下面这行代码就是VCG中定义mesh类型的一个例子:class MyMesh : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<M

2016-09-08 10:44:46 3966

原创 VCG简介与安装

1 学习背景  最近在需要用到meshlab中的网格简化与平滑功能并要嵌到自己的项目中,虽然meshlab提供的meshlabserver插件可以用命令行的方式实现,但是在执行的时候会弹出窗口,这样很不友好,于是开始研究meshlab的源码,最后发现meshlab中的简化和平滑功能原来是依赖于VCG这个库的,并且VCG是可以单独使用的,于是就开始学习VCG,然后封装成项目需要的接口。2 VCG简介

2016-09-07 17:58:53 5855

原创 meshlabserver+mlx 模型自动化处理

1 介绍meshlabserver是meshlab中一个很有用的插件,其以命令行的方式运行,基本的语法格式为:meshlabserver arg1 arg2 ...其中可用的参数(args)如下:-i [filename…]   mesh(s) that has to be loaded-o [filename…]  mesh(s) where to write the result(s)-s

2016-09-01 09:44:19 6694 2

MeshLabSrc_v133 + msvc2013可直接编译源码

经过修改的meshlab v1.3.3版本,可以在vs2013+QT5.7环境下直接编译,编译教程可以参考http://blog.csdn.net/linear_luo/article/details/52383243

2016-09-01

谷歌C/C++编程规范

完整的google使用的C/C++编程规范

2016-08-23

C++程序设计(第四版)

C++程序设计的最新版本,包含了C11的相关知识

2016-08-22

CMake构建OpenGL项目

利用CMake来构建依赖glfw、glew、glm以及opengl核心库等库的OpenGL项目

2016-08-20

matlab中将txt文件转换为mat格式

在matlab中将txt文件转换为mat格式文件

2016-08-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除