geometricT​ransform2d​で画像変換する際にで​るエラーの意味がわか​りません

1 view (last 30 days)
mushi77
mushi77 on 22 Mar 2021
Commented: Hiroyuki Hishida on 22 Mar 2021
のイメージ7を参考に、斜め45度方向から撮影した円筒の側面を平面に変換するように楕円の方程式x^2/a^2+y^2/b^2=1からyについて式を導出して計算させようとしています。
以下のコードを作成したのですが、実行時に関数内の別関数のエラーが出ているようで、困っています。
対処方法か解決のヒントとなるエラー原因について教えて下さい。
<コード>
I=imread('test1.jpg');
nrows = size(I,1);
ncols = size(I,2);
fill = 0.3;
a=1;
b=1/sqrt(2);
ifcn = @(xy) [xy(:,1), xy(:,2) + b*sqrt(1-(xy(:,1)-nrows/2).^2/a^2)];
tform = geometricTransform2d(ifcn);
I_trans= imwarp(I,tform,'FillValues',fill);
<メッセージ>
エラー: imref2d
yWorldは実数にする必要があります。
エラー: imref2d>iValidateXYPoints (line 500)
validateattributes(Y,{'numeric'},{'real','nonsparse'},'imref2d',yName);
エラー: imref2d/worldToIntrinsic (line 272)
iValidateXYPoints(xWorld,yWorld,'xWorld','yWorld');
エラー: imwarp>remapAndResampleGeneric2d (line 596)
[srcXIntrinsic,srcYIntrinsic] = R_A.worldToIntrinsic(srcXWorld,srcYWorld);
エラー: imwarp>remapPointsAndResample (line 251)
outputImage = remapAndResampleGeneric2d(inputImage,R_A,tform,outputRef,method,fillValues,
SmoothEdges);
エラー: imwarp (line 232)
outputImage = remapPointsAndResample(parsedInputs.InputImage,R_A,tform,outputRef,method,fillValues,
SmoothEdges);
エラー: image_trns (line 14)
I_trans= imwarp(I,tform,'FillValues',fill);
お願いいたします。
  1 Comment
Hiroyuki Hishida
Hiroyuki Hishida on 22 Mar 2021
エラーメッセージ(ワーニングメッセージ)の読み方をですが、下から順に読んでください。
「エラー: image_trns (line 14)」が最初のメッセージで、記述されたコードの14行目に問題があると示唆しております。
通常、エラーはどこかの関数に紐付いてでるのですが、その関数で使用されている関数の中で使用されている関数の中で使用されている・・・・とさかのぼっていくと、一番上のエラーメッセージに到達します。今回の場合、それは、「エラー: imref2d yWorldは実数にする必要があります。」になります。
今回の場合、yWorldに実数以外のナニモノカが入っていることがエラーの要因だとでておりますので、imref2dの関数の仕様について確認していただくのが良いかと思います。
いかがでしょうか
菱田

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!