2011年11月8日
摘要: 看Kd树时,建立Kd-tree需要为第split维的值排序,并查找位于正中间的那个数据点。询问了好多同学,他们说,可以首先用堆排序,然后找第(n-1)/2的数。觉得挺有道理。但是,还看到一种方法,就是Rank_Select方法。代码如下:Rank_Select方法static void insertion_sort( double* array, int n ){ double k; int i, j; for( i = 1; i < n; i++ ) { k = array[i]; j = i-1; while( j >= 0... 阅读全文
posted @ 2011-11-08 16:34 Ming明、 阅读(2362) 评论(1) 推荐(0)
摘要: Kd-树 其实是K-dimension tree的缩写,是对数据点在k维空间中划分的一种数据结构。其实,Kd-树是一种平衡二叉树。举一示例:假设有六个二维数据点 = {(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},数据点位于二维空间中。为了能有效的找到最近邻,Kd-树采用分而治之的思想,即将整个空间划分为几个小部分。六个二维数据点生成的Kd-树的图为:对于拥有n个已知点的kD-Tree,其复杂度如下:构建:O(log2n)插入:O(log n)删除:O(log n)查询:O(n1-1/k+m) m---每次要搜索的最近点个数一 Kd-树的构建Kd-树是一个二叉树,每 阅读全文
posted @ 2011-11-08 15:53 Ming明、 阅读(22517) 评论(17) 推荐(4)
  2011年10月30日
摘要: 1 sift简介 David G. Lowe在1999年提出了尺度不变的特征(Scale-Invariant Feature),用来进行物体的识别和图像匹配等,并于2004年进行了更深入的发展和并加以完善。SIFT(Scale-Invariant Feature Transform)算子是一种图像的局部描述子,具有尺度、旋转、平移的不变性,而且对光照变化、仿射变换和3维投影变换具有一定的鲁棒性。在Mikolajczyk对包括SIFT算子在内的十种局部描述子所做的不变性对比实验中,SIFT及其扩展算法已被证实在同类描述子中具有最强的健壮性。 算法的主要思想是在尺度空间寻找极值点(注意不是平面上的 阅读全文
posted @ 2011-10-30 21:00 Ming明、 阅读(7653) 评论(8) 推荐(5)
  2011年10月16日
摘要: 原理:在特殊领域运算形式——结构元素(Sturcture Element),在每个像素位置上与二值图像对应的区域进行特定的逻辑运算。运算结构是输出图像的相应像素。运算效果取决于结构元素大小内容以及逻辑运算性质。结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小还很多。二维平面结构元素由一个数值为0或1的矩阵组成。结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的邻域像素在进行膨胀或腐蚀操作时是否需要参与计算。先来定义一些基本符号和关系。1. 元素设有一幅图象X,若点a在X的区域以内,则称a为X的元素,记作a∈X,如图6.1所示。2 阅读全文
posted @ 2011-10-16 11:05 Ming明、 阅读(49753) 评论(17) 推荐(11)
摘要: 原文请看:数字图像处理中的形态学数字图像处理中的形态学(摘自某文献,因为贴图的数目有限制,后面的公式图片没有能够上,电脑重装后文档已经找不到了,囧)一 引言 数学形态学是一门建立在集论基础上的学科,是几何形态学分析和描述的有力工具。数学形态学的历史可回溯到19世纪。1964年法国的Matheron和Serra在积分几何的研究成果上,将数学形态学引入图像处理领域,并研制了基于数学形态学的图像处理系统。1982年出版的专著《Image Analysis and Mathematical Morphology》是数学形态学发展的重要里程碑,表明数学形态学在理论上趋于完备及应用上不断深入。数学形态学蓬 阅读全文
posted @ 2011-10-16 10:28 Ming明、 阅读(2973) 评论(0) 推荐(0)
  2011年10月14日
摘要: 虽然Canny之类的边缘检测算法可以根据像素间的差异检测出轮廓边界的像素,但是它并没有将轮廓作为一个整体。下一步是要将这些边缘像素组装成轮廓。轮廓是构成任何一个形状的边界或外形线。直方图对比和模板匹配根据色彩及色彩的分布来进行匹配,以下包括:轮廓的查找、表达方式、组织方式、绘制、特性、匹配。首先回忆下几个结构体:首先是图像本身的结构体:typedef struct CvMat{int type; /* CvMat 标识 (CV_MAT_MAGIC_VAL), 元素类型和标记 */int step; /* 以字节为单位的行数据长度*/int* refcount; /* 数据引用计数 */unio 阅读全文
posted @ 2011-10-14 14:49 Ming明、 阅读(52527) 评论(3) 推荐(7)
  2011年10月13日
摘要: 首先介绍一下直方图一.用带权重的样本统计直方图直方图Histogram,是一种常见的概率分布的非参数(区别于高斯分布,泊松分布等用参数表达概率密度的方法)表达方法。直方图可以看成概率密度分布的离散化表达方法。它的计算很简单,是一种投票的方法,就是每个样本往对应的小盒子(bin)里投一票。假设N个样本数据x量化为1~M之间的整数,那么Hist是M维数组,对应的直方图计算方法如下://initializingfor i=1:M Hist[i] = 0;end//votingfor i = 1:N Hist[x[i]] += 1 ;end为了表示成概率分布,需要Hist数组和为1://normali 阅读全文
posted @ 2011-10-13 20:02 Ming明、 阅读(24385) 评论(5) 推荐(5)
  2011年10月12日
摘要: 滑动条用于设置阈值,然后对采二值化后的图像提取轮廓并绘制轮廓。当控制参数的滑动条变化时,图像被更新。View Code 1 //首先将图像g_image转换为灰度图像。接着用g_thresh为参数进行二值化处理,得到的二值图像保存在g_gray中。 2 //cvFindContours从二值图像g_gray查找轮廓,然后将得到的轮廓用cvDrawContours函数绘制为白色得到灰度图像。 3 //最终图像在窗口中显示处理。并将在回调函数开始处申请的结构释放。 4 5 IplImage* g_image=NULL; 6 IplImage* g_gray=NULL; 7 8 int g_t... 阅读全文
posted @ 2011-10-12 19:17 Ming明、 阅读(8520) 评论(0) 推荐(2)
  2011年9月30日
摘要: HighGUI没有显示提供任何形式的按钮,可以使用只有两个状态的滑动条来代替按钮。View Code 1 int g_switch_value=0; 2 void switch_on_function() 3 { 4 5 } 6 void switch_off_function() 7 { 8 9 }10 11 void switch_callback(int position)12 {13 if(position==0)14 switch_off_function();15 else16 switch_on_function();17 ... 阅读全文
posted @ 2011-09-30 16:26 Ming明、 阅读(1195) 评论(0) 推荐(0)
摘要: View Code 1 void my_mouse_callback(int event,int x,int y,int flags,void* param); 2 3 CvRect box; 4 5 bool drawing_box=false; 6 7 // a little subroutine to draw a box on to an image 8 void draw_box(IplImage* img,CvRect rect) 9 {10 cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,b... 阅读全文
posted @ 2011-09-30 15:54 Ming明、 阅读(2123) 评论(0) 推荐(0)