matlab从文件夹中自动抽取一定数量的图片,并将其保存到文件夹中,其中图片的命名方式为0001格式。

因为要做个图像增强算法质量的评价,故需要从图集中抽取部分图像进行评价,从网上找了一些方法,发现没有不放回的抽样方法,借鉴了网上的部分方法后进行了改进。其中包括自动创建文件夹与自动抽样两个程序。

clear all;
clc;
N=1000; %需要抽取的图片的数量
num=4387; %图片的总数量
n=4 %需要抽样的次数
p=randperm(num); %产生一个(1-num)的随机序列,用作随机抽样
%自动创建文件夹开始
for v=1:n
file_name = sprintf(’%s’,num2str(v)); %文件夹命名方式1,2,3,…
file_path_name = strcat(‘D:\原始图库’,‘图集’,file_name); %抽样图片文件夹存放路径及名字
file_path_name_A = strcat(file_path_name,’’) ; %增强前图片文件夹名称+‘\’

if      exist(file_path_name_A)==0  %该文件夹不存在,则直接创建
        mkdir(file_path_name_A);
else                                                 %该文件夹存在,则先删除再创建
        rmdir(file_path_name_A, 's');                %该文件夹中有没有文件均可
        mkdir(file_path_name_A);
end
%自动创建文件夹结束

%自动抽取图片
t=p(1:N);                                            %取p的前n个随机数,对应图片名字
%抽样开始

for e=1:N
imageName_YS_path=‘D:\原始图库\yuanshihebing’; %原始图片存放路径
imageName_YS_path_list=dir(strcat(imageName_YS_path,’*.bmp’));%打开文件夹
X=t(e);
imageName = imageName_YS_path_list(X).name; % 图像名
image = imread(strcat(imageName_YS_path,imageName));
image_CF_path=fullfile(file_path_name_A,strcat(num2str(X),’.bmp’));%拼接出来图片路径
imwrite(image,image_CF_path); %保存图片
end
%自动抽取图片结束
p=setdiff(p,t,‘stable’);%从p数组中删除与t数组相同的元素(用作无放回抽样方法,即每组抽取的图片不会重复)
end

图片的命名程序使用的是百度回答里的方法。
在需要抽样的原始图集所在的文件夹中新建一个txt文档,将下面程序保存,然后修改后缀为.bat格式,双击运行即可。
@echo off
setlocal enabledelayedexpansion
set count=10000
for /f “delims=” %%i in (‘dir /b .jpg,.png,.bmp,.jpeg,*.gif’) do call:Rename “%%~i”
pause
exit
:Rename
set /a count+=1
if /i “%1"=="!count:1!%~x1” goto :eof
if exist “!count:1!%x1” goto Rename
echo 改名:%1 !count:~1!
ren “%~1” “!count:1!%x1”
goto :eof

你可能感兴趣的:(图集自动抽样)