matlab批量实现模型训练集图像尺寸转换

最近在尝试复现一篇论文

其中模型之间的输入输出转换涉及到图像尺寸的批量修改和转换。

此代码完成的事:

模型一的训练结果输出图像
宽高按照大数优先的规则填补为正方形
resize为模型二需要的输入尺寸图像

在这里插入图片描述

话不多说,上代码:

clear;
clc;
load xxxxmodel.mat % //加载模型
Path = '...\xxxxTestset\';   % //设置输入数据存放的文件夹路径
writePath = "...\yyyyTrainset\";
File = dir(fullfile(Path,'*.jpg'));  % //显示文件夹下所有符合后缀名为.txt文件的完整信息
FileNames = {File.name}';            % //提取符合后缀名为.txt的所有文件的文件名,转换为n行1列
count = length(FileNames);
m = 1;
% //遍历文件夹内文件
for i=1:count
    picPath = strcat(Path,FileNames(i)); % //此时仍为元胞数组,后面读取图像地址需要加{1,1}才能得到字符串
    img = imread(picPath{1,1});
    imgsize = size(img);
    [bboxes,scores] = detect(detector,img); % //利用训练好的yolov2模型进行检查
    scores = strcat(string(round(scores,4)*100),"%");
    % //保存yyyy输入训练集图像
    if (~isempty(bboxes)) % //判断是否有边界框
        % //遍历每一张图像的矩形框
        for n=1:size(bboxes,1)
            writePathName = strcat(writePath,num2str(m),'.jpg');
            h1 = bboxes(n,2);
            h2 = bboxes(n,2)+bboxes(n,4);
            w1 = bboxes(n,1);
            w2 = bboxes(n,1)+bboxes(n,3);
            % //修正边界索引值
            if h1 == 0
                h1=h1+1;
            end
            if h2 >= imgsize(1)
                h2=h2-1;
            end
            if w1 == 0
                w1=w1+1;
            end
            if w2 >= imgsize(2)
                w2=w2-1;
            end
            % //保证roi图像为的高和宽都为偶数,方便一会儿修补为正方形的操作
            if mod(h2-h1,2) ==0 % //返回的是bool值,==0,说明是奇数
                h2 =h2-1;
            end
            if mod(w2-w1,2) ==0
                w2 =w2-1;
            end
            unetroi = img(h1:h2,w1:w2,:);
            % //获取roi宽高
            unetroih = size(unetroi,1);
            unetroiw = size(unetroi,2);
            % //填补为正方形,然后缩放到214*214,存储
            if unetroih>unetroiw % //如果高大于宽
                fillarea = zeros(unetroih,(unetroih-unetroiw)/2,3); % //黑色填补区域的创建
                unetsquareBforeResize = [uint8(fillarea) unetroi uint8(fillarea)]; % //区域拼接,相当于矩阵插入列的操作
                unetin = imresize(unetsquareBforeResize,[214 214]); % //resize为期望尺寸
            elseif unetroiw>unetroih % //如果宽大于高
                fillarea = zeros((unetroiw-unetroih)/2,unetroiw,3); % //黑色填补区域的创建
                unetsquareBforeResize = [uint8(fillarea);unetroi;uint8(fillarea)]; % //区域拼接,相当于矩阵插入行的操作
                unetin = imresize(unetsquareBforeResize,[214 214]); % //resize为期望尺寸
            elseif unetroiw==unetroih % //如果宽等于高
                unetin = imresize(unetroi,[214 214]); % //直接resize为期望尺寸
            end
            imshow(unetin)
            imwrite(unetin,writePathName); % //图像保存结果
            m = m+1;
        end  
     end
end
sprintf("yyyy训练集输入图像已存储完成!")
处理前:

在这里插入图片描述

处理后:

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值