Harris

角点

角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。

下面有两幅不同视角的图像,通过找出对应的角点进行匹配。

我们可以直观的概括下角点所具有的特征:

轮廓之间的交点;

对于同一场景,即使视角发生变化,通常具备稳定性质的特征;

该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化;

角点匹配(corner matching)是指寻找两幅图像之间的特征像素点的对应关系,从而确定两幅图像的位置关系。

角点匹配可以分为以下四个步骤:

提取检测子:在两张待匹配的图像中寻找那些最容易识别的像素点(角点),比如纹理丰富的物体边缘点等。

提取描述子:对于检测出的角点,用一些数学上的特征对其进行描述,如梯度直方图,局部随机二值特征等。检测子和描述子的常用提取方法有:sift, harris, surf, fast, agast, brisk, freak, brisk,orb等。

匹配:通过各个角点的描述子来判断它们在两张图像中的对应关系。常用方法如flann。

去外点:去除错误匹配的外点,保留正确的内点。常用方法有Ransac, GTM。

这里我们只介绍最常用的Harris算子。

Harris Corner Detector

Harris Corner Detector是Chris Harris和Mike Stephens于1988年提出的算子。

论文:

《A Combined Corner and Edge Detector》

如上图所示。人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

对于图像I(x,y)I(x,y)I(x,y),当在点(x,y)处平移(Δx,Δy)(Δx,Δy)(\Delta x,\Delta y)后的自相似性,可以通过自相关函数给出:

c(x,y;Δx,Δy)=∑(u,v)∈W(x,y)w(u,v)(I(u,v)–I(u+Δx,v+Δy))2c(x,y;Δx,Δy)=∑(u,v)∈W(x,y)w(u,v)(I(u,v)–I(u+Δx,v+Δy))2

c(x,y;\Delta x,\Delta y) = \sum_{(u,v)\in W(x,y)}w(u,v)(I(u,v) – I(u+\Delta x,v+\Delta y))^2

其中,W(x,y)W(x,y)W(x,y)是以点(x,y)为中心的窗口,w(u,v)w(u,v)w(u,v)为加权函数,它既可是常数,也可以是高斯加权函数。

根据泰勒展开,对图像I(x,y)I(x,y)I(x,y)在平移(Δx,Δy)(Δx,Δy)(\Delta x,\Delta y)后进行一阶近似:

I(u+Δx,v+Δy)=I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy+O(Δx2,Δy2)≈I(u,v)+Ix(u,v)Δx+Iy(u,v)ΔyI(u+Δx,v+Δy)=I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy+O(Δx2,Δy2)≈I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy

I(u+\Delta x,v+\Delta y) = I(u,v)+I_x(u,v)\Delta x+I_y(u,v)\Delta y+O(\Delta x^2,\Delta y^2)\approx I(u,v)+I_x(u,v)\Delta x+I_y(u,v)\Delta y

其中,Ix,IyIx,IyI_x,I_y是图像I(x,y)I(x,y)I(x,y)的偏导数,则自相关函数可简化为:

c(x,y;Δx,Δy)≈∑w(Ix(u,v)Δx+Iy(u,v)Δy)2=[Δx,Δy]M(x,y)[ΔxΔy]c(x,y;Δx,Δy)≈∑w(Ix(u,v)Δx+Iy(u,v)Δy)2=[Δx,Δy]M(x,y)[ΔxΔy]

c(x,y;\Delta x,\Delta y)\approx \sum_w (I_x(u,v)\Delta x+I_y(u,v)\Delta y)^2=[\Delta x,\Delta y]M(x,y)\begin{bmatrix}\Delta x \\ \Delta y\end{bmatrix}

其中:

M(x,y)=∑w[Ix(x,y)2Ix(x,y)Iy(x,y)Ix(x,y)Iy(x,y)Iy(x,y)2]=[∑wIx(x,y)2∑wIx(x,y)Iy(x,y)∑wIx(x,y)Iy(x,y)∑wIy(x,y)2]=[ACCB]M(x,y)=∑w[Ix(x,y)2Ix(x,y)Iy(x,y)Ix(x,y)Iy(x,y)Iy(x,y)2]=[∑wIx(x,y)2∑wIx(x,y)Iy(x,y)∑wIx(x,y)Iy(x,y)∑wIy(x,y)2]=[ACCB]

