前言

东莞,晴,33至27度。今天天气真好,学生陆续离开学校。忙完学生答辩事情,最终能够更新一下nodeitk。本文继续介绍node的特征识别相关内容,你会看到,採用nodeitk实现角点检測是一件十分简单的事情。

本文你将学到使用nodeitk进行角点检測:

1.        特征包括有哪些?为什么它们这么重要

2.        使用函数cornerHarris,利用Harris-Stephens方法检測角点

理论

什么是特征?

1.        在机器视觉中,通常我们在一个环境下的不同帧查找匹配点。为什么?这是由于假设我们知道两张图之间的相关性,我们就能够从两张图中提取它们包括的信息

2.        当我们说匹配点时,一般意义是指我们能够非常easy在场景中识别的特征。

3.        那么什么是特征呢?

a)        它必须是独有的能够识别的特性。

图像特征的类型

大概有:

1.        边缘

2.        角点(也称为感兴趣点)

3.        斑点(Blobs,也称为感兴趣区域)

在本文,我们将专门谈谈角点特征

为什么角点那么特别?

由于,它是两相交边的位置,代表两条边方向改变的位置。因此,角点往往是图像梯度(两个方向)急剧变化的位置。

算法描写叙述

当我们寻找角点,由于角点表示图像在梯度的变化,因此我们能够等价于寻找这“变化”

如果是一个灰度图像I。我们使用一个窗体做卷积(u为x方向位移,v为右方向位移):

当中

1.        是在位置的窗体

2.        是在位置的灰度

3.        是移动窗体处的灰度

由于我们希望找到灰度在窗体处存在较大的差异,以此找到角点的窗体位置。因此,我们最大化上述等式,令项:

使泰勒展式:

展开等式并化简:

使用矩阵形式表示:

那么等式能够表示为:

对于每一个窗体,採用以下评价函数以确定窗体是否包括角点

这里

1.        

2.         

当一个窗体的R值大于阈值时,被觉得是角点

源码:

var node_itk = require('./node-itk');
var thresh = 200;
var max_thresh = 255;
var source_window = "Source image";
var corners_window = "Corners detected";
var src = node_itk.cv.imread( "./images/lena.jpg", 1 );
var src_gray = node_itk.cv.CvtColor(src, node_itk.cv.CV_BGR2GRAY);
node_itk.cv.NamedWindow( source_window, node_itk.cv.CV_WINDOW_AUTOSIZE );
node_itk.cv.NamedWindow( corners_window, node_itk.cv.CV_WINDOW_AUTOSIZE );
node_itk.cv.imshow( source_window, src );
var dst , dst_norm;
node_itk.cv.CreateTrackbar( "Threshold: ", source_window, thresh, max_thresh,
function (thresh){
dst = node_itk.cv.NodeOpenCVMat.Zeros(src.Size(), node_itk.cv.CV_32FC1)
dst_norm = dst.Clone();
blockSize = 2;
apertureSize = 3;
k = 0.04;
node_itk.cv.CornerHarris( src_gray, dst, blockSize, apertureSize, k );
node_itk.cv.Normalize(dst,dst_norm, 0, 255,node_itk.cv.NORM_MINMAX,node_itk.cv.CV_32FC1)
dst_norm_scaled = node_itk.cv.ConvertScaleAbs(dst_norm); for (var j = 0; j<dst_norm.Rows(); j++) {
for (var i = 0; i <dst_norm.Cols(); i++) {
if (dst_norm.At([j,i])>thresh)
{
node_itk.cv.Circle(dst_norm_scaled,
new node_itk.cv.NodeOpenCVPoint("Point", [i,j]),
5,
new node_itk.cv.NodeOpenCVScalar("Scalar", 0),
2,
8,
0);
}
};
};
node_itk.cv.NamedWindow(corners_window,node_itk.cv.CV_WINDOW_AUTOSIZE );
node_itk.cv.imshow( corners_window,dst_norm_scaled );
}
);
node_itk.cv.WaitKey ( 0 );

