0

3410001ne => 3809962sw という名前のフォルダー内に約 1500 枚の画像があります。Matlab コードで処理するには、これらのファイルの約 470 をサブセット化する必要があります。以下は、フォルダー内のすべてのファイルを一覧表示する for ループの前のコードのセクションです。

workingdir = 'Z:\project\code\';  
datadir = 'Z:\project\input\area1\';     
outputdir = 'Z:\project\output\area1\';   

cd(workingdir) %points matlab to directory containing code

files = dir(fullfile(datadir, '*.tif'))
fileIndex = find(~[files.isdir]);
for i = 1:length(fileIndex)
    fileName = files(fileIndex(i)).name;

ファイルには序数の方向 (例: 3410001ne、3410001nw) も添付されていますが、すべての方向が各ルートに関連付けられているわけではありません。3609902sw => 3610032sw の範囲の 1500 個のファイルのうち 470 個を含むようにフォルダーの内容をサブセット化するにはどうすればよいですか? フォルダー全体ではなく、フォルダー内のファイルの範囲を Matlab に指定できるコマンドはありますか? 前もって感謝します。

4

2 に答える 2

3

次の点を考慮してください。

%# generate all possible file names you want to include
ordinalDirections = {'n','s','e','w','ne','se','sw','nw'};
includeRange = 3609902:3610032;
s = cellfun(@(d) cellstr(num2str(includeRange(:),['%d' d])), ...
    ordinalDirections, 'UniformOutput',false);
s = sort(vertcat(s{:}));

%# get image filenames from directory
files = dir(fullfile(datadir, '*.tif'));
files = {files.name};

%# keep only subset of the files matching the above
files = files(ismember(files,s));

%# process selected files
for i=1:numel(files)
    fname = fullfile(datadir,files{i});
    img = imread(fname);
end
于 2012-06-24T18:29:54.070 に答える
1

このようなものがうまくいくかもしれません。

list = dir(datadir,'*.tif'); %get list of files
fileNames = {list.name}; % Make cell array with file names
%Make cell array with the range of wanted files. 
wantedNames = arrayfun(@num2str,3609902:3610032,'uniformoutput',0); 

%Loop through the list with filenames and compare to wantedNames.

for i=1:length(fileNames)
% Each row in idx will be as long as wantedNames. The cells will be empty if 
% fileNames{i} is unmatched and 1 if match.
   idx(i,:) = regexp(fileNames{i},wantedNames);
end
idx = ~(cellfun('isempty',idx)); %look for unempty cells.
idx = logical(sum(,2)); %Sum each row
于 2012-06-24T18:26:20.860 に答える