M(x,y)=\sum_w \begin{bmatrix}I_x(x,y)^2&I_x(x,y)I_y(x,y) \\ I_x(x,y)I_y(x,y)&I_y(x,y)^2\end{bmatrix} = \begin{bmatrix}\sum_w I_x(x,y)^2&\sum_w I_x(x,y)I_y(x,y) \\\sum_w I_x(x,y)I_y(x,y)&\sum_w I_y(x,y)^2\end{bmatrix}=\begin{bmatrix}A&C\\C&B\end{bmatrix}

即:

c(x,y;Δx,Δy)≈AΔx2+2CΔxΔy+BΔy2c(x,y;Δx,Δy)≈AΔx2+2CΔxΔy+BΔy2

c(x,y;\Delta x,\Delta y)\approx A\Delta x^2+2C\Delta x\Delta y+B\Delta y^2

其中:

A=∑wI2x,B=∑wI2y,C=∑wIxIyA=∑wIx2,B=∑wIy2,C=∑wIxIy

A=\sum_w I_x^2, B=\sum_w I_y^2,C=\sum_w I_x I_y

二次项函数本质上就是一个椭圆函数。椭圆的扁率和尺寸是由M(x,y)的特征值λ1,λ2λ1,λ2\lambda_1, \lambda_2决定的,轴向是由M(x,y)的特征矢量决定的,如下图所示,椭圆方程为:

[Δx,Δy]M(x,y)[ΔxΔy]=1[Δx,Δy]M(x,y)[ΔxΔy]=1

[\Delta x,\Delta y]M(x,y)\begin{bmatrix}\Delta x \\ \Delta y\end{bmatrix} = 1

椭圆函数特征值与图像中的角点、直线(边缘)和平面之间的关系如下图所示。共可分为三种情况:

图像中的直线。一个特征值大,另一个特征值小,λ1≫λ2λ1≫λ2\lambda_1\gg \lambda_2或λ2≫λ1λ2≫λ1\lambda_2\gg \lambda_1。自相关函数值在某一方向上大,在其他方向上小。

图像中的平面。两个特征值都小,且近似相等;自相关函数数值在各个方向上都小。

图像中的角点。两个特征值都大,且近似相等,自相关函数在所有方向都增大。

根据二次项函数特征值的计算公式,我们可以求M(x,y)矩阵的特征值。但是Harris给出的角点差别方法并不需要计算具体的特征值,而是计算一个角点响应值R来判断角点。R的计算公式为:

R=detM−α(traceM)2R=detM−α(traceM)2

R=det \boldsymbol{M} - \alpha(trace\boldsymbol{M})^2

式中,detMdetMdet\boldsymbol{M}为矩阵M=[ABBC]M=[ABBC]\boldsymbol{M}=\begin{bmatrix}A&B\\B&C\end{bmatrix}的行列式;traceMtraceMtrace\boldsymbol{M}为矩阵M的直迹;αα\alpha为经验常数,取值范围为0.04~0.06。事实上,特征是隐含在detMdetMdet\boldsymbol{M}和traceMtraceMtrace\boldsymbol{M}中,因为,

detM=λ1λ2=AC−B2detM=λ1λ2=AC−B2

det\boldsymbol{M} = \lambda_1\lambda_2=AC-B^2

traceM=λ2+λ2=A+CtraceM=λ2+λ2=A+C

trace\boldsymbol{M}=\lambda_2+\lambda_2=A+C

Harris角点的性质

增大αα\alpha的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小αα\alpha值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量

