無作為な画像の切り抜き
4 views (last 30 days)
Show older comments
セマンティックセグメンテーションを行うにあたって,データ数を増やすために1枚の画像からランダムで複数の画像を切り出したいと考えているのですがどのようなコードで可能なのでしょうか
Accepted Answer
Kenta
on 12 Jan 2020
Edited: Kenta
on 12 Jan 2020
ひとまずデータを拡張して、セマンティックセグメンテーションの性能を試したいということでしたら、
以下のようにしてもよいかもしれません。補助関数が入っていないので、添付のライブエディターを実行してください。
例えば、したのURLが参考になると思います。
ご質問にある、複数の画像の切り出しは以下のもので実行可能と思います。
また、randomPatchExtractionDatastoreを使うのもよいと思います。
練習のために、たくさん数を切り出したいのなら上の方法が、直感的でわかりやすいかもしれません。ただ、コーディング自体は下のやり方に倣うほうがシンプルでよいかもしれません。
詳細は下のURLをご覧ください。
clear;clc
numObservations = 4;
filenameImage = 'kobi.png';
trainImages = repelem({filenameImage},numObservations,1);
filenameLabels = 'kobiPixelLabeled.png';
trainLabels = repelem({filenameLabels},numObservations,1);
classes = ["floor","dog"];
ids = [1 2];
imds = imageDatastore(trainImages);
pxds = pixelLabelDatastore(trainLabels,classes,ids);
trainingData = combine(imds,pxds);
augmentedTrainingData = transform(trainingData,@jitterImageColorAndWarp);
data = readall(augmentedTrainingData);
inputSize=size(read(imds));
targetSize = [400 400];
I = imread(filenameImage);
L = imread(filenameLabels);
C = categorical(L,ids,classes);
resizedI = imresize(I,targetSize);
resizedC = imresize(C,targetSize);
B = labeloverlay(resizedI,resizedC);
figure;imshow(B)
imwrite(B,'dog.jpg')
preprocessedTrainingData = transform(augmentedTrainingData,...
@(data)randomCropImageAndLabel(data,targetSize));
data = readall(preprocessedTrainingData);
rgb = cell(numObservations,1);
for k = 1:numObservations
I = data{k,1};
C = data{k,2};
rgb{k} = labeloverlay(I,C);
end
figure;montage(rgb)
Cropped_I=getframe;
imwrite(imresize(Cropped_I.cdata,.5),'cropped.jpg')
6 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!