KITTI提取gtbox并存为图片

做人车分类,需要数据集,所以把KITTI中标定好的gtbox提取出来做成自己的数据集,代码实现参考了faster rcnn的源码。


第一步,数据准备

之前因为使用faster rcnn 训练了kitti的数据,所以对原始数据集已经做过修改,目前的label格式如下:
这里写图片描述
其中,第一位为图片索引,接着为整张图中的box的数量,然后是第一类的数量,接着便是第一类的box坐标。如果这一类没有就写0。


第二步,实现gtbox的提取

function res = get_gtbox(path,img_list,img_gt) 
% 参数:path: 路径; img_list:KITTI_val_list.txt; img_gt:KITTI_gt_val.txt
% clc;
% clear;
% path = '/home/fucm/Python/Car/data';
% img_list = 'KITTI_val_list.txt';
% img_gt = 'KITTI_gt_val.txt';
classes = {'car','pedestrian','cyclist'};

img_list_path= strcat(path,'/',img_list);
img_gt_path= strcat(path,'/',img_gt);
image_list=importdata(img_list_path);

% 得到gt参数
fidin=fopen(img_gt_path);
ind=1;
while ~feof(fidin)                                      
    tline=fgetl(fidin); 
    image_list_gt_data{ind}=str2num(tline(29:end));  % 得到gt标签
    ind=ind+1;
end
NUMBER = 0; %bbox总数
% 得到gt数值
for i=1:length(image_list) % 一共的图片 

    image_gt{i}.ids=image_list{i};
  %  image_gt{i}.total=image_list_gt_data{i}(1);% 每个图片在中bbox的数量
    ind=2;
    path=strcat('../data/',image_gt{i}.ids);  % 这里路径需要修改
    img=imread(path);
%     fprintf('i=%d,ids=%d:\n',i,image_gt{i}.ids);
    for j=1:length(classes) % 分不同的种类读出来

        if ~exist(strcat('../data/dataset_test/train/',classes{j},'/gt'))
            mkdir(strcat('../data/dataset_test/train/',classes{j},'/gt'))
        end
        image_gt{i}.classes{j}=image_list_gt_data{i}(ind);    
        if image_gt{i}.classes{j}>0
            bbox_num =  image_gt{i}.classes{j};
            image_gt{i}.bb{j}=reshape(image_list_gt_data{i}(ind+1:ind+image_gt{i}.classes{j}*4),4,image_gt{i}.classes{j})'; % 得到bbox矩阵
            for k=1:bbox_num
                bb_target=image_gt{i}.bb{j}(k,:); % 这个是原始的bbox
                write_path=strcat('../data/dataset_test/train/',classes{j},'/gt','/',num2str(NUMBER+k),'.jpg'); %NUMBER是基准数
                fprintf('img-ids:%s:%d;%d;%d;%d\n',image_gt{i}.ids,fix(bb_target(1)),fix(bb_target(2)),fix(bb_target(3)),fix(bb_target(4)));
                imwrite(img(fix(bb_target(2))+1:fix(bb_target(4)),fix(bb_target(1))+1:fix(bb_target(3)),:),write_path,'jpg');
            end
        else
            image_gt{i}.bb{j}=[];
        end
        NUMBER = NUMBER +  image_gt{i}.classes{j}; % 加上这个循环的class(j)数量
        ind=ind+4*image_gt{i}.classes{j}+1; % 得到第二类索引
    end
end
fprintf('total:%d:\n',NUMBER);
fprintf('\n~~~~~~~~~~~~~~~~~~~~\n');

这里需要特别注意的是matlab的下标索引是1开始的,所以我才会在下面这句话中每个都加1,主要是在原始的数据中会有坐标为0的点,这样就会报错。

imwrite(img(fix(bb_target(2))+1:fix(bb_target(4)),fix(bb_target(1))+1:fix(bb_target(3)),:),write_path,'jpg');

原文地址:http://blog.csdn.net/u011956147/article/details/53239325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值