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

アプリ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でのミスなのでしょうか。
解答いただけると幸いです。

 採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 12 月 23 日

0 投票

>デバックの結果、imresizeの上のimcropの出力I3が空[ ]になっていることがわかりました。
そこまで特定されていればもう、imcrop関数の入力いずれかに意図しない値が入っていると断定できます。
  • I — トリミングするイメージ
  • rect — トリミングする四角形のサイズと位置
後者のrectは「空間座標でトリミングする四角形のサイズと位置」なので要注意です。画像データ(行列)のインデックスとは異なるので、[xmin ymin width height]には実数・負の値・大きな値等何でも入力可能で、画像の座標と異なる範囲を指し示す可能性があります。またreadimage関数で指定した画像自体が存在せず空[]になっている可能性も考えられます。いずれにせよ、rectが存在する画像Iの座標を指定しなければimcrop関数は空[]の値を返します。

2 件のコメント

健斗 赤坂
健斗 赤坂 2021 年 12 月 23 日
rectは正常な数値となっていました。
ラベル付けした画像はサイズが異なっていた為、読み込んだ画像が何らかの形で順番が入れ替わり、本来の座標からずれて画面外の座標を指した結果、回答の空っぽのような判定になったのだと思います。
ラベル付けする前に画像のサイズを統一した結果、今回の問題が解決しました。
ご回答ありがとうございました。
健斗 赤坂
健斗 赤坂 2021 年 12 月 23 日
正確な原因がわかりました。
imageDatastoreで画像をデータストア化したから画像の読み込みを行っていたのですが、ファイル名がsign数字.jpgのようにしていた為、順番を保持しないままデータストア化されていたようでした。

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchangeコンピューター ビジョンと Simulink についてさらに検索

製品

リリース

R2021a

Community Treasure Hunt

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

Start Hunting!