Harris角点检测算子对亮度和对比度的变化不敏感。这是因为在进行Harris角点检测时,使用了微分算子对图像进行微分运算,而微分运算对图像密度的拉升或收缩和对亮度的抬高或下降不敏感。换言之,对亮度和对比度的仿射变换并不改变Harris响应的极值点出现的位置。

Harris角点检测算子使用的是角点附近的区域灰度二阶矩矩阵。而二阶矩矩阵可以表示成一个椭圆,椭圆的长短轴正是二阶矩矩阵特征值平方根的倒数。当特征椭圆转动时,特征值并不发生变化,所以判断角点响应值R也不发生变化,由此说明Harris角点检测算子具有旋转不变性

Harris角点检测算子不具有尺度不变性。如下图所示,当右图被缩小时,在检测窗口尺寸不变的前提下,在窗口内所包含图像的内容是完全不同的。左侧的图像可能被检测为边缘或曲线,而右侧的图像则可能被检测为一个角点。

为了解决尺度不变性问题,可以使用多尺度Harris角点算法,将Harris角点检测算子与高斯尺度空间表示相结合,使其具有尺度不变性:

M=μ(x,σI,σD)=σ2Dg(σI)⊗[L2x(x,σD)LxLy(x,σD)LxLy(x,σD)L2y(x,σD)]M=μ(x,σI,σD)=σD2g(σI)⊗[Lx2(x,σD)LxLy(x,σD)LxLy(x,σD)Ly2(x,σD)]

\boldsymbol{M}=\mu(x,\sigma_I,\sigma_D)=\sigma_D^2g(\sigma_I)\otimes\begin{bmatrix}L_x^2(x,\sigma_D)&L_xL_y(x,\sigma_D)\\L_xL_y(x,\sigma_D)&L_y^2(x,\sigma_D)\end{bmatrix}

参考

http://blog.csdn.net/lwzkiller/article/details/54633670

Harris角点检测原理详解

http://www.cnblogs.com/ronny/p/4009425.html

Harris角点

https://blog.csdn.net/davebobo/article/details/52598850

检测并匹配兴趣点

https://blog.csdn.net/songzitea/article/details/17969375

角点匹配方法

Eigenface

Eigenface是M. Turk和A. Pentland于1991年提出的人脸识别算法。

Matthew A. Turk,Virginia Tech本科(1982)+CMU硕士(1984)+MIT博士(1991)。UCSB教授。

Alex Paul “Sandy” Pentland,1952年生,MIT博士(1982)。MIT教授。

论文:

《Face recognition using eigenfaces》

计算Eigenface

Step 1:假设有M张训练照片I1,…,IMI1,…,IMI_1,\dots,I_M,每张照片的尺寸为NxN,将照片IiIiI_i转换成1维vector ΓiΓi\Gamma_i。显然,ΓiΓi\Gamma_i的大小是N2N2N^2。

Step 2:计算均值vector ΨΨ\Psi(也就是常说的平均脸(average face/mean face)):

Ψ=1M∑i=1MΓiΨ=1M∑i=1MΓi

\Psi=\frac{1}{M}\sum_{i=1}^M\Gamma_i

Step 3:计算图片与均值的差:

Φi=Γi−ΨΦi=Γi−Ψ

\Phi_i=\Gamma_i-\Psi

Step 4:计算协方差矩阵:

C=1M∑n=1MΦnΦTn=AAT(N2×N2matrix)C=1M∑n=1MΦnΦnT=AAT(N2×N2matrix)

C=\frac{1}{M}\sum_{n=1}^M\Phi_n \Phi_n^T=AA^T(N^2\times N^2 \text{matrix})

Step 5:计算的AATAATAA^T特征向量uiuiu_i。然而,AATAATAA^T太大了,我们只能退而求其次计算ATA(M×Mmatrix)ATA(M×Mmatrix)A^TA(M\times M \text{matrix})的特征向量viviv_i。

那么uiuiu_i和viviv_i到底有什么关系呢?我们首先根据特征向量的定义,给出下式:

ATAvi=μiviATAvi=μivi

A^TAv_i=\mu_iv_i

其中,μiμi\mu_i是ATAATAA^TA的特征值。

