Matlab批量提取图片特征向量
最近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, HogLength+RGBLength);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, HogLength+j) = 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特征提取
%% 请分节运行 避免卡死机 ; 选中节段 ,快捷键 ctrl+enter运行节%%
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 ; %取特征 一行对应一张图全部特征,一列对应一类特征
相关文章:
Matlab批量提取图片特征向量
最近matlab数字图像处理课程需要,对上千张训练集测试集图片进行批量的特征提取,作为 SVM的输入。 所以就有了用matlab来批量提取图像特征向量,并保存,方便后续使用。 批量提取函数: % 函数返回参数% 分类列向量Categ…...
数据库系统原理与实践 笔记 #8
文章目录 数据库系统原理与实践 笔记 #8关系数据库设计(续)规范化(Normalization)范式(Normal Form)第一范式第二范式Boyce-Codd范式(BCNF)将模式分解成BCNFBCNF和保持依赖第三范式 函数依赖理论正则覆盖无关属性无关属性的验证无损分解保持依赖 数据库系统原理与实践 笔记 #8 …...
Ubuntu 和 Windows 文件互传
FTP 服务 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到…...
如何在WPF应用程序中全局捕获异常
在WPF (Windows Presentation Foundation) 应用程序中,你可以使用 AppDomain.CurrentDomain.UnhandledException 事件来全局捕获未处理的异常。这个事件会在应用程序中的任何地方发生未处理的异常时触发。以下是一个简单的例子,演示如何在WPF应用程序中全…...
自定义Matplotlib中的颜色映射(cmap)
要自定义Matplotlib中的颜色映射(cmap),您可以按照以下步骤进行操作: 导入所需的库: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap创建自定义颜色映…...
Ansible的filter
环境 控制节点:Ubuntu 22.04Ansible 2.10.8管理节点:CentOS 8 filter 使用filter可以对数据做操作,比如把JSON数据转换为YAML数据,从URL中解析出hostname,提取字符串的SHA1哈希值,做数学运算,…...
Qt绘制各种图表
绘制柱状图: void MainWindow::iniBarChart() { //柱状图初始化QChart *chart new QChart(); //创建chartchart->setTitle("Barchart演示");chart->setAnimationOptions(QChart::SeriesAnimations);ui->chartViewBar->setChart(chart); //为…...
【科研新手指南4】ChatGPT的prompt技巧 心得
ChatGPT的prompt心得 写在最前面chatgpt咒语1(感觉最好用的竟然是这个,简单方便快捷,不需要多轮对话)chatgpt思维链2(复杂任务更适用,简单任务把他弄复杂了)机理chatgpt完整咒语1(感…...
龙蜥社区联合浪潮信息发布《eBPF技术实践白皮书》(附下载链接)
随着 eBPF 技术的高速发展,eBPF 已成为 Linux 内核顶级子系统,并扩展到内核网络、存储、内存、调度和安全等子模块。这种可编程底座内核框架构建了全系统,是云计算、运维和安全等领域技术创新的基础。 龙蜥社区在 eBPF 领域进行了广泛的实践…...
屏幕截图软件 Snagit mac中文版软件特点
Snagit mac是一款屏幕截图和视频录制软件,它可以帮助用户快速捕捉屏幕上的任何内容,并将其编辑、标注和共享。 Snagit mac软件特点 多种截图模式:支持全屏截图、窗口截图、区域截图、延时截图等多种截图模式,满足不同用户的需求。…...
四、Ribbon负载均衡
目录 一、负载均衡流程 1、我通过浏览器直接访问userservice/user/1,无法访问,说明是负载均衡做了相应的处理 2、我们来看一下代码中负载均衡的流程是怎样的 3、图像流程 二、负载均衡策略 1、修改负载均衡策略 (方式一) &a…...
【Git】第二篇:基本操作(创建本地仓库)
我们知道,git是一个版本控制器,可以帮我们控制管理电脑上所有格式的文档。 而我们需要使用git管理文件的时候,我们必须将这些文件放到git仓库中,只有在git仓库中的文件才可以被我们的git追踪管理 创建本地仓库 创建本地仓库是需…...
vuex——重置vuex数据
需求描述 登出系统时,需将 vuex 中存储的数据,恢复为最初的默认状态。 实现方法 通过 replaceState 方法,将最初的 vuex 的 state 数据作为参数传入即可 完整代码范例 src\store\index.js import Vue from "vue"; import Vuex fro…...
WebSphere Liberty 8.5.5.9 (三)
WebSphere Liberty 8.5.5.9 将资源先下载,后期本地安装 下载 passwordUtilities-1.0 D:\wlp-webProfile7-java8-8.5.5.9\wlp\bin>installUtility find password 正在建立与已配置存储库的连接... 此过程可能要花几分钟完成。已成功连接至所有已配置的存储库。…...
如何区分一个项目是react还react native
要区分一个项目是 React 还是 React Native,你可以关注以下几个方面: 项目目录结构:React 和 React Native 项目通常具有不同的目录结构。React 项目中的源代码通常位于一个名为 "src" 或 "app" 的文件夹中,包…...
网易有道开源语音合成引擎“易魔声”
概述 11 月 10 日,网易有道正式上线“易魔声”开源语音合成(TTS)引擎,所有用户可免费在开源社区 GitHub 进行下载使用,通过其提供的 web 界面及批量生成结果的脚本接口,轻松实现音色的情感合成与应用。 据…...
[量子计算与量子信息] 2.1 线性代数
2.1 线性代数 符号对照表 量子力学中,向量使用 ∣ ψ ⟩ \ket \psi ∣ψ⟩ (ket)来表示,可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ \bra \psi ⟨ψ∣ ,可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示, ∣ 0 ⟩ \…...
【PG】PostgreSQL 目录结构
目录 1 软件安装目录 2 数据文件目录 base/:存储每个数据库的基本数据文件 global/:包含了全局性质的系统表空间文件 pg_tblspc/:包含了表空间的符号链接 pg_twophase/:包含了两阶段提交中使用的文件 pg_stat_tmp/ÿ…...
H5游戏源码分享-超级染色体小游戏
H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…...
NOIP 2017 宝藏----Java题解
目录 NOIP 2017 宝藏 题目描述 输入描述: 输出描述: 输入 输出 说明 输入 输出 说明 备注: 代码实现: NOIP 2017 宝藏 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO For…...
Hirschmann RS20-0800M4M4SDAE工业以太网交换机
Hirschmann RS20-0800M4M4SDAE 工业以太网交换机产品特点:端口配置:共8个端口,含6个RJ45电口和2个ST光纤接口。端口速率:所有端口均为100Mbps快速以太网。光纤类型:2个光纤端口为多模、ST接头。管理类型:二…...
别再乱算相似度了!用Python实战二元变量聚类:从Jaccard系数到病人分组
医疗数据分析实战:用Python实现基于Jaccard系数的病人症状聚类在医疗数据分析领域,如何从海量病人症状数据中发现潜在规律一直是临床研究的难点。传统方法往往依赖医生经验或简单统计,而现代数据挖掘技术为我们提供了更科学的解决方案。本文将…...
2026论文降AI怎么挑?亲测好用工具附免费降AI指南
“您的论文AIGC率为42%,超出学校30%的合格线,请修改后重新提交。”赶毕业论文的同学这段时间估计没少收到这样的提醒。2026年知网、万方、维普等主流平台的AI检测算法持续迭代,把AI生成内容改到符合学校要求,已经成了毕业生的刚需…...
别急着扔!12年老ThinkPad X230升级SSD和内存后,Win10流畅得像新电脑
12年老ThinkPad X230重生指南:极简升级打造流畅办公利器每次打开抽屉看到那台积灰的ThinkPad X230,总有种说不出的情感。这款2012年问世的经典商务本,曾陪伴无数人度过加班到凌晨的夜晚。如今性能确实有些力不从心,但直接丢弃又觉…...
Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例
Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例 想象一下,医生通过CT扫描将人体内部结构分层呈现,而GIS中的"渔网"工具同样能对城市路网进行"切片式"分析。这种空间离散化技术&…...
Codex使用API Key授权无法使用插件?
小伙伴们,大家好,我是小溪,见字如面。对于没有ChatGPT账号的小伙伴来说,虽然可以通过API Key授权的方式使用Codex桌面端,但是会有一些限制。比如无法使用插件功能,无法使用Codex移动端进行远程控制等。为了…...
ubuntu环境下为python项目配置taotoken多模型api密钥与端点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Ubuntu环境下为Python项目配置Taotoken多模型API密钥与端点 1. 准备工作 在Ubuntu系统上为Python项目接入Taotoken,首…...
Lindy多步骤任务自动化落地全图谱(企业级架构师压箱底实践)
更多请点击: https://codechina.net 第一章:Lindy多步骤任务自动化落地全图谱(企业级架构师压箱底实践) Lindy效应在自动化系统设计中揭示了一个关键洞察:越久经考验的实践,其未来预期寿命越长。Lindy多步…...
Elsevier-Tracker:5分钟打造您的学术论文审稿进度监控系统
Elsevier-Tracker:5分钟打造您的学术论文审稿进度监控系统 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 在科研工作者的日常中,论文审稿进度追踪常常成为消耗时间与精力的隐形负担。每天反…...
多智能体协作系统:2026年企业级AI应用的核心架构范式
引言:AI Agent从单兵作战到团队协作的范式跃迁 2026年,人工智能领域正在经历一场深刻的架构变革。回想2024年,当ChatGPT、Claude等大语言模型横空出世时,我们惊叹于单个AI模型的强大能力。然而,随着企业级应用的深入,单一AI Agent的局限性日益凸显:它无法同时处理多领域…...
