【计算机视觉】图像分类

前言

       在当前的网络时代及信息时代,越来越多图像问题需要解决,当然计算机就起到很重要的作用。图像分类和图像内容分类算法就可以采用一些简单有效的方法和目前一些性能最好的分类器,解决两类和多类问题。在图像分类中,最简单且最常用的一种方法就是KNN(邻近分类法),用于手势识别和目标识别具有很大成就。

目录

(一)K邻近分类法

(1)实现二维的可视化KNN

(2)dense sift原理

(3)实现手势识别

(4)遇到的问题

(二)代码下载



(一)K邻近分类法

     KNN算法就是把要分类的对象(例如一个特征向量)与训练集中已知类标记的所有对象进行对比,并由K近邻对分类对象进行判断为那个类别。这种方法的效果好,但是也有弊端:与K-means聚类算法一样,需要先预定设置K的值,k值的选择会影响分类的性能;此外这种方法要求整个训练集存储起来,如果训练集越大,搜索就越慢,训练集越小,分类结果准确率也越低。对于大的训练集,采取某些装箱形式通常会减少对比的次数,从积极一面看,这种采用何种距离度量方面是没有限制的;实际上对于想达到的结果起到一定的作用,但是并不代表这种算法分类性能很高,它的可行性一般。

(1)实现二维的可视化KNN

步骤1.创建二维示例数据集的代码如下:

# -*- coding: utf-8 -*-
from numpy.random import randn
import pickle
from pylab import *

# create sample data of 2D points
n = 200
# two normal distributions
class_1 = 0.6 * randn(n,2)
class_2 = 1.2 * randn(n,2) + array([5,1])
labels = hstack((ones(n),-ones(n)))
# save with Pickle
#with open('points_normal.pkl', 'w') as f:
with open('points_normal_test.pkl', 'wb') as f:
    pickle.dump(class_1,f)
    pickle.dump(class_2,f)
    pickle.dump(labels,f)
# normal distribution and ring around it
print ("save OK!")
class_1 = 0.6 * randn(n,2)
r = 0.8 * randn(n,1) + 5
angle = 2*pi * randn(n,1)
class_2 = hstack((r*cos(angle),r*sin(angle)))
labels = hstack((ones(n),-ones(n)))
# save with Pickle
#with open('points_ring.pkl', 'w') as f:
with open('points_ring_test.pkl', 'wb') as f:
    pickle.dump(class_1,f)
    pickle.dump(class_2,f)
    pickle.dump(labels,f)
    
print ("save OK!")

   上面的脚本代码将创建两个不同的二维点集,每个点有两类,用Pickle模块保存创建的数据;要注意的是:要用不同的文件名运行脚本两次,例如第一次用代码中的文件名进行保存,第二次将代码中的points_normal_t.pkl和points_ring_pkl分别改为points_normal_test.pkl和points_ring_test.pkl进行保存。这是因为可以得到4个不同的二维的数据集文件,可以讲一个用来训练,另一个用来做测试。

步骤2.用knn算法进行分类

# -*- coding: utf-8 -*-
import pickle
from pylab import *
from PCV.classifiers import knn
from PCV.tools import imtools

pklist=['points_normal.pkl','points_ring.pkl']

figure()

# load 2D points using Pickle
for i, pklfile in enumerate(pklist):
    with open(pklfile, 'rb') as f:
        class_1 = pickle.load(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值