Experiments with lsqnonlin for rotation param estimation

2 次查看(过去 30 天)
Hi,
I am doing experiments with lsqnonlin function because it looks like a powerful and interesting tool.
I used it to solve some optimization problem (deconvolution) just to try - and it worked (although there are better or simpler methods with matrix inversion pseudoinverse or something to solve this kind of linear problem but it was just to try something).
But when I tried to following (see my code below) I noticed that it doesnt find the rotation angle and seem to just output the same x as I gave him (with very minor rotation maybe 1.5 degrees whereas I gave an y with 20 degrees) .
Note that x is the ground truth image (no rotation) and y is the image with rotation see full code below)
any idea why it does not work with rotation? (Although I know there are other methods for estimating params like re-alignment algorithms but the goal here is to have fun with lsqnonlin )
full function code so you can try it yourself:
function lsq_rec_estimRot_withReg(x,y,maxIterArg)
fun = @(theta) reshape(imrotate(x,theta,'crop')-y,[],1);
theta0 = randn();%initial guess
lsqnonlinoptions=optimset('Algorithm','Levenberg-Marquardt','MaxIter',maxIterArg);
theta_hat =lsqnonlin(fun,theta0,[],[],lsqnonlinoptions);
%% disp inside func for now
figure;
subplot(131);
imshow(x);
title('x');
subplot(132);
imshow(y);
title('y');
subplot(133);
imshow(imrotate(x,theta_hat,'crop'));
title(['x_{hat}, rot angle:' num2str(theta_hat) ] );
end

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by