ATAvi=μivi⇒AATAvi=μiAvi⇒CAvi=μiAviATAvi=μivi⇒AATAvi=μiAvi⇒CAvi=μiAvi

A^TAv_i=\mu_iv_i\Rightarrow AA^TAv_i=\mu_iAv_i\Rightarrow CAv_i=\mu_iAv_i

令ui=Aviui=Aviu_i=Av_i,则:

Cui=μiuiCui=μiui

Cu_i=\mu_iu_i

可见μiμi\mu_i同时也是AATAATAA^T的特征值,而对应的特征向量则是AviAviAv_i。

实际上,ATAATAA^TA的M个特征值,就是AATAATAA^T的前M大的特征值。

Step 6:从中选出K个最大的特征向量供后续使用。

使用Eigenface

Step 1:给定图片ΓΓ\Gamma,计算:

Φ=Γ−ΨΦ=Γ−Ψ

\Phi=\Gamma-\Psi

Step 2:将ΦΦ\Phi映射到K维特征向量空间:

Ω=[w1,…,wK]TΩ=[w1,…,wK]T

\Omega=[w_1,\dots,w_K]^T

Step 3:计算与图片l的距离:

er=‖Ω−Ωl‖er=‖Ω−Ωl‖

e_r=\|\Omega-\Omega^l\|

当er<Trer<Tre_r时,就认为是同一张人脸。

这里的距离可以是欧氏距离,但作者指出使用马式距离效果更佳。

综上,Eigenface实际上就是PCA在人脸识别上的应用。

Eigenface的缺点

1.训练图片中人脸需要对齐,且图片大小一致。

2.Eigenface对于大数据集的计算效率不佳。在Eigenface出现的年代,数字图片尚不多见,因此,数据集普遍较小。但现在即便是mini数据集也动辄上万张图片,甚至M>N2M>N2M>N^2的情况也不罕见。而对超大矩阵进行SVD分解,是个很吃计算量的事情,这也限制了Eigenface的应用。

参考

http://blog.csdn.net/smartempire/article/details/21406005

特征脸方法(Eigenface)

http://vision.jhu.edu/teaching/vision08/Handouts/case_study_pca1.pdf

Eigenfaces for Face Detection/Recognition

http://www.cnblogs.com/little-monkey/p/8118938.html

人脸识别算法——EigenFace、FisherFace、LBPH

LBP

LBP(Local Binary Patterns)算法是Matti Kalevi Pietikäinen于1994年提出的方法,后来被用到了人脸识别领域。

Matti Kalevi Pietikäinen,University of Oulu博士(1982)、教授。

Timo Ojala,Pietikäinen的博士生。现亦为University of Oulu教授。

论文:

《Face Recognition with Local Binary Patterns》

LBP特征提取

最初的LBP是定义在像素3x3邻域内的,以邻域中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3x3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该邻域中心像素点的LBP值,并用这个值来反映该区域的纹理信息。如下图所示:

即:

LBP(xc,yc)=∑p=0P−12ps(ip−ic)LBP(xc,yc)=∑p=0P−12ps(ip−ic)

LBP(x_c,y_c)=\sum_{p=0}^{P-1}2^ps(i_p-i_c)

其中,c表示中心元素,p表示领域内的其它元素。

