2

私はしたいと思います :

  • ステップ 1) このコードを使用して、画像を 20 度回転しますrotatedImage = imrotate(originalImage, 20);

  • ステップ 2) ステップ 1 で使用した回転角度を、可能であれば回転した画像のみに基づいて計算するか、または回転した画像と元の画像に基づいて計算します。

ステップ2またはそれを行うための命題を実行できるmatlabの関数はありますか?

4

2 に答える 2

5

この例は、ステップ 2 を実行する 1 つの方法を示しています。

A = 'peppers.jpg';
img = im2double(imread(A));
img_r=imrotate(img,20,'nearest','crop');   % <-- this is the distorted image
                                           %     rotated 20 deg

xopt = fminsearch(@(x) imr(x,img_r,img), 10);  % <-- start with 10 deg as guess

imr関数はどこにありますか

function obj= imr(x,img1,img2);
img1_r = imrotate(img1,x,'nearest','crop');
obj = sum((img2(:)-img1_r(:)).^2);

関数は ラップimrotateし、 で使用できるように最小化する目的関数を生成しfminsearchます。

これは、元の画像、歪んだ画像、および反転した画像を示しています (角度は上記のように決定されています)。

ここに画像の説明を入力

制限に注意してください。目的関数の計算中にポイントごとの比較が可能になるように、回転した画像は切り取られます。より一般的な方法で特定の質問に答えるように設計された形態学的アルゴリズムがあると思うので、これはおそらくこれを行うための絶対に最良の方法ではありません。それでもうまくいきました。

于 2013-09-09T18:09:14.560 に答える