08_Machine Vision_图片分类

Outline

  • template matching
  • classification
Template matching

针对一个未知物体的识别,直觉的做法就是:将其与已知的数据库中数据做对比。做对比的方法包括:

  • 欧式距离

d = ∥ F − G ∥ = ∑ y = 1 q ∑ x = 1 p [ f ( x , y ) − g ( x , y ) ] 2 d = \| F - G \| = \sum_{y=1}^{q} \sum_{x=1}^{p} \left[ f(x, y) - g(x, y) \right]^2 d=FG=y=1qx=1p[f(x,y)g(x,y)]2

其中: F F F 为待识别图像, G G G 为数据库中的图像, f ( x , y ) f(x, y) f(x,y) g ( x , y ) g(x, y) g(x,y) 为图像像素的灰度值。

存在问题:即使图像很相似,但是亮度和对比度不同,也会导致距离很大。

解决方案:将图像归一化

f n ( x , y ) = f ( x , y ) − μ f σ f f_n(x, y) = \frac{f(x, y) - \mu_f}{\sigma_f} fn(x,y)=σff(x,y)μf

其中: μ f \mu_f μf 为图像的均值, σ f \sigma_f σf 为图像的标准差。

所以欧式距离转化为:

d n = ( f n − g n ) T ( f n − g n ) d_n = (f_n - g_n)^T (f_n - g_n) dn=(fngn)T(fngn)

  • 相关系数

γ = ( f − m f ) T ( g − m g ) ∥ f c ∥ ∥ g c ∥ \gamma = \frac{( \mathbf{f} - m_f )^T ( \mathbf{g} - m_g )}{ \| \mathbf{f}_c \| \| \mathbf{g}_c \| } γ=fc∥∥gc(fmf)T(gmg)

其中: m f m_f mf m g m_g mg 为图像的均值向量, f c \mathbf{f}_c fc g c \mathbf{g}_c gc 为图像的中心化向量。 ∥ f c ∥ \| \mathbf{f}_c \| fc 为模长。

可知: γ \gamma γ 的取值范围为 [ − 1 , 1 ] [-1, 1] [1,1] γ \gamma γ 越大,图像越相似。

本质上是cosine相似度的一种变形。

将图片与已知的图片一一比较,也可以看作是一个分类的过程。因为每个物体包含很多张图片,将图片与物体关联,实际上也是将图片分到这个“物体”类中。

分类方法
  • k nearest neighbor 方法

    • 已知训练样本集合 x 1 , x 2 , . . . , x n {x_1, x_2, ..., x_n} x1,x2,...,xn, 其中每个样本都有标签。测试样本为 x x x
    • 计算 x x x 与每个训练样本的距离,找到距离最小的 k k k 个样本。
    • k k k 个样本中出现次数最多的标签,作为 x x x 的标签。

    存在问题:

    • 如果训练样本集有很多样本,则对比测试样本与每个样本的距离的计算成本很高
    • 对训练样本通常会overfitting, 泛化性不好

    解决方案1:

    • 不与每个样本对比距离,仅与分类中心做对比
      G k = arg ⁡ min ⁡ j ∥ f − μ j ∥ { G_k = \arg\min_j \left\| \mathbf{f} - \mu_j \right\| } Gk=argjminfμj

      其中 μ j \mu_j μj 为第 j j j 类样本的中心, f \mathbf{f} f 为测试样本特征向量

    但仍存在问题:

    在这里插入图片描述

    解决方案2:

    • 归一化距离,马氏距离 Mahalanobis distance
      μ j = 1 q j ∑ x i ∈ ω j x i { \mu_j = \frac{1}{q_j} \sum_{x_i \in \omega_j} x_i } μj=qj1xiωjxi

      Σ j = 1 q j ∑ x i ∈ ω j ( x i − μ j ) ( x i − μ j ) T = 1 q j ∑ x i ∈ ω j x i x i T − μ j μ j T { \Sigma_j = \frac{1}{q_j} \sum_{x_i \in \omega_j} (x_i - \mu_j)(x_i - \mu_j)^T } = \frac{1}{q_j} \sum_{x_i \in \omega_j} x_i x_i^T - \mu_j \mu_j^T Σj=qj1xiωj(xiμj)(xiμj)T=qj1xiωjxixiTμjμjT

      d M a j = ( x − μ j ) T Σ j − 1 ( x − μ j ) { d_{Maj} = ( \mathbf{x} - \mu_j )^T \Sigma_j^{-1} ( \mathbf{x} - \mu_j ) } dMaj=(xμj)TΣj1(xμj)

      如果每一个类别的样本都服从高斯分布,则最小马氏距离分类器是最好的分类器。

    但仍存在问题:
    如果样本存在很多个类别,且每个类别内的数据很少,则会导致协方差矩阵不满秩,无法求逆,计算结果不稳定。

    解决方法:引入类间和类内分布

    • 类内散布矩阵
      S w = 1 q ∑ j = 1 c q j Σ j { S^w = \frac{1}{q} \sum_{j=1}^{c} q_j \Sigma_j } Sw=q1j=1cqjΣj

    • 类间散布矩阵
      S b = 1 q ∑ j = 1 c q j ( μ j − μ ) ( μ j − μ ) T { S^b = \frac{1}{q} \sum_{j=1}^{c} q_j (\mu_j - \mu)(\mu_j - \mu)^T } Sb=q1j=1cqj(μjμ)(μjμ)T

    • 类内和类间散布矩阵
      S t = Σ w + Σ b { S^t = \Sigma^w + \Sigma^b } St=Σw+Σb

    马氏距离主要考虑类内距离,可以用 S w S^w Sw代替协方差矩阵 Σ \Sigma Σ
    d = ( x − μ ) T S w ( x − μ ) { d = (\mathbf{x} - \mu)^T S^w (\mathbf{x} - \mu) } d=(xμ)TSw(xμ)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值