imcropの出力が空[ ]になってしまう

6 views (last 30 days)
健斗 赤坂
健斗 赤坂 on 23 Dec 2021
Commented: 健斗 赤坂 on 23 Dec 2021
アプリimageLabelerでラベル付けしたものを、ラベルの位置情報を基に一つ一つトリミングしようとしています。
----------------------------------------------------------------------------------------
for I = 1 : SIGN_MAX
img = readimage(b, I);
X = gTruth.LabelData.p5{I};
if X ~= 0
I3 = imcrop(img, X);
I3 = imresize(I3, [IMAGE_SIZE IMAGE_SIZE]);
img_test(:, :, :, j) = I3;
Label_test(j) = "p5";
j = j + 1;
end
end
----------------------------------------------------------------------------------------
SIGN_MAX枚のラベル付けした画像があり、p5というラベルを持つ範囲をトリミングし、リサイズした後にimg_testへ格納という認識で作成しました。
実際にエラーが出ているのはimresizeの行で以下のような内容です。
----------------------------------------------------------------------------------------
エラー: resizeParseInputs
1 番目の入力引数 Aは空以外にする必要があります。
エラー: matlab.images.internal.resize.resizeParseInputs>parsePreMethodArgs (行 113)
validateattributes(A, {'single', ...
エラー: matlab.images.internal.resize.resizeParseInputs (行 28)
parsePreMethodArgs(varargin, method_arg_idx, first_param_string_idx);
エラー: imresize (行 153)
params = matlab.images.internal.resize.resizeParseInputs(args{:});
エラー: trim (行 250)
I3 = imresize(I3, [IMAGE_SIZE IMAGE_SIZE]);
----------------------------------------------------------------------------------------
デバックの結果、imresizeの上のimcropの出力I3が空[ ]になっていることがわかりました。
問題なく処理を終えるラベルもあるのですが、一部のラベルで発生しています。
このプログラムではなくimageLabelerでのミスなのでしょうか。
解答いただけると幸いです。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 23 Dec 2021
>デバックの結果、imresizeの上のimcropの出力I3が空[ ]になっていることがわかりました。
そこまで特定されていればもう、imcrop関数の入力いずれかに意図しない値が入っていると断定できます。
  • I — トリミングするイメージ
  • rect — トリミングする四角形のサイズと位置
後者のrectは「空間座標でトリミングする四角形のサイズと位置」なので要注意です。画像データ(行列)のインデックスとは異なるので、[xmin ymin width height]には実数・負の値・大きな値等何でも入力可能で、画像の座標と異なる範囲を指し示す可能性があります。またreadimage関数で指定した画像自体が存在せず空[]になっている可能性も考えられます。いずれにせよ、rectが存在する画像Iの座標を指定しなければimcrop関数は空[]の値を返します。
  2 Comments
健斗 赤坂
健斗 赤坂 on 23 Dec 2021
rectは正常な数値となっていました。
ラベル付けした画像はサイズが異なっていた為、読み込んだ画像が何らかの形で順番が入れ替わり、本来の座標からずれて画面外の座標を指した結果、回答の空っぽのような判定になったのだと思います。
ラベル付けする前に画像のサイズを統一した結果、今回の問題が解決しました。
ご回答ありがとうございました。
健斗 赤坂
健斗 赤坂 on 23 Dec 2021
正確な原因がわかりました。
imageDatastoreで画像をデータストア化したから画像の読み込みを行っていたのですが、ファイル名がsign数字.jpgのようにしていた為、順番を保持しないままデータストア化されていたようでした。

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!