splitting multiple images in a loop

2 ビュー (過去 30 日間)
Eberechi ICHI
Eberechi ICHI 2022 年 2 月 17 日
編集済み: DGM 2022 年 2 月 18 日
Hello All,
Please i have a code i have succesfully used to split/sub-divide an image into multiple ones.
I want o modify it to be able to split mutiple images in a folder but im having erros.
Can you pleasse help me with making this possible.
Below is an excerpt of the code.
Thanks
clc
clear all
close all
myFolder = 'E:\split\IRT\1.ForestRiverNB';
filePattern = fullfile(myFolder,'*.png');
jpegFiles = dir(filePattern);
for k =1
baseFileName = jpegFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1,'Now reading %s\n',fullFileName);
% imageArray = imread(fullFileName);
% imshow(imageArray); % Display image.
% j = 1:size (data_set.Files, 1)
% folder_name = data_set.Files(k) ;
% mkdir('E:\Sattar\Spring2018\Crack Detection Comparison\Sensors\TestingUnlabeled\',char(folder_name))
input = imread (fullFileName) ;
input = imresize (input, [500 2000]) ;
figure
imshow(input);
% input = rgb2gray (input) ;
n=1;
for j = 1:2
for i = 1:8
row1 = (j-1)*225+1 ;
row2 = row1 + 224 ;
col1 = (i-1)*225+1 ;
col2 = col1+224;
sub_im = input (row1:row2 , col1:col2, :) ;
base_name = sprintf( 'C%i.jpg',n);
full_name = fullfile (myFolder, base_name);
fprintf('Saving %s\n', full_name);
imwrite(sub_im, full_name) ;
n = n+1 ;
end
end
end
  1 件のコメント
KSSV
KSSV 2022 年 2 月 18 日
What errors you are getting? Code looks fine.

サインインしてコメントする。

回答 (1 件)

DGM
DGM 2022 年 2 月 18 日
編集済み: DGM 2022 年 2 月 18 日
This works without error; however, there were and still are issues that I can't fix without knowing what your intentions are.
The loop iterator k was set to 1, so only one file would be processed. I fixed that.
When multiple files are processed, the outputs overwrite each other since the filenames are the same. I simply added another numeric field to the dynamic filename spec. It probably still needs a more useful name. Also, use leading zeros on numeric fields if you ever want your files to sort correctly.
The output image size is 225x225, and the tiling is 2x8, but the image is resized to be 500x2000. This means that only a part of the image is used (450x1800). This also means that all images will be grossly distorted unless their original aspect ratio were the same as 500x2000.
Hard-coding all these geometries is a great way to make code inflexible, and it makes me have to ask if the output behavior is even intended. You'll have to specify what your goals are.
myFolder = 'sources';
filePattern = fullfile(myFolder,'a*.png');
selectedFiles = dir(filePattern);
for k = 1:length(selectedFiles)
baseFileName = selectedFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1,'Now reading %s\n',fullFileName);
input = imread(fullFileName) ;
input = imresize(input, [500 2000]);
n = 1;
for j = 1:2
for i = 1:8
row1 = (j-1)*225 + 1;
row2 = row1 + 224;
col1 = (i-1)*225 + 1;
col2 = col1 + 224;
sub_im = input(row1:row2 , col1:col2, :);
base_name = sprintf( 'C_%03d_%03d.jpg',k,n);
full_name = fullfile('.', base_name);
fprintf('Saving %s\n', full_name);
imwrite(sub_im, full_name) ;
n = n+1 ;
end
end
end
This might make more sense, but it still has problems. In this example, the original filename is used to construct a unique set of filenames for the tiles. The tiling is specified with a tiling vector and a tile size. The image is brute-resized to accomodate. This still results in gross distortion, but I'm assuming you wanted something specific from some files with a particular geometry.
myFolder = 'sources';
filePattern = fullfile(myFolder,'a*.png');
tiling = [2 8];
tilesize = [250 250];
selectedFiles = dir(filePattern);
for k = 1:length(selectedFiles)
baseFileName = selectedFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1,'Now reading %s\n',fullFileName);
shortfilename = regexprep(baseFileName,'\.[^.]+$','');
input = imread(fullFileName) ;
input = imresize(input,tilesize.*tiling);
n = 1;
for j = 1:2
for i = 1:8
row1 = (j-1)*tilesize(1) + 1;
row2 = row1 + tilesize(1) - 1;
col1 = (i-1)*tilesize(2) + 1;
col2 = col1 + tilesize(2) - 1;
sub_im = input(row1:row2 , col1:col2, :);
base_name = sprintf( '%s_%03d.jpg',shortfilename,n);
full_name = fullfile('.', base_name);
fprintf('Saving %s\n', full_name);
imwrite(sub_im, full_name) ;
n = n+1 ;
end
end
end

カテゴリ

Find more on Loops and Conditional Statements in Help Center and File Exchange

製品


リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by