使用R语言进行图像分类

本文使用R语言,应用SVM(高斯核)[3]算法对JPEG图片进行二类分。
SVM使用e1071包, 图像处理用imager包[1]。
数据使用的是Caltech 101中的Faces和BACKGROUND_Google两类数据[2]。

文章最后包含了实验的源代码。

这篇blog还有个pdf版本,可在 http://download.csdn.net/detail/leeshuheng/9625830 中下载。

1 步骤
代码执行五个步骤。

• 读取图片
• 向量化
• 合并图片
• 训练模型
• 对测试集分类

2 程序执行时生成的SVM模型的部分信息
采样不同,结果可能不同。

summary(fit):

SVM-Type:  C-classification
    SVM-Kernel:  radial
    cost:  1
    gamma:  0.0009765625
    Number of Support Vectors:  349

3 代码
最后是R语言代码。采样不同,结果可能不同。

### 2016年 09月 07日 星期三 16:13:34 CST #############
## author: 李小丹

setwd("~/repos/project/R-src/")

library(imager)
library(e1071)

read.imags <- function(path = "./") {
    fns <- list.files(path)
    res <- NULL
    for(i in fns) {
        fn <- paste(path, i, sep = "")
        im <- load.image(fn)
        im <- resize(im, size_x = 32L, size_y = 32L,
                     size_z = 1L, size_c = 1L)
        im <- as.array(im)
        im <- matrix(im, 1, mult(dim(im)))
        ifelse(!is.null(res),
               res <- rbind(res, im), res <- im)
    }
    return(res)
}

a.images <- read.imags("./101_ObjectCategories/Faces/")
b.images <- read.imags("./101_ObjectCategories/BACKGROUND_Google/")

(sam.count <- ceiling(min(nrow(a.images) * 0.8, nrow(b.images) * 0.8)))
# [1] 348

train.a <- sample(1:nrow(a.images), sam.count, replace = F)
train.b <- sample(1:nrow(b.images), sam.count, replace = F)

data.imags <- rbind(a.images[train.a,], b.images[train.b,])

fit <- svm(data.imags, c(rep(1, length(train.a)), rep(0, length(train.b))),
           probablity = T, cross = 3,
           type = "C-classification", method = "SVM")

a.pred <- predict(fit, a.images[-train.a,])
a.pred <- as.numeric(as.character(a.pred))
prop.table(table(a.pred))
# a.pred
#     0          1
#     0.04597701 0.95402299

b.pred <- predict(fit, b.images[-train.b,])
b.pred <- as.numeric(as.character(b.pred))
prop.table(table(b.pred))
# b.pred
#     0          1
#     0.94166667 0.05833333

References
[1] Simon Barthelme and Antoine Cecchi. “imager: Image Processing Library Based on ’CImg’”.
In: (Sept. 5, 2016). URL: https://cran.r- project.org/web/packages/imager/index.html.

[2] Fei-Fei Li, Marco Andreetto, and Marc ’Aurelio Ranzato. altech 101. 2003.
URL: http://www.vision.caltech.edu/Image_Datasets/Caltech101/ (visited on 09/08/2016).

[3] David Meyer et al. “e1071: Misc Functions of the Department of Statistics, Probability Theory
Group (Formerly: E1071), TU Wien”. In: (Aug. 5, 2015).

URL: https://cran.r-project.org/web/packages/e1071/index.html.

