当前位置 : 首页

RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

SIFT源码分析系列文章的索引在这里:

imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特征点绘制函数的声明。
对应的imgfeatures.c文件中是特征点的导入导出以及特征点绘制函数的实现。
特征点的类型有两种:

  • 一种是是牛津大学VGG提供的源码中的特征点格式;
  • 另一种是David.Lowe提供的源码中的特征点格式。

RobHess的SIFT源码分析:综述

最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究。

后来想用OpenCV中自带的SIFT特征检测器进行特征检测和拼接,但还是有隔靴搔痒的感觉,接触不到SIFT算法的本质。
看到网上大多数都是使用RobHess的SIFT源码,自己也下载了一份进行了分析,并用RobHess的SIFT源码实现了特征提取和图像拼接。

利用RANSAC算法筛选SIFT特征匹配


利用RANSAC算法筛选SIFT特征匹配的主要流程

关于RANSAC算法的基本思想,可从网上搜索找到,这里只是RANSAC用于SIFT特征匹配筛选时的一些说明。
RANSAC算法在SIFT特征筛选中的主要流程是:

  • (1) 从样本集中随机抽选一个RANSAC样本,即4个匹配点对
  • (2) 根据这4个匹配点对计算变换矩阵M
  • (3) 根据样本集,变换矩阵M,和误差度量函数计算满足当前变换矩阵的一致集consensus,并返回一致集中元素个数
  • (4) 根据当前一致集中元素个数判断是否最优(最大)一致集,若是则更新当前最优一致集
  • (5) 更新当前错误概率p,若p大于允许的最小错误概率则重复(1)至(4)继续迭代,直到当前错误概率p小于最小错误概率

OpenCV2.4.4图像仿射变换

图像仿射变换简介:

OpenCV中Mat类的图像如何设置ROI

Mat类表示的图像进行ROI操作有两种方法

  • (1)使用拷贝构造函数Mat(constMat& m, const Rect& roi ),矩形roi指定了兴趣区
    例如:

    Mat src = imread(“xx.jpg”);  
    Mat srcROI( src, Rect(0,0,src.cols/2,src.rows/2));
    

    srcROI的数据与源图像src共享存储区,所以此后在srcROI上的操作也会作用在源图像src上。

OpenCV2.4.4图像旋转和缩放

旋转变换公式的推导:

OpenCV2.4.4中调用SIFT特征检测器进行图像匹配


OpenCV中一些相关结构说明

特征点类:

class KeyPoint  
{  
       Point2f  pt;  //坐标  
       float  size; //特征点邻域直径  
       float  angle; //特征点的方向,值为[0,360),负值表示不使用  
       float  response; //  
       int  octave; //特征点所在的图像金字塔的组  
       int  class_id; //用于聚类的id  
}

OpenCV2.4.4实现Harris角点检测

代码如下:

Qt中暂停线程的执行

在线程中定义一个信号量:

OpenCV2.4.4中利用直方图均衡化增强图像对比度(Mat结构实现)

直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin(直方图中的柱子)中。bin中的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。无论如何,直方图获得的是数据分布的统计图。
灰度图像的直方图的性质:

  • 1、直方图是一幅图像中各像素灰度出现频次的统计结果,它只反映图像中不同灰度值出现的次数,而没反映某一灰度所在的位置。也就是说,它只包含了该图像的某一灰度像素出现的概率,而丢失了其所在的位置信息。
  • 2、任一幅图像,都有惟一确定一幅与它对应的直方图,但不同的图像可能有相同的直方图。即图像与直方图之间是多对一的映射关系。
  • 3、由于直方图是对具有相同灰度值的像素统计得到的,因此,一幅图像各子区的直方图之和就等于该图像全图的直方图。

岛田庄司《占星术杀人魔法》读后感

  昨天晚上夜谈的时候,聊到了少年包青天里的一个分尸案,今天查了查,叫《隐逸村案》,里面有用6个人的尸体拼出7个人的假象,马上就想到了《占星术杀人案》。
  其实用这个想法的小说还真不少,包青天里的应该是借鉴了金田一中的《异人馆村杀人事件》,而金田一是借鉴了岛田的占星术,还有庄秦的《夜长梦多》也是借鉴了岛田的占星术,这些小说里面都有拼凑尸体的诡计,但其中做的最完美的还属占星术了。

我的记单词方法

  下面分享下考研期间我复习英语过程中记单词的一个方法,我自认为比较有效,大家仅做参考。

Qt中整型转字符串的方法

程序中需要将整型转换为字符串QString类型,看了看QString的构造函数,没有直接以int类型为参数的。
很奇怪,Qt一直给人感觉做什么都很方便,怎么会没有直接将整型转换为字符串的方法呢?难道还得自己写?

OpenCV中Mat结构和Qt中QImage结构RGB排列顺序不同

Qt中利用OpenCV显示图片和视频时,需要将opencv中的MatIplImage结构转换为Qt中QImage结构,转换时需要注意的地方是OpenCV中和Qt中三原色排列顺序的不同:OpenCV中是以BGR的顺序排列,Qt中是以RGB的顺序排列,两种格式在转换时如果没注意到这点,就会出现问题,如下图: