训练样本集的制作

在进行机器学习时,根据处理问题的不同,所需要的训练样本不同,并不是所有的训练样本都可以在网络上搜索到,所有,有时需要根据自己要解决的问题的实际需要,制作自己的样本数据集。

matlab是半自动制作样本训练集的一个较强大的工具。

1运行matlab自带的trainingImageLabeler函数

1.1运行trainingImageLabeler

程序会弹出training image labeler操作框

1.2 利用add images打开要截图的图像

1.3点击ROI开始框图,同时可以截取多个ROI区域

1.4 结束截图,保存截图结果

当需要结束截图时,点击Export ROIs,此时会弹出Export variable name,输入变量名称,如poritiveInstances,并点击OK。

1.5 得到结构体positiveInstances

结构体中包含两个元素,分别为imageFilename和objectBoundingBoxes

imageFilename存储的是截图对象的名字

ObjectBoundingBoxes存放的是截图所对应的ROI的矩形框的左上角坐标和长宽

(即第i行表示第i个ROI的矩形框的左上角坐标和该矩形框的长宽)

2 从截取的原始图像中提取每个ROI对应的子图,从而得到样本子图(运行SamplesMaker.m函数)

2.1 读取该组截图的原始图像

2.2 将读入的非灰度图像转化为灰度图像

2.3 得到该组截图的所有ROI参数

2.4得到该组截图的所有ROI对应的子图,存储在元胞中

2.5 如果需要对截取的子图进行可视化,再将得到的子图利用imwrite函数保存

下面是制作样本的完整程序,包括三个m文件,运行时依次实现

第一个运行的程序(SamplesMaker)

%% 改程序实现对第一幅子图的截图

%% 调用matlab的样本制作函数(在运行该函数之前运行)
% trainingImageLabeler

%% 读取改组截图所对应的原始图像
% 截图的原始图像的名字(路径已经加入了)
imgName = positiveInstances.imageFilename;
% read the image
imgInput= imread(imgName); %读入图像
% convert to the gray image
if ndims(imgInput)==3
    imgInput = rgb2gray(imgInput);
end

%% 得到改组截图的所有ROI的参数rectPosition(每一行元素为每个ROI的左上角坐标和该矩形的长宽)
rectPosition=positiveInstances.objectBoundingBoxes;
NumROI=size(rectPosition,1);%ROI个数
img=cell(NumROI,1);%存放每个image子图的元胞
for k=1:NumROI
    %左上角(x0,y0),x方向长度xl,y方向长度yl
    x0=fix(rectPosition(k,1));y0=fix(rectPosition(k,2));xl=rectPosition(k,3);yl=rectPosition(k,4);
    % 第k个ROI所对应子图
    img{k}=imgInput(y0:y0+yl-1,x0:x0+xl-1);
    % 保存第k个ROI所对应子图
    imwrite(img{k},[num2str(k),‘.jpg‘],‘jpg‘);
end

%% 将该目标图像的所有ROI信息保存在元胞rectPositionCell的第k个元胞中(k表示该目标图像是第几个图像)
numImg=1;%本程序的目标图像即为第一个图像
sampleData.rectPositionCell{numImg}=rectPosition;
%% 将该目标提取到的所有ROI对应的子图保存在元胞imgCell的第k个元胞中(k表示该目标图像是第几个图像)
sampleData.imgCell{numImg}=img;
save(‘sampleData.mat‘,‘sampleData‘)

第二个运行的程序(SamplesMaker_Add)

%% 该程序是对SamplesMaker的补充
%{
SamplesMaker实现的是单一图像的子图截取,现在需要对另外一幅对象进行子图截取,并需要将截图结果
与上一幅截图结果保存在一起,所以,需要对程序进行改进
对于第二幅以后的子图截图,应该利用本程序
%}

%% 调用matlab的样本制作函数(在运行该函数之前运行)
% trainingImageLabeler

%% 读取该组截图所对应的原始图像
% 截图的原始图像的名字(路径已经加入了)
imgName = positiveInstances.imageFilename;
% read the image
imgInput= imread(imgName); %读入图像
% convert to the gray image
if ndims(imgInput)==3
    imgInput = rgb2gray(imgInput);
end

%% 载入以前的截图数据
load(‘sampleData.mat‘);
numImg_before=size(sampleData.rectPositionCell,2);
numImg=numImg_before+1;%该次截图对应的图像编号
% 该次截图之前已具有的ROI个数
numRO_before=0;
for i=1:numImg_before
    numRO_before=numRO_before+size(sampleData.rectPositionCell{i},1);
end

%% 提取该次截图的所有子图,并保存所有子图
% 当前截图得到的ROI个数
rectPosition=positiveInstances.objectBoundingBoxes;
numROI=size(rectPosition,1);
for k=1:numROI
    %左上角(x0,y0),x方向长度xl,y方向长度yl
    x0=fix(rectPosition(k,1));y0=fix(rectPosition(k,2));xl=rectPosition(k,3);yl=rectPosition(k,4);
    % 第k个ROI所对应子图
    img{k}=imgInput(y0:y0+yl-1,x0:x0+xl-1);
    % 保存第k个ROI所对应子图
    imwrite(img{k},[num2str(numRO_before+k),‘.jpg‘],‘jpg‘);
end
%% 将本次的ROI数据保存在元胞rectPositionCell中
sampleData.rectPositionCell{numImg}=positiveInstances.objectBoundingBoxes;
sampleData.imgCell{numImg}=img;
save(‘sampleData.mat‘,‘sampleData‘)

第三个运行的程序(SamplesMaker_All)