使用R语言进行图像分类相关推荐

  1. 使用r语言做garch模型_使用GARCH估计货币波动率

    使用r语言做garch模型 Asset prices have a high degree of stochastic trends inherent in the time series. In o ...

  2. 《R语言数据挖掘》读书笔记:五、聚类分析

    第五章.聚类分析 0. 聚类算法的系统性介绍 聚类被定义为一个数据集的无监督分类.聚类算法的目的是使用距离或者概率度量对给定数据集(点集或者对象的集合)划分成数据实例或者对象(点)的组.根据距离或相似 ...

  3. 【2022新书】深度学习R语言实战,第二版

    来源:专知 本文为书籍介绍,建议阅读5分钟使用R和强大的Keras库从头开始进行深度学习! R深度学习,第二版 使用R和强大的Keras库从头开始进行深度学习! 在R深度学习第二版中,您将学习: 从基 ...

  4. python语言入门r_小结:jieba分词的Python与R语言基础用法介绍

    当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 人们说话不是一个词一个词崩出来的,文章也就由句子组成.要想让机器识别美文,体会中华名族汉语的博大精深,不是不可能.但是,首先需要将其转化成其 ...

  5. r语言 断轴 画图_R语言基础画图/绘图/作图

    R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介绍. 0 结构 每种图形构成 ...

  6. r语言remarkdown展示图_使用R语言包circlize可视化展示blast双序列比对结果

    circlize这个包还挺强大的,R语言里用来画圈图还挺方便的. 今天这篇文章记录用circlize这个包画圈图展示blast双序列比对结果的代码 植物线粒体基因组类的文章通常会分析细胞器基因组间基因 ...

  7. 用R语言做词频统计_R语言 | 词频统计

    Python网络爬虫与文本数据分析 本章内容 导入停用词 读数据,分词 剔除停用词 导入停用词表 library(dplyr) ## [1] "?" "." & ...

  8. 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.1 引言...

    本节书摘来自华章计算机<数据科学R语言实践:面向计算推理与问题求解的案例研究法>一书中的第2章,第2.1节,作者:[美] 德博拉·诺兰(Deborah Nolan) 邓肯·坦普·朗(Dun ...

  9. 手把手 | 教你爬下100部电影数据:R语言网页爬取入门指南

    前言 网页上的数据和信息正在呈指数级增长.如今我们都使用谷歌作为知识的首要来源--无论是寻找对某地的评论还是了解新的术语.所有这些信息都已经可以从网上轻而易举地获得. 网络中可用数据的增多为数据科学家 ...

最新文章

  1. TOJ--3456--数学题
  2. STL list源码解析
  3. zencart 如何修改在线人数和订单编号
  4. bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
  5. 【Android界面实现】Drawable Animation 使用介绍
  6. java 参数 python_java可变参数
  7. Hao Yin Jian 寒假第一周
  8. python爬虫下载模块_python爬虫模块之HTML下载模块
  9. ZeroMQ API简介
  10. 计算机桌面保护程序,屏幕保护程序软件
  11. mysql yum 安装
  12. 摄像头驱动CAMERA SENSOR调试流程
  13. CVT变速器中壳体吊机设计
  14. arrays.sort()
  15. matlab 双边沿滤波,一种基于数字PWM发生器的左增长双边沿UPWM信号频谱估计方法与流程...
  16. java 证书查看工具_程序员必备工具 Java证书工具Keytool的使用
  17. 计算机控制总线应用,基金会现场总线FF技术在焦炉计算机控制系统的应用
  18. boost的libboost_system问题 undefined reference to `boost::system::generic_categor
  19. Linux网络基础4(SSH远程链接)
  20. CSDN的评论区怎么添加超链接?

热门文章

  1. opencv4 java 验证码噪点 8邻域降噪
  2. IP地址相关的基础知识以及IP相关术语的解释
  3. 全变分 tv 图像matlab程序,全变分(TV)模型原理与C++实现
  4. 鄂州机场投运:提升湖北货运枢纽地位 顺丰王卫已布局多年
  5. 《J2SE 回炉再造04》-------溺水狗
  6. ps2018年日历素材
  7. 有什么好用的监控员工电脑操作的软件?
  8. 机器学习 线性回归分析和预测棒球比赛数据
  9. 科氏力质量流量计的工作原理和典型结构特性
  10. 计算机导论课程论文标题大全,《计算机导论》课程论文.doc