使用matlab对二级子目录中的特定图像进行提取并复制到指定文件夹中

本文介绍了一种使用MATLAB脚本对Caffe框架下的图像数据集进行划分的方法。通过遍历指定文件夹内的所有类别,并从每个类别中选择特定图片移动到测试集文件夹下。该过程涉及到文件路径的操作及目录创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

%% 
clear all; close all; clc;

%%
Dataset = '/home/xn/caffe/examples/facetestquestions/ImageDatainc';
Folder = dir(Dataset);
DST_PATH_t = '/home/xn/caffe/examples/facetestquestions/test';
Folder(1:2) = [];
NumCls = length(Folder);

%% 
for iCls = 1:NumCls
    ClsName = Folder(iCls).name;
    ImgPath = dir(fullfile(Dataset, ClsName,'*.jpg'));
    for iImg = [2 6 13]
        filename=['/home/xn/caffe/examples/facetestquestions/ImageDatainc/',ClsName,'/',ImgPath(iImg).name];
        end_path = [DST_PATH_t,'/',ClsName];
        mkdir(end_path);
        copyfile(filename, end_path); 
    end
end
fclose(fid);

### MATLAB 中遍历方法用于识别和定位铁路接触网绝缘子 在MATLAB中,可以利用`dir`函数来遍历指定目录下的所有子文件夹及其内部文件。对于图像处理任务,特别是针对铁路接触网绝缘子的二值图像进行支架和绝缘子的识别与定位,通常会结合形态学操作、边缘检测以及机器学习算法。 #### 使用 `dir` 函数遍历文件夹结构 为了读取处理存储于不同子文件夹中的二值图像,下面展示了如何通过递归方式访问这些图片: ```matlab function imgPaths = getAllImageFiles(folderPath) % 获取当前文件夹内的所有条目 entries = dir(fullfile(folderPath, '*')); imgPaths = {}; for i = 1:length(entries) entry = entries(i); if entry.isdir && ~strcmp(entry.name, '.') && ~strcmp(entry.name, '..') subfolderImages = getAllImageFiles(fullfile(folderPath, entry.name)); imgPaths = [imgPaths; subfolderImages]; elseif endsWith(entry.name, '.png') || endsWith(entry.name, '.jpg') || ... endsWith(entry.name, '.bmp') || endsWith(entry.name, '.tiff') imgPaths{end+1} = fullfile(folderPath, entry.name); end end end ``` 此代码片段定义了一个名为 `getAllImageFiles` 的函数,该函数接收一个参数——根文件夹路径,返回包含所有符合条件(即特定扩展名)的图像文件绝对路径列表[^1]。 #### 对二值图像执行预处理 一旦获取到所有的图像路径之后,则可依次加载每张图片对之实施必要的预处理措施,比如噪声去除、对比度增强等。这里假设已经得到了一张经过初步清理后的二值化图像 `bwImg`: ```matlab % 去噪和平滑轮廓 se = strel('disk', 2); cleanedBW = imopen(bwImg, se); % 查找连通区域属性 stats = regionprops(cleanedBW, 'Area', 'Centroid'); areas = cat(1, stats.Area); centroids = cat(1, stats.Centroid); % 过滤掉面积较小的对象作为潜在目标候选者 minObjectSize = mean(areas) * 0.8; validIdxs = areas >= minObjectSize; filteredAreas = areas(validIdxs); filteredCenters = centroids(validIdxs, :); ``` 上述脚本实现了对输入二值图像的基本过滤过程,其中运用了开运算(`imopen`)来进行去噪;接着调用了`regionprops`计算各个对象的关键特征,最后仅保留那些满足最小尺寸阈值的目标位置信息。 #### 应用支持向量机(SVM)分类器实现自动标记 当完成了前期准备工作后,下一步就是训练SVM模型以便区分不同的部件类别(如支架 vs 绝缘子)。这一步骤依赖于先前收集好的标注样本集,在实际应用前需先完成这部分工作。以下是简化版的工作流程示意: ```matlab % 加载已有的标签数据 load labeledData.mat X_train y_train % 创建默认的支持向量机分类器实例 classifier = fitcsvm(X_train, y_train); % 测试阶段:预测新来的测试集中各点所属类别 predictedLabels = predict(classifier, testFeatures); ``` 在此基础上,还可以进一步优化特征提取环节,尝试引入更多描述符以提高最终辨识精度。例如HOG(Histogram of Oriented Gradients),LBP(Local Binary Patterns)等高级视觉特性均有助于提升性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值