1-bit TIFF images having more than 1 channel are not supported.

9 visualizaciones (últimos 30 días)
sun rise
sun rise el 12 de En. de 2022
Comentada: DGM el 20 de En. de 2022
clear;clc;close all
% Load the Image Dataset of Normal and Malignant WBC
imdsTrain = imageDatastore('D:\Project\DB1\train','IncludeSubfolders',true,'LabelSource','foldernames');
imdsTest = imageDatastore('D:\Project\DB1\test','IncludeSubfolders',true,'LabelSource','foldernames');
%Perform Cross-Validation using Hold-out method with a percentage split of 70% training and 30% testing
%[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');
%%
%%
newext = '.tif';
while hasdata(imdsTrain)
[img, info] = read(imdsTrain);
[filedir, basename, ext] = fileparts(info.Filename);
newfilename = fullfile(filedir, [basename, newext]);
img3 = repmat( imresize(img, [299 299]), [1 1 3] );
imwrite(img3, newfilename);
end
while hasdata(imdsTest)
[img, info] = read(imdsTest);
[filedir, basename, ext] = fileparts(info.Filename);
newfilename1 = fullfile(filedir, [basename, newext]);
img3 = repmat( imresize(img, [299 299]), [1 1 3] );
imwrite(img3, newfilename1);
end
load('HW');
%%
%Select the Test images and save in Y_test
Y_test = imdsReSz1.UnderlyingDatastore.Labels;
%%
% optimzation techniques selection and hyperparamter selection
options = trainingOptions('adam', ...
'MiniBatchSize',16, ...
'MaxEpochs',20, ...
'InitialLearnRate',1e-4, ...
'Shuffle','every-epoch', ...
'ValidationData',imdsReSz1, ...
'ValidationFrequency',3, ...
'Verbose',false, ...
'Plots','training-progress');
%%
%CNN model training
netTransfer = trainNetwork(imdsReSz,HW,options);
%%
% for i=1:numel(imdsValidation.Files)
% a=[imdsValidation.Files(i)];
% a = imread(char(a));
% % featuresTest22 = activations(net,a,layer,'OutputAs','rows');
% YPred(i) = classify(netTransfer,a);
% imshow(a),title(char(YPred));
% i
% end
%%
% CNN Model validation
YPred = classify(netTransfer,imdsReSz1);
%Performance evaluation of Deep Learning Trained Model
plotconfusion(Y_test,YPred)
Error using writetif (line 78)
1-bit TIFF images having more than 1 channel are not supported.
Error in imwrite (line 546)
feval(fmt_s.write, data, map, filename, paramPairs{:});
Error in CNN1 (line 19)
imwrite(img3, newfilename);
>>

Respuesta aceptada

DGM
DGM el 13 de En. de 2022
Editada: DGM el 13 de En. de 2022
This is happening because img is of class 'logical'. You expand img to MxNx3 (img3). When writing the TIFF, if the BitsPerSample property is 1 (logical), then the SamplesPerPixel property cannot be anything other than 1. You're trying to set SamplesPerPixel to 3.
How you handle this depends on what you want. If all your images are logical class, then I see no reason to expand them. If you don't intend to treat these images as logical images, you can convert the images to some compatible class (e.g. using im2uint8() or something).
  4 comentarios
sun rise
sun rise el 20 de En. de 2022
Thanks for your advice.
My IFN/ENIT images are tif files greyscaled. How do I avoid expanding with epmat()? Is there another way to resize and make the grid accept greyscale images? how can i modify my code to apply into inception_v3 ?
DGM
DGM el 20 de En. de 2022
I don't know what inception_v3 is. I have no familiarity with DLT. I'm not sure why you're expanding the images to 3 channels, or whether that's necessary for the tools or process you're using.
If your process works only with 3-channel images, check the incoming image and then only expand it if it's not already a 3-channel image.
[img, info] = read(imdsTrain);
% ...
img = imresize(im2uint8(img), [299 299]);
if size(img,3)==1
img3 = repmat(img, [1 1 3] );
elseif size(img,3)==3
img3 = img;
else
error('expected image to have either 1 or 3 channels, instead it has %d channels',size(img,3))
end
% ...
On the other hand, if your process works with 1-channel images and you want to work with that (perhaps the reduced data volume is advantageous in terms of speed?)
[img, info] = read(imdsTrain);
% ...
img = imresize(im2uint8(img), [299 299]);
if size(img,3)==1
img3 = img;
elseif size(img,3)==3
img3 = rgb2gray(img);
else
error('expected image to have either 1 or 3 channels, instead it has %d channels',size(img,3))
end
% ...
I don't have DLT, so I can't really say what's best for your needs.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Image Data Workflows en Help Center y File Exchange.

Productos


Versión

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by