西安有什么旅游景点,推广优化网站排名教程,湖南人文科技学院怎么样,做互联网网站赚钱吗最近matlab数字图像处理课程需要#xff0c;对上千张训练集测试集图片进行批量的特征提取#xff0c;作为 SVM的输入。
所以就有了用matlab来批量提取图像特征向量#xff0c;并保存#xff0c;方便后续使用。
批量提取函数#xff1a; % 函数返回参数% 分类列向量Categ…最近matlab数字图像处理课程需要对上千张训练集测试集图片进行批量的特征提取作为 SVM的输入。
所以就有了用matlab来批量提取图像特征向量并保存方便后续使用。
批量提取函数 % 函数返回参数% 分类列向量Categorys 和 特征向量矩阵Features 也会自动将两个变量保存在 saveMatName 文件内 % 使用示例% 提取 train训练集特征和分类% [Categorys,Features]extractAndSaveFeatures(train.mat, sourceFolderPath, saveMatPath)% load(train.mat, -mat);% p_Trains_Categorys Categorys ; %取分类 1列向量 % p_Trains_Features Features ; %取特征 一行对应一张图全部特征一列对应一类特征% 提取 test测试集特征和分类% [Categorys,Features]extractAndSaveFeatures(test.mat, sourceFolderPath, saveMatPath)% load(test.mat, -mat);% p_Test_Categorys Categorys ; %取分类 1列向量 % p_Test_Features Features ; %取特征 一行对应一张图全部特征一列对应一类特征function [ Categorys, Features ]extractAndSaveFeatures(saveMatName, sourceFolderPath, saveMatPath)addRootSonDir( ); % 确保依赖函数 已经添加到目录if nargin 3 saveMatPath ; end %应该是存放在工作区目录下% 函数输入参数% saveMatName % 保存的最后结果文件名 mat类型文件名如 train.mat% sourceFolderPath % 原始文件路径 绝对路径 如 J:/test% savePath % 保存mat文件变量路径 绝对路径 % 函数返回参数% 分类列向量Categorys 和 特征向量矩阵Features 也会自动将两个变量保存在 saveMatName 文件内%% 参数设置sizeA 96; sizeB 96; % 每一张图都为这么大统一处理 长宽调整为a*b %% 处理开始获取全部文件列表fileList dir(fullfile(sourceFolderPath, *.png));% 获取文件夹中所有文件的列表 %% 先单张读取确定特征长度 先单张读取确定特征长度 先单张读取确定特征长度 fileName fileList(1).name;[~, name, ~] fileparts(fileName);path fullfile(sourceFolderPath, fileName);img imread(path); img imresize(img, [sizeA, sizeB]);HogFeatures extractHOGFeatures(img); %执行HOG特征提取 确保批量提取和这里一致RGBFeatures GetColorHist(img); %执行RBG特征提取HogLength size(HogFeatures, 2); %下面用到 这张图片特征向量长度 作为每个张的长度RGBLength size(RGBFeatures, 2);fprintf(提取%s开始\n,saveMatName);fprintf( 1.保存文件:%s\n,fullfile(saveMatPath, saveMatName));fprintf( 2.提取文件的源目录:%s\n,sourceFolderPath);fprintf( 3.批量处理图片的大小:长*宽 %d × %d\n, sizeA, sizeB);fprintf( 4.每张图特征向量的长度: Hog:%d RGB:%d\n, HogLength, RGBLength);%% 批量提取 批量提取 批量提取 批量提取 批量提取 批量提取 批量提取% 初始化存储数据的向量矩阵fileNums length(fileList);Categorys zeros(fileNums, 1);Features zeros(fileNums, HogLengthRGBLength);dispStr sprintf(进度:%6d/%6d, 0, 0);
clearStr [repmat(\b, 1, numel(dispStr)), %s];
fprintf(dispStr);for i 1:fileNumsif mod(i, 150) 0fprintf(clearStr);fprintf(进度:%6d/%6d, i, fileNums);endfileName fileList(i).name;[~, name, ~] fileparts(fileName);NameFirts_Part strsplit(name, _);%切割出文件名第一段数字作为分类编号Categorys(i, 1) str2double(NameFirts_Part{1});% 收集分类 本张图片img imread(fullfile(sourceFolderPath, fileName));img imresize(img, [sizeA, sizeB]); % 读取图片并调整大小为512x512HogFeatures extractHOGFeatures(img); % 执行HOG特征提取RGBFeatures GetColorHist(img); % 执行RBG特征提取 for j 1:HogLength % 收集HOG特征向量Features(i, j) HogFeatures(:, j);%添加endfor j 1:RGBLength % 收集RGB特征向量Features(i, HogLengthj) RGBFeatures(:, j);%添加endend % for循环处理每张图 endfprintf(clearStr);fprintf(进度:%6d/%6d, 完成99%%。\n, i, fileNums);save(fullfile(saveMatPath, saveMatName), Features, Categorys);% 保存数据为 文件, 在其他.m文件中直接 加载这个可调用变量fprintf(本轮提取完成,%s保存成功\n------\n,saveMatName);
end% 如果导入的多个文件中存在同名的变量会导致冲突。
% 当使用load函数加载多个文件时如果文件中存在同名的变量
% 后面加载的文件会覆盖前面加载的文件中的同名变量。
%
% 为了避免变量名冲突可以在加载文件时使用不同的变量名来存储不同的变量。
% 例如假设有两个文件data1.mat和data2.mat它们都包含一个名为x的变量。
% 可以使用以下代码来加载这两个文件并将它们分别存储在变量x1和x2中
%
% load(data1.mat, -mat);
% x1 x;
%
% load(data2.mat, -mat);
% x2 x;
%
% 这样变量x1和x2分别存储了data1.mat和data2.mat中的x变量避免了变量名冲突。function color_hist GetColorHist(img)gray_img rgb2gray(img);color_hist imhist(gray_img) / numel(gray_img);color_hist color_hist;
endfunction addRootSonDir(rootDir) % 将输入的根目录子目录 全都自动添加入环境变量if nargin 1 || isempty(rootDir) % 如果参数为空将调用本函数的文件所处目录作为rootDir添加环境变量stack dbstack(-completenames);callingScript stack(2).file ; % 1-脚本函数自身目录2-调用所处目录[scriptDir, ~, ~] fileparts(callingScript);rootDir scriptDir;endsubDirs dir(rootDir);
% disp(rootDir);subDirs subDirs([subDirs.isdir]);subDirPath fullfile(rootDir, subDirs(1).name);addpath(subDirPath);for i 3:length(subDirs) % 从3开始 因为 1 \. ; 2 \..; 3 子目录第一个;subDirPath fullfile(rootDir, subDirs(i).name);addpath(subDirPath);end% disp(---||所有已添加的用户库目录不包含软件默认的系统库目录);
% paths strsplit(path, ;);
% for i 1:length(paths)
% if ~contains(paths{i}, \Program Files\MATLAB\) ~contains(paths{i}, \AppData\Local\Temp\)
% disp(paths{i});
% end
% end
% disp(---||用户库目录管理操作完成。);
end主要提取了
HOG特征色彩特征
有需要的可以直接参考修改修改提取特征向量的函数就可了。还有就是保存文件类型这里直接存为.mat了 也可以自行修改保存为.csv , excel表格之类的格式。 不忍直视写的依托函数。
下面是如何提取特征示例
clc,clear;
%添加库文件目录
% ............ extractAndSaveFeatures.m 用到的特征提取函数
% HogFeatures extractHOGFeatures(img); % 执行HOG特征提取
% RGBFeatures GetColorHist(img); % 执行RBG特征提取
%% 请分节运行 避免卡死机 选中节段 快捷键 ctrlenter运行节%%
saveNameT Train.mat; % 训练集
FolderPathT 源图片文件路径;
savePathT 保存路径;
[P_trainTypes,P_trainFeatures]extractAndSaveFeatures(saveNameT,FolderPathT,savePathT);%%
saveNameE Test.mat; % 测试集
FolderPathE 源图片文件路径;
savePathE 保存路径;
[P_testTypes,P__testFeatures]extractAndSaveFeatures(saveNameE,FolderPathE,savePathE);%% 如何在matlab中调用保存好的.mat 内的变量 % 提取 train训练集特征和分类% [Categorys,Features]extractAndSaveFeatures(train.mat, sourceFolderPath, saveMatPath)% load(train.mat, -mat);% p_Trains_Categorys Categorys ; %取分类 1列向量 % p_Trains_Features Features ; %取特征 一行对应一张图全部特征一列对应一类特征% 提取 test测试集特征和分类% [Categorys,Features]extractAndSaveFeatures(test.mat, sourceFolderPath, saveMatPath)% load(test.mat, -mat);% p_Test_Categorys Categorys ; %取分类 1列向量 % p_Test_Features Features ; %取特征 一行对应一张图全部特征一列对应一类特征