Converting JPG images into a cell arrays

3 次查看(过去 30 天)
Hi
I have the following code i want to convert images jpg (TrainingData) into cell arrays ,where each cell containing a 28-by-28 matrix representing a synthetic image of fingerprint
dataDir= fullfile('Data/');
exts = {'.jpg','.png','.tif','BMP'};
imds = imageDatastore(fullfile(dataDir),...
'IncludeSubfolders',true,'FileExtensions','.jpg','LabelSource','foldernames');
countEachLabel(imds);
[TrainData, TestData] = splitEachLabel(imds, 0.5);
size(TrainData);
countEachLabel(TrainData);
for i = 1:numImages
img = readimage(TrainData, i);
img = imbinarize(img);
end

采纳的回答

Walter Roberson
Walter Roberson 2020-10-24
编辑:Walter Roberson 2020-10-25
sz = size(img);
RB = 28; CB = 28;
NRB = floor(sz(1)/RB);
LOR = sz(1) - NRB*RB;
NCB = floor(sz(2)/CB);
LOC = sz(2) - NCB*CB;
if LOR ~= 0
rbs = [RB * ones(1,NRB), LOR];
else
rbs = RB * ones(1,NRC);
end
if LOC ~= 0
cbs = [CB * ones(1,NCB), LOC];
else
cbs = CB * ones(1,NCB);
end
tiles = mat2cell(img, rbs, cbs, size(img,3));
See also mat2tiles in the File Exchange
And watch out for the titles that are not 28 x 28. This code does not assume that the image is an exact integer multiple of 28 in each direction, and it does not throw away any partial blocks.
  2 个评论
Abdussalam Elhanashi
Hi Walter Roberson
I tried the code but i got error
dataDir= fullfile('Data/');
exts = {'.jpg','.png','.tif','BMP'};
imds = imageDatastore(fullfile(dataDir),...
'IncludeSubfolders',true,'FileExtensions','.jpg','LabelSource','foldernames');
countEachLabel(imds);
[TrainData, TestData] = splitEachLabel(imds, 0.5);
size(TrainData);
countEachLabel(TrainData);
numImages = numel(TrainData.Files);
for i = 1:numImages
img = readimage(TrainData, i);
img = imbinarize(img);
sz = size(img);
RB = 28; CB = 28;
NRB = floor(sz(1)/RB);
LOR = RB - NRB*RB;
NCB = floor(sz(2)/CB);
LOC = CB - NCB*CB;
if LOR ~= 0
rbs = [RB * ones(1,NRB), LOR];
else
rbs = RB * ones(1,NRC);
end
if LOC ~= 0
cbs = [CB * ones(1,NCB), LOC];
else
cbs = CB * ones(1,NCB);
end
tiles = mat2cell(img, rbs, cbs, size(img,3));
end
Error
Error using mat2cell (line 89)
Input arguments, D1 through D3, must sum to each dimension of the input matrix size, [200 200 3].
Error in Untitled (line 34)
tiles = mat2cell(img, rbs, cbs, size(img,3));
Walter Roberson
Walter Roberson 2020-10-25
You are right, I had a bug in the code. I fixed it above.
Caution: your 400 x 400 image will end up with partial tiles. On each dimension, you have 14 full groups of 28, and then you have partial group of 8 to reach 400. Because of this, some of the blocks in tiles will be 8 x 28, and some will be 28 x 8, and one of them will be 8 x 8.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Software Development Tools 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by