图像识别概念

图像识别是识别图像中物体的类别(属于哪一个类)的任务。图像识别通常被称为Image Classification、Categorization、Clustering。
卷积神经网络(CNN)出现之前,一般用HOG、SIFT、SURF等方法先从图像中提取特征,然后通过特征确定物体的类别。

利用图像直方图实现简单的图像识别任务

算法流程:

  1. 将训练集中的图像进行减色处理(图像色彩量化:图像色彩量化详解)。RGB每个分量都只取4个值。
  2. 创建训练集减色图像的直方图。RGB图像的直方图中,B=[1,4],G=[5,8]、R=[9,12],此时bin=12,但是我还需要保留每张训练图所属的类别,所以,bin=13。数据这样存储:database = np.zeros( (训练数据数,13),dtype=np.int )。所有训练数据的柱状图如下:

    database具有如下的形状和内容(每一行最后一列是图像所属的类别):
  3. 将测试集图像进行色彩量化,计算测试集图像的直方图与训练集中每个直方图的差,将差称作特征向量。
  4. 直方图差异总和最小的训练集中图像的类别就是我们预测的待测图像的类别。换句话说,待测图像的类别与近色图像一致。

实验代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
from glob import glob# 色彩量化
def dic_color(img):img //= 63img = img * 64 + 32return img# 创建 Database(db)
def get_DB():# get training image pathtrain = glob("../dataset/train/*")train.sort()# prepare databasedb = np.zeros((len(train), 13), dtype=np.int32)# prepare path databasepdb = []# each imagefor i, path in enumerate(train):# read imageimg = dic_color(cv2.imread(path))#get histogramfor j in range(4):db[i, j] = len(np.where(img[..., 0] == (64 * j + 32))[0])db[i, j+4] = len(np.where(img[..., 1] == (64 * j + 32))[0])db[i, j+8] = len(np.where(img[..., 2] == (64 * j + 32))[0])# get classif 'akahara' in path:cls = 0elif 'madara' in path:cls = 1# store class labeldb[i, -1] = cls# store image pathpdb.append(path)return db, pdb# 判断测试集中图像类别
def test_DB(db, pdb):# get test image pathtest = glob("../dataset/test/*")test.sort()accurate_N = 0.# each imagefor path in test:# read imageimg = dic_color(cv2.imread(path))# get histogramhist = np.zeros(12, dtype=np.int32)for j in range(4):hist[j] = len(np.where(img[..., 0] == (64 * j + 32))[0])hist[j+4] = len(np.where(img[..., 1] == (64 * j + 32))[0])hist[j+8] = len(np.where(img[..., 2] == (64 * j + 32))[0])# get histogram differencedifs = np.abs(db[:, :12] - hist)# axis=1表示以行为单位,求每一行的和difs = np.sum(difs, axis=1)# get argmin of differencepred_i = np.argmin(difs)# get prediction labelpred = db[pred_i, -1]if pred == 0:pred_label = "akahara"elif pred == 1:pred_label = "madara"gt = "akahara" if "akahara" in path else "madara"if gt == pred_label:accurate_N += 1print(path, "is similar >>", pdb[pred_i], " Pred >>", pred_label)accuracy = accurate_N / len(test)print("Accuracy >>", accuracy, "({}/{})".format(int(accurate_N), len(test)))if __name__ == '__main__':db, pdb = get_DB()test_DB(db, pdb)

实验输出(包含识别出的图像的类别和识别准确率):