%% 本程序将所有截取的img整合为一个数据组imgData(元胞,每一个元胞存放一个图像)

%% 载入以前的截图数据
load(‘sampleData.mat‘);
% 总子样本截取的源图像个数
numImg=size(sampleData.rectPositionCell,2);
% 总采样图像个数
numSamples=0;
for i=1:numImg
    % 第i个截图源图像包含的采样子图个数
    n=size(sampleData.rectPositionCell{i},1);
    % 保存第第i个截图源图像包含的采样子图
    for k=1:n
        imgData(numSamples+k)=sampleData.imgCell{i}(k,1);
    end
    % 总采样图像个数
    numSamples=numSamples+n;
end
imgLabels=ones(numSamples,1);

save(‘imgData.mat‘,‘imgData‘,‘imgLabels‘);

  

最后,所有截取的样本图像保存在元胞imgData中,标签保存在imgLabels中

在进行样本子图提取后,接下来,需要对所有的样本子图进行统一大小

可以按照如下代码进行

%% 将图像统一大小
clc
clear
close all

%% 导入样本数据
load(‘imgData.mat‘);
imgData_sizeChange=cell(size(imgData));
for k=1:numel(imgData)
    imgData_sizeChange{k}=imresize(imgData{k},[36,36]);%指出将图像统一为多大
    imwrite(imgData_sizeChange{k},[num2str(k),‘.jpg‘],‘jpg‘);
end
save(‘imgData_sizeChange.mat‘,‘imgData_sizeChange‘);

  

时间: 2024-10-09 17:43:19

训练样本集的制作的相关文章

[ML] 点云训练数据集的制作

1.使用CloudCompare进行类别分割 (1)定义类别文件xml Classification:ground,wall,ceiling,bed,desk, --ground:文件1,文件2 --wall:文件1,文件2 (2)计算特征 读取每个类别,文件列表,计算列表中每个文件的点云特征. 组织成一个新的点云文件保存. 原文地址:https://www.cnblogs.com/yhlx125/p/10107427.html

caffe初步实践---------使用训练好的模型完成语义分割任务

caffe刚刚安装配置结束,乘热打铁! (一)环境准备 前面我有两篇文章写到caffe的搭建,第一篇cpu only ,第二篇是在服务器上搭建的,其中第二篇因为硬件环境更佳我们的步骤稍显复杂.其实,第二篇也仅仅是caffe的初步搭建完成,还没有编译python接口,那么下面我们一起搞定吧! 首先请读者再回过头去看我的<Ubuntu16.04安装配置Caffe>( http://www.cnblogs.com/xuanxufeng/p/6150593.html  ) 在这篇博文的结尾,我们再增加

Hu矩SVM训练及检测-----OpenCV

关键词:Hu矩,SVM,OpenCV 在图像中进行目标物识别,涉及到特定区域内是否存在目标物,SVM可在样本量较少情况下对正负样本(图片中前景背景)做出良好区分,图片基本特征包括诸如HOG.LBP.HAAR等,在具体进行物体检测时考虑结合待检测物特点利用或设计新特征进行训练并分类.本文以几何不变矩为例说明OpenCV中SVM分类器的一般使用过程,下面依次简述Hu矩函数.SVM参数设置及实例演示. 1.Hu求解 double M[7];//Hu矩输出 Moments mo; //矩变量 src=i

stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(training instance),每个训练实例是一个400维特征的列向量(20*20 pixel image).用 X 矩阵表示整个训练集,则 X 是一个 5000*400 (5000行 400列)的矩阵 另外,还有一个5000*1的列向量 y ,用来标记训练数据集的结果.比如,第一个训练实例对应的输出

tesseract 字体训练资料篇

tesseract 字体训练资料篇 1.制作.box档案文件. tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] -l yournewlanguage batch.nochop makebox 2.开始培训 tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] box.train 或 tesseract [lang].[fontn

OpenCV的HOG+SVM训练程序注意事项

行人训练:http://www.tuicool.com/articles/MvYfui 字符识别:http://www.haogongju.net/art/2328003 用OpenCV使用HOG特征进行SVM算法训练的大概流程是 1)设置训练样本集 需要两组数据,一组是数据的类别,一组是数据的向量信息. 2)设置SVM参数,参考<机器模式->libSVM之参数说明> 注意必须使用线性SVM进行训练,因为检测函数只支持线性检测!!! 3)使用HOGDescriptor计算hog特征 4)

第一章:机器学习基础

第一部分:分类 本书前两部分主要探讨监督学习(supervisedieaming).在监督学习的过程中,我们只需要给定输入样本集,机器就可以从中推演出指定目标变量的可能结果.监督学习相对比较简单,机器只需从输入数据中预测合适的模型,并从中计算出目标变量的结果.      监督学习一般使用两种类型的目标变量:标称型和数值型.标称型目标变量的结果只在有限目标集中取值,如真与假.动物分类集合{爬行类.鱼类.哺乳类.两栖类.植物.真菌};数值型目标变量则可以从无限的数值集合中取值,如0.100.42.0

机器学习10大经典算法

1.C4.5 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值.决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出. 从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决策树. 决策树学习也是数据挖掘中一个普通的方法.在这里,每个决策树都表述了一种树型结构,他由他的分支来对该类型的对象依靠属性进行分类.每个决

经典的十个机器学习算法

1.C4.5 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的 属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值.决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输 出. 从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决策树. 决策树学习也是数据挖掘中一个普通的方法.在这里,每个决策树都表述了一种树型结构,他由他的分支来对该类型的对象依靠属性进行分类.每