Bonjour,
Je fais des essais simples pour l'instant et le résultat est aberrant ... Juste l'alignement d'une droite (tournée à 90° dans la 2nde image) !!!
Mon but final est de recaler 2 images qui tournent sur elles-même sans faire du point à point et l'automatisation est nécessaire !
Le problème peut venir de la fonction optimisée mais je n'ai pas beaucoup de connaissances en la matière...
Les conditions initiales sont ici choisies assez proches de la solution et pourtant, cela ne fonctionne pas!
Et le code de la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 clear all, close all, clc % Lecture des images et taille I=imread('1.bmp'); I=I(:,:,1); [M N]=size(I); I_transform=imread('2.bmp'); I_transform=I_transform(:,:,1); % Conditions initiales initial_scale=[3*pi/8 1 1]; % Trouver les paramètres qui minimise la fonction [scale,Fval]=fminsearch('rescale2',initial_scale,[],I,I_transform); disp(Fval); u=scale(1); dx=scale(2); dy=scale(3); % Construction de la matrice de recalage (combinaison rotation & translation) Trotation=[cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;]; Ttranslation=[1 0 0; 0 1 0; dx dy 1;]; T=Trotation*Ttranslation; % Image recalée Tform=maketform('affine',T); I_aligned=imtransform(I_transform,Tform,'Xdata',[1 N],'Ydata',[1 M]); % Visualisation subplot(1,3,1); imshow(I); title('Original Image'); subplot(1,3,2); imshow(I_transform); title('Transformed Image'); subplot(1,3,3); imshow(I_aligned); title('Aligned Image');
Pouvez-vous m'aider? Avez-vous des idées afin d'améliorer mon programme, sa rapidité... Je suis preneuse de tous conseils et de toutes aides....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 function [err]=rescale2(scale,I,I_transform); [M N]=size(I); % Application de la transformation avec des paramètres d'échelle divers % jusqu'à ce que la corrélation entre 2 les images soit acceptable u=scale(1); dx=scale(2); dy=scale(3); Trotation=[cos(u) sin(u) 0; -sin(u) cos(u) 0; 0 0 1;]; Ttranslation=[1 0 0; 0 1 0; dx dy 1;]; T=Trotation*Ttranslation; Tform=maketform('affine',T); I_aligned=imtransform(I_transform,Tform,'Xdata',[1 N],'Ydata',[1 M]); % Find the correlation between the base and the aligned images err=-abs(corr2(I_aligned,I)); end
Partager