图像识别讲解 以一个简单的图像识别任务为例相关推荐

  1. Android适配器以及作用,Android Studio:自定义Adapter(适配器)的一些通俗易懂的理解(以一个简单的聊天界面为例)...

    本文是博主对Adapter(适配器)的一些理解,为了加深对Adapter的理解以及记录自己的阶段学习而写,同时也适合初学者阅读,参考本条博客的逻辑进行学习. 第一  先来看看实现这个程序需要需要创建哪 ...

  2. 跟我一起学Adams虚拟样机:(一) 运动学仿真基操,以一个简单的曲柄摇杆机构为例

    曲柄摇杆机构运动仿真视频 本教程基于Adams 2020 下载地址及安装教程 目录 1. 启动Adams并设置工作环境 1.1. 启动Adams View 1.2. 新建模型 1.3. 设置工作环境 ...

  3. 【自动化测试】搭建一个简单从Excel读取用例内容并输出结果的脚本

    # -*- coding:utf-8 -*- from selenium import webdriver import xlrd import xlwt from xlutils.copy impo ...

  4. php 跳转qq群代码_一个简单QQ群聊案例代码解析(PHP实现)

    问题: 使用面向对象编程的方式实现以下业务逻辑: 1. 张三使用账号a,密码b登录了qq 2. 显示出张三最后的登录的时间 3. 张三查看了 1小时内的行政部门群的信息(这个群里有张三,李四,王五,其 ...

  5. msp430 abs函数 c语言,实现一个简单的msp430软件

    以做一个简单的采集设备为例.假定已经准备好硬件设备,现在我们开始在MCU上搭建运行的软件. 使用的软件为iar ew430 5.10b,仿真器是杭州利尔达的USB型MSP430仿真器LSD-FET43 ...

  6. 利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

  7. 如何使用TensorFlow构建简单的图像识别系统(第2部分)

    by Wolfgang Beyer 沃尔夫冈·拜尔(Wolfgang Beyer) 如何使用TensorFlow构建简单的图像识别系统(第2部分) (How to Build a Simple Ima ...

  8. python实现图像识别_利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

  9. 使用ImageMagick和Tesseract进行简单数字图像识别

    使用ImageMagick和Tesseract进行简单数字图像识别 由于直接使用 tesseract 进行识别,识别率很低, ImageMagick 安装.配置及使用:  平台:winXP  1. 安 ...

最新文章

  1. 基因组行业重大事件介绍
  2. 为什么程序员都不写文档?
  3. mysql创建删除触发器的时候_mysql触发器简介及如何创建和删除触发器
  4. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
  5. 打开适配器并捕获数据包
  6. php 5.3.9 漏洞,PHP-5.3.9远程执行任意代码漏洞(CVE-2012-0830) 详解
  7. c - 数据结构实验之图论三:判断可达性_IT世界的诡异事件,2020为何算法和数据结构面试题会如此火爆?...
  8. virtuoso根据原理图绘制版图并联接_Cadence教程2——反相器原理图仿真以及版图绘制...
  9. JAVA基础知识总结2(语法基础)
  10. uniapp H5页面 点击图片放大预览
  11. (6.0系统)安卓神器XPOSED框架无需ROOT安装指南
  12. UserWarning: Glyph 28857 (\N{CJK UNIFIED IDEOGRAPH-70B9}) missing from current font. FigureCanvasA
  13. HWADDR配置错误导致network重启失败处理
  14. 2020年度总结和一些想法
  15. ajax angular点击事件_angularjs和ajax的结合使用 (三)
  16. 1 色相、饱和度、明度定义
  17. k8s探针检测php,k8s实践11:kubernetes监测探针简单测试
  18. mpvue——基于vue的小程序开发框架
  19. Qt Speech来到Qt 6.4
  20. ip解析 java_JAVA解析纯真IP地址库

热门文章

  1. python在哪里写代码-python的代码在哪编写
  2. python入门经典100例-【python】编程语言入门经典100例--22
  3. 全球硬科技开发者大会(成都)开幕 蓝光发展等超300名开发者「乘风」数字升级...
  4. 对于谷歌应用传统的自动语音识别(ASR)系统的解析
  5. mongooseDB数据库添加账号
  6. Node.js异步编程~超级详细哦
  7. elementui中给input框赋值成功后input框不能进行编辑问题
  8. 【linux笔记】常用命令(2)目录
  9. 我的开源项目:H.264码流分析器
  10. openfiledialog选择文件会占用文件_铁皮文件柜的尺寸规格如何选择?选购花都文件柜要注意的问题...