多相机depth-rgb图组完整性分拣器_MATLAB实现

文件夹中数据规则为,一张BMP格式的RGB图像会有一张同名的raw格式的深度图,一共有三个相机,三个相机的数据为一组,例如:1_0.bmp,1_0.raw,1_1.bmp,1_1.raw,1_2.bmp,1_2.raw为一组相机的数据。现在文件夹中数据存在缺失情况,可能缺失某个相机的raw格式的深度。使用matlab代码筛选文件夹中的数据,将一组数据中存在缺少raw格式的这组数据放在一个文件夹,不存在确实的六个数据统一放在一个文件夹。

分析:

MATLAB 脚本用于把"成组"数据分成两类:

  1. 六个文件齐全(3 个 .bmp + 3 个 .raw);
  2. 缺失任一 .raw 的整组数据(其余文件也一起搬走)。

脚本假设所有文件都在当前工作目录下,并按如下命名规则:
{组号}_{相机号}.bmp 和 {组号}_{相机号}.raw,相机号固定为 0/1/2。

matlab 复制代码
%%
clear; clc;

%% 参数
srcDir   = pwd;              % 原始目录
goodDir  = fullfile(srcDir,'complete');   % 六个文件都有的组
badDir   = fullfile(srcDir,'missing_raw');% 组内任一 raw 缺失

if ~exist(goodDir,'dir'), mkdir(goodDir); end
if ~exist(badDir,'dir'), mkdir(badDir);   end

% 文件列表
files = dir(fullfile(srcDir,'*.*'));
names = {files.name};
isBMP = endsWith(names, '.bmp', 'IgnoreCase', true);
isRAW = endsWith(names, '.raw', 'IgnoreCase', true);

allBMP = names(isBMP);
allRAW = names(isRAW);

% 按组号归类
bmpGroups = regexp(allBMP,'^(\d+)_[012]\.bmp$','tokens','once');
rawGroups = regexp(allRAW,'^(\d+)_[012]\.raw$','tokens','once');

bmpGroups = cellfun(@(c)c{1}, bmpGroups, 'UniformOutput', false);
rawGroups = cellfun(@(c)c{1}, rawGroups, 'UniformOutput', false);

tmp = [bmpGroups, rawGroups];   % 1×(N+M) cell
groups = unique(tmp);           % 去重

%% 扫描每组
for g = groups
    gStr = char(g);
    
    % 该组应有的 6 个文件名
    needFiles = [sprintf('%s_0.bmp',gStr);
                 sprintf('%s_1.bmp',gStr);
                 sprintf('%s_2.bmp',gStr);
                 sprintf('%s_0.raw',gStr);
                 sprintf('%s_1.raw',gStr);
                 sprintf('%s_2.raw',gStr)];
    
    % 实际存在的 6 个文件
    existFlag = ismember(needFiles, names);
    
    % 判断 raw 是否完整
    rawExist  = existFlag(4:6);
    
    if all(rawExist)
        % 六个文件都在 → complete
        tgt = goodDir;
    else
        % 任一 raw 缺失 → missing_raw
        tgt = badDir;
    end
    
    needFiles = strcat(gStr, {'_0.bmp','_1.bmp','_2.bmp', ...
                          '_0.raw','_1.raw','_2.raw'});
    
    % 移动该组所有存在的文件
    existFlag = ismember(needFiles, names);   % needFiles 现在是 cell

    for k = find(existFlag)
        movefile(needFiles{k}, fullfile(tgt, needFiles{k}));
    end
end

disp('分组完成!');

使用方法

  1. 将脚本保存为 classifyGroups.m,放在数据根目录。
  2. 运行 classifyGroups,脚本会自动创建 complete 和 missing_raw 两个子文件夹并把相应文件移入。

实现效果

相关推荐
Evand J19 小时前
【MATLAB例程,PMSM19】永磁同步电机(PMSM)基于多速率无迹卡尔曼滤波(UKF)的转速与转子位置估计。测量缺失、状态预测与恢复性能分析
开发语言·matlab·电机·ekf·卡尔曼·电机滤波
星夜离尘561 天前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Evand J3 天前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
严肃小白兔4 天前
MATLAB 绘图与科研论文插图制作:图形设计、统计表达与矢量导出
开发语言·matlab·科研绘图
严肃小白兔6 天前
MATLAB 数值计算中的精度与误差问题:浮点运算、误差传播与数值稳定性
人工智能·算法·matlab
Evand J7 天前
【PMSM例程】(14)永磁同步电机无迹卡尔曼滤波(UKF)定子电阻在线辨识与补偿。电阻变化跟踪及预测误差对比仿真。附完整代码的下载链接
matlab·电机·滤波·卡尔曼滤波·永磁同步电机·无迹卡尔曼滤波·pmsm
爱喝雪碧的可乐7 天前
MATLAB
开发语言·算法·matlab
严肃小白兔7 天前
MATLAB 优秀开源项目与工具箱推荐:涵盖通信、图像处理、脑机接口等九大领域
图像处理·matlab·信息与通信·开源项目
Evand J9 天前
【MATLAB例程12】永磁同步电机基于增广无迹卡尔曼滤波的未知负载转矩在线观测
开发语言·matlab
分享资料10 天前
MATLAB 中分号 (;)的作用
matlab