执行结果

小结

nodeitk实现角点检測是一件十分easy的事情,在后面我们将深入介绍相关特征识别的内容,当前特征识别模块已经开发完成。待续。

使用nodeitk进行角点检測的更多相关文章

  1. MatLab角点检測(harris经典程序)

    http://blog.csdn.net/makenothing/article/details/12884331 这是源博客的出处,鄙人转过来是为了更好的保存!供大家一起学习!已将原始的博客的文章的 ...

  2. openCV2马拉松第19圈——Harris角点检測(自己实现)

    计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/26824529 收入囊中 使用OpenCV的con ...

  3. opencv对图像进行边缘及角点检測

    opencv对图像进行边缘及角点检測 先看结果: 代码: // ConsoleApplication1_812.cpp : Defines the entry point for the consol ...

  4. opencv2使用形态学滤波对图像进行边缘及角点检測

    #if !defined MORPHOF #define MORPHOF #include <opencv2/core/core.hpp> #include <opencv2/img ...

  5. 【特征检測】BRIEF特征点描写叙述算法

    简单介绍 BRIEF是2010年的一篇名为<BRIEF:Binary Robust Independent Elementary Features>的文章中提出,BRIEF是对已检測到的特 ...

  6. Canny边缘检測算法原理及其VC实现具体解释(一)

    图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般能够看作是一个阶跃,既从一个灰度值在非常小的缓冲区域内急剧变化到还有一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图 ...

  7. 图像边缘检測--OpenCV之cvCanny函数

    图像边缘检測--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1 ...

  8. 目标检測的图像特征提取之(一)HOG特征

    1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检測的特征描写叙述子.它通过计算和统计图像局部区 ...

  9. Visual C++ 2012/2013的内存溢出检測工具

    在过去,每次编写C/C++程序的时候,VLD差点儿是我的标配.有了它,就能够放心地敲代码,随时发现内存溢出. VLD最高可支持到Visual Studio 2012.不知道以后会不会支持Visual ...

随机推荐

  1. 【Spark Core】任务运行机制和Task源代码浅析1

    引言 上一小节<TaskScheduler源代码与任务提交原理浅析2>介绍了Driver側将Stage进行划分.依据Executor闲置情况分发任务,终于通过DriverActor向exe ...

  2. Oracle字符集查看

    Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期 ...

  3. [汇编学习笔记][第五章[BX]和loop指令]

    第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...

  4. Linux中oracle的安装,亲测

    一.下载oracle的软件包 地址: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-li ...

  5. tableView特色用法

    // //  ViewController.m //  UITableView // //  Created by yhj on 15/12/15. //  Copyright © 2015年 QQ: ...

  6. 系统简单的UIImagePickerController

    1.从系统相册中读取 /* 判断选择的读取类型是否支持 UIImagePickerControllerSourceTypePhotoLibrary,普通相册 UIImagePickerControll ...

  7. date用法

    日常工作中经常使用date这个命令,几乎所有与日期时间相关的操作都会跟这个命令扯上点关系.简单写几条经常使用到的date命令,仅供大家参考. 首先检查一下date的版本,注意如果你用的不是GNU da ...

  8. NopCommerce 3.3中文语言包发布下载及使用

    NopCommerce 3.3是一套国外优秀的开源电子商务项目,其拥有完整的电子商务功能且具有灵活的配置功能,基于微软最新技术ASP.NET MVC 5.1.1,EntityFramework.6.1 ...

  9. PHP PSR-4 Autoloader 自动加载(中文版)

    Autoloader 关键词 “必须”("MUST").“一定不可/一定不能”("MUST NOT").“需要”("REQUIRED"). ...

  10. pubwin2009服务端 修改系统时间方法

      所有操作都是必须的,包括重启. 1.建议操作前全体结账,并交班---不结帐的话, 改完时间会出问题的.2.停止pubwin2009服务端 3.将C:\WINDOWS\system32\driver ...