<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ychl87的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ychl87</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ychl87]]></copyright><item><title><![CDATA[梯度下降法]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/84037669</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/84037669</guid><author>ychl87</author><pubDate>Tue, 13 Nov 2018 22:40:57 +0800</pubDate><description><![CDATA[原文地址:http://www.letao.ai/?p=301

在机器学习、图像拼接、slam等算法中，最优化方法是非常重要的环节。这篇文章主要记录下梯度下降法。后面还会就牛顿法，拟牛顿法和高斯牛顿法等最优化算法等相关的文章。

梯度下降法或者最速下降法，是求解无约束最有问题的一种最常用方法。它是迭代算法，每部都需要求解目标函数的梯度。

函数是上的函数，它具有一阶连续偏导数。梯度下降法要求解的...]]></description><category></category></item><item><title><![CDATA[模板匹配]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/83713881</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/83713881</guid><author>ychl87</author><pubDate>Sun, 04 Nov 2018 10:40:14 +0800</pubDate><description><![CDATA[原创文章，版权所有。转载请注明出处：http://www.letao.ai/?p=292

在机器视觉中，视觉定位是非常重要的一块。商业视觉软件包， 像mil、halcon、cognex等，都会包含视觉定位模块。

模板匹配是视觉定位中常用的算法，这里主要讲下基于灰度互相关的匹配算法， Normalized Cross Correlation, NCC。

灰度互相关的数学思想是，将二维图像，简化...]]></description><category></category></item><item><title><![CDATA[Hough变换之Hough直线检测]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/83687017</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/83687017</guid><author>ychl87</author><pubDate>Sat, 03 Nov 2018 14:31:28 +0800</pubDate><description><![CDATA[原创文章，保留所有版权。转载请注明出处：http://www.letao.ai/?p=282

Hough变换的主要思想是，基于已知边缘点的，对所有可能的参数空间中的参数进行投票。在正确的参数取值处，形成峰值，最终得到要求的结果。常用的基于Hough变换检测的有，Hough直线检测、Hough圆检测，和广义Hough变换。

Hough直线检测

直线如下图所示：





Hough直线检测，是...]]></description><category></category></item><item><title><![CDATA[CentimetersToPoints函数出错]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/15809053</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/15809053</guid><author>ychl87</author><pubDate>Wed, 13 Nov 2013 09:40:30 +0800</pubDate><description><![CDATA[在word开发中，碰到CentimetersToPoints函数调用出错的问题，总是提示为指定的错误。解决办法为修改CentimetersToPoint函数
导入msword.olb后的CentimetersToPoint函数如下

float _Application::CentimetersToPoints(float Centimeters)
{
	float result;
	sta]]></description><category></category></item><item><title><![CDATA[Unity3D脚本架构]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/13768201</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/13768201</guid><author>ychl87</author><pubDate>Thu, 31 Oct 2013 10:53:21 +0800</pubDate><description><![CDATA[LateUpdate（）：如果启用，会在每一帧中被调用。在所有Update函数被调用之后才执行。有利于程序的有序执行。（例如：跟随摄像机就应该在LateUpdate执行，因为它跟随的对象也许需要在Update中执行）
 
OnPreCull（）：摄像机在场景中剔除对象前被调用。剔除确定哪些对象是在摄像机中是可见的。OnPreCull是在剔除这个过程之前被调用的，此消息被发送到所有附加了脚本的摄]]></description><category></category></item><item><title><![CDATA[unity3d中图像导出到OpenCV中]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/13294963</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/13294963</guid><author>ychl87</author><pubDate>Mon, 28 Oct 2013 15:59:02 +0800</pubDate><description><![CDATA[首先从相机或者Texture中获得存储图像块
  Color32[] pixels = Texture2D.GetPixels32();
    //或者WebCamTexture.GetPixels32 ();
再使用GCHandle获得块的指针
  GCHandle pixelHandle = GCHandle.Alloc(pixels, GCHandleType.Pinned);
]]></description><category></category></item><item><title><![CDATA[Qualcomm AR之创建简单工程]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/13294507</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/13294507</guid><author>ychl87</author><pubDate>Mon, 28 Oct 2013 15:43:13 +0800</pubDate><description><![CDATA[一、创建QCAR工程
参考https://developer.vuforia.com/resources/dev-guide/step-2-compiling-simple-project
1.将QCAR package导入Unity3d工程。
2.增加ARCamera到scene中。
ARCamera的Inspector如下


QCARBehaviour类中的参数：

Max]]></description><category></category></item><item><title><![CDATA[Qualcomm AR之目标识别、跟踪]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/12945711</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/12945711</guid><author>ychl87</author><pubDate>Tue, 22 Oct 2013 11:49:42 +0800</pubDate><description><![CDATA[Qualcomm AR中在QCARManagerImpl类实现的图像处理，并进行识别、跟踪物体，得到目标物体的姿态(位置和旋转量)。所有的更新操作，在QCARManagerImpl.Update()中实现。
主要使用到的相关的数据结构


ImageHeaderData图像头结构体
public struct ImageHeaderData
   {
       public in]]></description><category></category></item><item><title><![CDATA[Qualcomm AR之Vuforia SDK框架]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/12711659</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/12711659</guid><author>ychl87</author><pubDate>Mon, 14 Oct 2013 17:24:56 +0800</pubDate><description><![CDATA[本文主要来之Vuforia sdk的官方文档。https://developer.vuforia.com/resources/dev-guide/vuforia-ar-architecture


Vuforia AR sdk主要有以下几个核心部分。
1.Camera。

获取图像。
2.Image Converter。

将从相机获得的图像格式转换为Vuforia处理需要的格式]]></description><category></category></item><item><title><![CDATA[unity3d中的BlendShape混合动画]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/11605339</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/11605339</guid><author>ychl87</author><pubDate>Thu, 12 Sep 2013 15:43:30 +0800</pubDate><description><![CDATA[一.unity3d中加载模型时，网格顶点发生变化的解决办法。

unity3d中加载mesh网格为三角网格，目前unity3d直接导入模型时还存在一些bug，会使得模型的顶定点数发生改变。解决的办法：在project中点击已经加载的模型，在Import Setting中将Normals设为None，点击Apply。然后再将Normals设为Import，重新加载，再点击Apply。]]></description><category></category></item><item><title><![CDATA[opencv中标定函数calibrateCamera]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/11473593</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/11473593</guid><author>ychl87</author><pubDate>Mon, 09 Sep 2013 12:15:15 +0800</pubDate><description><![CDATA[世界坐标系的三维点投影到成像坐标系中的二维点的投影公式如下：其中(X,Y,Z)为世界坐标系中的三维点；（u,v）为成像面坐标系中的二维点；A为相机的内参数矩阵：(cx,cy)为主光轴点，一般为图像的中心；fx和fy为焦距；[R|t]为相机的外参数矩阵：R为旋转矩阵，t为位移矩阵；上述公式的简单推理过程如下考虑到镜头畸变其中，k1,k2,k3,k4,k5和k6为径向畸变，p1和p2为轴向畸变。在op]]></description><category></category></item><item><title><![CDATA[unity3d鼠标移动、旋转物体]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/10916971</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/10916971</guid><author>ychl87</author><pubDate>Mon, 02 Sep 2013 15:03:34 +0800</pubDate><description><![CDATA[为了从不同角度观察物体，需要使用鼠标改变物体的位置及角度。
在unity3d中Input.GetMouseButton()获得鼠标键，Input.GetAxis()函数获得鼠标的移动的方向和距离，其中Mouse
 X表示X方向，Mouse Y表示Y方向，Mouse ScrollWheel表示中键滚动距离。
private float rotationX;
	private float rot]]></description><category></category></item><item><title><![CDATA[二叉查找树]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8045633</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8045633</guid><author>ychl87</author><pubDate>Sun, 07 Oct 2012 18:29:51 +0800</pubDate><description><![CDATA[二叉查找树是中已经排好序的二叉树，也称二插排序树
二叉查找树的插入

void insertTree(node*& tree,char elem)  //递归插入
{
	if (!tree)
	{
		tree=(node*)malloc(sizeof(node));
		tree->data=elem;
		tree->lchild=NULL;
		tree->rchild=NULL;]]></description><category></category></item><item><title><![CDATA[二叉树深度、平衡二叉树的判断]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8043863</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8043863</guid><author>ychl87</author><pubDate>Sat, 06 Oct 2012 20:50:53 +0800</pubDate><description><![CDATA[递归求取二叉树深度

int depthBiTree(node* tree)
{
	if (!tree) return 0;
	int ldepth=depthBiTree(tree->lchild);
	int rdepth=depthBiTree(tree->rchild);
	return ldepth>rdepth?ldepth+1:rdepth+1;
}

平衡二叉树的判断和求二叉]]></description><category></category></item><item><title><![CDATA[完全二叉树的判断]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8043823</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8043823</guid><author>ychl87</author><pubDate>Sat, 06 Oct 2012 20:36:23 +0800</pubDate><description><![CDATA[利用队栈，判断是否为完全二叉树

bool isFullBiTree(node* tree)
{
	deque q;
	if (!tree) return true;
	node* t=tree;
	q.push_back(t);
	while (!q.empty()) 
	{
		t=q.front();
		q.pop_front();
		if (t)
		{
			q.push_bac]]></description><category></category></item><item><title><![CDATA[二叉树重构]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8042773</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8042773</guid><author>ychl87</author><pubDate>Sat, 06 Oct 2012 04:08:00 +0800</pubDate><description><![CDATA[二叉树可以根据  先序和中序 或者  中序和后序进行重构。
但是不能够根据先序和后序结果进行重构。如先序为123，后序为321，这颗二叉树是不唯一的。
已知先序和中序对二叉树进行重构node* rebuildFromPreAndInOrder(char* preOrder,char *inOrder,int size)
{
	if (size<=0) return NULL;
	node* r]]></description><category></category></item><item><title><![CDATA[二叉树最近公共父节点]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8042648</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8042648</guid><author>ychl87</author><pubDate>Sat, 06 Oct 2012 02:09:46 +0800</pubDate><description><![CDATA[在二叉树中，查找两个子节点的最近公共父节点。实现方法：首先找到每个子节点的路径，然后再比较两个路径最后一个相同节点，既最近公共父节点。
二叉树的数据结构如下

typedef struct _node
{
	char data;
	struct _node* lchild;
	struct _node* rchild;
}node;
查找子节点的路径，利用链表list来实现


bo]]></description><category></category></item><item><title><![CDATA[二叉树的基本操作]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8042601</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8042601</guid><author>ychl87</author><pubDate>Sat, 06 Oct 2012 02:00:58 +0800</pubDate><description><![CDATA[本文就二叉树的基本操作进行总结
包括二叉树的建立、递归遍历、非递归遍历、层序遍历等
二叉树的结构体如下

typedef struct _node
{
	char data;
	struct _node* lchild;
	struct _node* rchild;
}node;


1.二叉树的建立

void create(node*& tree)
{
	char data;]]></description><category></category></item><item><title><![CDATA[大小端系统判断]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/8011896</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/8011896</guid><author>ychl87</author><pubDate>Mon, 24 Sep 2012 10:55:53 +0800</pubDate><description><![CDATA[大端系统(Big-endian)：数据的低字节存放在高地址中。如power pc，aix等。
小端系统(Little-endian)：数据的低字节存放在低地址中。 如arm，x86,amd等。
判断大小端系统的代码：
int checkCPU( )
{
   union w
   { 
          int a;
          char b;
   } c;]]></description><category></category></item><item><title><![CDATA[二分查找]]></title><link>https://blog.youkuaiyun.com/ychl87/article/details/7995292</link><guid>https://blog.youkuaiyun.com/ychl87/article/details/7995292</guid><author>ychl87</author><pubDate>Wed, 19 Sep 2012 11:47:56 +0800</pubDate><description><![CDATA[近一段时间开始找工作了，将一些经典的算法复习一遍，并且编码实现下，便于再次复习。
二分查找
原理相对简单，不多说
int binarySearch(int a[],int len,int goal)
{
  int low=0;
  int high=len-1;
  while(low<=high)
    {
       int middle=(low+high)/2;]]></description><category></category></item></channel></rss>