s(x)={1,0,if x≥0elses(x)={1,if x≥00,else

s(x)=\begin{cases} 1, & \text{if } x \ge 0 \\ 0, & \text{else} \\ \end{cases}

图像处理理论(六)——Harris, Eigenface相关推荐

  1. 数字图像处理——第六章 彩色图像处理

    数字图像处理--第六章 彩色图像处理 文章目录 数字图像处理--第六章 彩色图像处理 1 彩色模型 1.1 RGB彩色模型 1.2 CMY 和CMYK彩色模型 1.3 HSI彩色模型 2 伪彩色图像处 ...

  2. 图像处理理论(五)——SIFT

    SIFT 概述 SIFT算法是CV领域在DL进入之前的20年中,最重要的成果. 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来 ...

  3. 图像处理理论(四)——HOG, Haar, ISP

    http://antkillerfarm.github.io HOG Histogram of oriented gradients是一种用于物体检测的算子. HOG的计算步骤,如上图所示: 1.首先 ...

  4. OpenCV与图像处理学习十三——Harris角点检测(含代码)

    OpenCV与图像处理学习十三--Harris角点检测(含代码) 一.角点的概念 二.Harris角点检测的实现过程 三.Harris代码应用 一.角点的概念 角点: 在现实世界中, 角点对应于物体的 ...

  5. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  6. 分布式理论(六)—— Raft 算法

    分布式理论(六)-- Raft 算法 前言 我们之前讲述了 Paxos 一致性算法,虽然楼主尝试用最简单的算法来阐述,但仍然还是有点绕.楼主最初怀疑自己太笨,后来才直到,该算法的晦涩难懂不是只有我一个 ...

  7. 数字图像处理第六章——彩色图像处理(上)

    数字图像处理第六章 数字图像处理---彩色图像处理 (一) 在 MATLAB 中彩色图像的表示 1.1 RGB图像 1.2 索引图像 1.3 处理 RGB图像和索引 (二)彩色空间之间的转换 2.1 ...

  8. 【计算机视觉】数字图像处理(六)—— 图像压缩

    数字图像处理(六)-- 图像压缩 一.图像压缩概述 (一).图像编码技术的研究背景 1. 信息信息传输方式发生了很大的改变 2. 图像传输与存储需要的信息量空间 (1)彩色视频信息 (2)传真数据 3 ...

  9. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  10. 数字图像处理第六章 ——彩色图像处理(下)

    数字图像处理第六章 数字图像处理---彩色图像处理 (五) 彩色图像的空间滤波 5.1 彩色图像的平滑处理 5.2 彩色图像的锐化处理 (六) 直接在 RGB 矢量空间中处理 6.1 使用梯度的彩色边 ...

最新文章

  1. 广泛的信号处理链如何让语音助理“正常工作”
  2. AFNetWorking 队列请求
  3. 解决VMware—MAC冲突问题
  4. phpmailer 发送邮件空隙太大_WordPress纯代码无插件开启SMTP邮件服务——墨涩网
  5. P5022-旅行【基环树,dfs】
  6. ios 数组中的字典排序_利用数组和字典,实现按指定规则的排序
  7. c语言根据学分修改成绩,用c语言编写学分管理系统-成绩管理系统
  8. 带新手玩转MVC——不讲道理就是干(下)
  9. Alpha,Beta,RC,RTM,EVAL,CTP,OEM,RTL,VOL
  10. 天宝DINI03/莱卡DNA03等电子水准仪原始数据处理软件使用教程
  11. mysql添加表字段脚本_mysql数据库修改字段及新增字段脚本
  12. Mac电脑中delete键的几种用法
  13. idear怎么设置自动导包
  14. RMAN-06817: Pluggable Database CHARLESPDB cannot be backed up in NOARCHIVELOG mode.
  15. 查询数据库表空间文件位置及扩充表空间,查询表空间容量
  16. list迭代器的模拟实现
  17. C++之适配器(Adapter)模式
  18. 三维可视化技术在超超临界锅炉防磨防爆中的应用
  19. Java里面是先算乘除后算加减,JAVA基础之基本加减乘除计算
  20. 树莓派 3的新手指南

热门文章

  1. 一句简单的SQL查询语句的背后...
  2. js获取浏览器和屏幕宽高等信息(转)
  3. 第三方免费开放API 获取用户IP 并查询其地理位置
  4. js 替换任意字符串中间几位为*星号
  5. CSS3制作一个简单的进度条
  6. CNN结构:色彩空间建模-色彩空间分析
  7. ubuntuKylin17.04重装KDE
  8. CUDA5.5入门文章:VS10设置
  9. Laravel 多用户认证
  10. dedecms首页怎么调用公司简介的内容