⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiresolution.html

📁 Lukas Kanade Multi resolution program in matlab language.
💻 HTML
📖 第 1 页 / 共 2 页
字号:
    gradBlocX_Y=[gradBlocX(:),gradBlocY(:)];    gradBlocTemp=gradBlocTemp(:);gradBlocX_YINV=pinv(gradBlocX_Y);res3=-gradBlocX_YINV*gradBlocTemp; <span class="comment">% Vecteur d&eacute;placement de coordonn&eacute;es u et v</span>RES3(:,k)=res3; <span class="comment">% Tableau o&ugrave; on regroupe les coordonn&eacute;es des vecteurs d&eacute;placement de chaque bloc</span>k=k+1;    <span class="keyword">end</span><span class="keyword">end</span>[V,W]=meshgrid(1:5:Cim-moduloX,1:5:Lim-moduloY);[v1,w1]=size(V);[v2,w2]=size(W);VectX=reshape(RES3(1,:),v1,w1);VectY=reshape(RES3(2,:),v2,w2);<span class="comment">% Affichage des vecteurs d&eacute;placement</span>figurequiver(V,W,VectX,VectY)colormap <span class="string">hsv</span><span class="comment">% On observe que le r&eacute;sultat n'est pas parfait mais cela est principalement</span><span class="comment">% du aux imperfections de l'image r&eacute;sultat : certains blocs d&eacute;plac&eacute;s</span><span class="comment">% apportent des discontinuit&eacute;s &agrave; l'image.</span><span class="comment">% On remarque en revanche que l'approche multi r&eacute;solution permet d'adapter</span><span class="comment">% l'algorithme de Lucas &amp; Kanade pour des d&eacute;placements importants.</span></pre><pre class="codeoutput">Lucas Kanade : le d&eacute;placement moyen est de (pixels) :ans =    0.4602    0.5334</pre><img vspace="5" hspace="5" src="MultiResolution_08.png"> <p class="footer"><br>            Published with MATLAB&reg; 7.4<br></p>      </div>      <!--##### SOURCE BEGIN #####% Gaetan Boehringer, Bruno Jacquot & Frédéric Piegay

%% Approche multi-résolution et algorithme de Lucas & Kanade


%% Chargement des images
clear all; close all; clc ;

% Lecture
im1o=double(imread('LKtest2im1.bmp'));
im2o=double(imread('LKtest2im2.bmp'));
[M,N]=size(im1o);

% Affichage
figure;
subplot(1,2,1); imagesc(im1o);axis equal; colormap(gray);title('Image initiale');
subplot(1,2,2); imagesc(im2o);axis equal; colormap(gray); title ('Image décalée');


%% Filtrage
h = fspecial('gaussian',10,3);
im1 = imfilter(im1o,h);
im2 = imfilter(im2o,h);

% Affichage des images filtrées

figure;
subplot(1,2,1); imagesc(im1);axis equal; colormap(gray);title('Image initiale filtrée');
subplot(1,2,2); imagesc(im2);axis equal; colormap(gray);title('Image décalée filtrée');

%% Premier traitement

% Baisse de la résolution
imageBRinter1=BaisseResolution(im1);
imageBR1=BaisseResolution(imageBRinter1);

imageBRinter2=BaisseResolution(im2);
imageBR2=BaisseResolution(imageBRinter2);

[Lim,Cim]=size(imageBR1);

figure;
subplot(1,2,1); imagesc(imageBR1);axis equal; colormap(gray);title('Image initiale basse résolution');
subplot(1,2,2); imagesc(imageBR2);axis equal; colormap(gray); title ('Image décalée basse résolution');

% Calcul de Lucas Kanade

% Gradients
f=[-1,8,0,-8,1]/12;
im1fx=filter2(f,imageBR1,'same');    % Gradient selon x
im1fy=filter2(f',imageBR1,'same');   % Gradient selon y
imt=imageBR2-imageBR1; % Gradient temporel


% Gestion des bords : suppression du bord  (épaisseur 10 pixels)
bord=10;
Ix1=im1fx(bord:Lim-bord,bord:Lim-bord); 
Iy1=im1fy(bord:Lim-bord,bord:Lim-bord); 
It=imt(bord:Lim-bord,bord:Lim-bord);

% Transfert vecteurs colonnes
Ix_y=[Ix1(:),Iy1(:)];
It=It(:);                              

%Calcul de u et v
Ix_yINV=pinv(Ix_y); % On inverse la matrice
fprintf('Lucas Kanade : le déplacement moyen est de (pixels) :\n')
-Ix_yINV*It % Calcul des coordonnées du vecteur deplacement.


moduloX=mod(Cim,5);% Nombre de blocs de taille (5*5) selon l'axe des abscisses
moduloY=mod(Lim,5);% Nombre de blocs de taille (5*5) selon l'axe des ordonnées

k=1;% Variable d'itération
for i=1:5:Lim-moduloY
    for j=1:5:Cim-moduloX
    
    GradBlocX=im1fx(i:i+4,j:j+4);  % Bloc de taille (5*5) du gradient selon x
    GradBlocY=im1fy(i:i+4,j:j+4);  % Bloc de taille (5*5) du gradient selon y
    GradBlocTemp=imageBR2(i:i+4,j:j+4)-imageBR1(i:i+4,j:j+4); % Bloc de taille (5*5) du gradient temporel
    
    
    GradBlocX_Y=[GradBlocX(:),GradBlocY(:)];             
    GradBlocTemp=GradBlocTemp(:);  
    
    

GradBlocX_YINV=pinv(GradBlocX_Y);                   


res=-GradBlocX_YINV*GradBlocTemp; % Vecteur déplacement de coordonnées u et v
RES(:,k)=res; % Tableau où on regroupe les coordonnées des vecteurs déplacement de chaque bloc
k=k+1;

    end
end

[X,Y]=meshgrid(1:5:Cim-moduloX,1:5:Lim-moduloY);
[x1,y1]=size(X);
[x2,y2]=size(Y);
vectX=reshape(RES(1,:),x1,y1); 
vectY=reshape(RES(2,:),x2,y2); 

% Affichage des vecteurs déplacement
figure
quiver(X,Y,vectX,vectY) 
colormap hsv

% On retourne à la résolution supérieure
imageMVT1=MVT(imageBR1,RES,imageBRinter1);
figure;
subplot(1,2,1); imagesc(imageBRinter1);axis equal; colormap(gray);title('Image intermédiaire');
subplot(1,2,2); imagesc(imageMVT1);axis equal; colormap(gray); title ('Image résultat intermédiaire');

%% On recalcule Lucas Kanade sur notre image à résolution intermédiaire

% Calcul de Lucas Kanade

% Gradients
imageBRinter1=imageMVT1;
Im1fx=filter2(f,imageBRinter1,'same');    % Gradient selon x
Im1fy=filter2(f',imageBRinter1,'same');   % Gradient selon y
Imt=imageBRinter2-imageBRinter1; % Gradient temporel

[Lim,Cim]=size(imageBRinter1);

% Gestion des bords : suppression du bord  (épaisseur 10 pixels)
bord=10;
ix1=Im1fx(bord:Lim-bord,bord:Lim-bord); 
iy1=Im1fy(bord:Lim-bord,bord:Lim-bord); 
it=Imt(bord:Lim-bord,bord:Lim-bord);

% Transfert vecteurs colonnes
ix_y=[ix1(:),iy1(:)];
it=it(:);                              

% Calcul de u et v
ix_yINV=pinv(ix_y);                     % On inverse la matrice
fprintf('Lucas Kanade : le déplacement moyen est de (pixels) :\n')
-ix_yINV*it                             % Calcul des coordonnées du vecteur deplacement.


ModuloX=mod(Cim,5);% Nombre de blocs de taille (5*5) selon l'axe des abscisses
ModuloY=mod(Lim,5);% Nombre de blocs de taille (5*5) selon l'axe des ordonnées

k=1;% Variable d'itération
for i=1:5:Lim-ModuloY
    for j=1:5:Cim-ModuloX
    
    gradBlocX=Im1fx(i:i+4,j:j+4);  % Bloc de taille (5*5) du gradient selon x
    gradBlocY=Im1fy(i:i+4,j:j+4);  % Bloc de taille (5*5) du gradient selon y
    gradBlocTemp=imageBRinter2(i:i+4,j:j+4)-imageBRinter1(i:i+4,j:j+4); % Bloc de taille (5*5) du gradient temporel
    
    
    gradBlocX_Y=[gradBlocX(:),gradBlocY(:)];             
    gradBlocTemp=gradBlocTemp(:);  
    
    

gradBlocX_YINV=pinv(gradBlocX_Y);                   


res2=-gradBlocX_YINV*gradBlocTemp; % Vecteur déplacement de coordonnées u et v
RES2(:,k)=res2; % Tableau où on regroupe les coordonnées des vecteurs déplacement de chaque bloc
k=k+1;

    end
end

[V,W]=meshgrid(1:5:Cim-moduloX,1:5:Lim-moduloY);
[v1,w1]=size(V);
[v2,w2]=size(W);
VectX=reshape(RES2(1,:),v1,w1); 
VectY=reshape(RES2(2,:),v2,w2);  

% Affichage des vecteurs déplacement
figure
quiver(V,W,VectX,VectY) 
colormap hsv


% On repasse à la résolution initiale
imageMVT2=MVT(imageMVT1,RES2,im1);
figure;
subplot(1,2,1); imagesc(im1);axis equal; colormap(gray);title('Image initiale filtrée');
subplot(1,2,2); imagesc(imageMVT2);axis equal; colormap(gray); title ('Image résultat après la multi-résolution');


%% Conclusion
% On compare le résultat obtenu avec l'approche mutli résolution et l'image
% déplacée initiale

% Gradients
imagefinale=imageMVT2;
Im1fx=filter2(f,imagefinale,'same');    % gradient selon l'axe des abscisses
Im1fy=filter2(f',imagefinale,'same');   % gradient selon l'axe des ordonnées
Imt=im2-imagefinale;                    % gradient temporel

[Lim,Cim]=size(imagefinale);

% Gestion des bords : suppression du bord  (épaisseur 10 pixels)
bord=10;
ix1=Im1fx(bord:Lim-bord,bord:Lim-bord); 
iy1=Im1fy(bord:Lim-bord,bord:Lim-bord); 
it=Imt(bord:Lim-bord,bord:Lim-bord);

% Transfert vecteurs colonnes
ix_y=[ix1(:),iy1(:)];
it=it(:);                              

% Calcul de u et v
ix_yINV=pinv(ix_y); % On inverse la matrice
fprintf('Lucas Kanade : le déplacement moyen est de (pixels) :\n')
-ix_yINV*it % Calcul des coordonnées du vecteur deplacement.


ModuloX=mod(Cim,5);% Nombre de blocs de taille (5*5) selon x
ModuloY=mod(Lim,5);% Nombre de blocs de taille (5*5) selon y

k=1;% Variable d'itération
for i=1:5:Lim-ModuloY
    for j=1:5:Cim-ModuloX
    
    gradBlocX=Im1fx(i:i+4,j:j+4);  % Bloc de taille (5*5) du gradient selon x
    gradBlocY=Im1fy(i:i+4,j:j+4);  % Bloc de taille (5*5) du gradient selon y
    gradBlocTemp=im2(i:i+4,j:j+4)-imagefinale(i:i+4,j:j+4); % Bloc de taille (5*5) du gradient temporel
    
    
    gradBlocX_Y=[gradBlocX(:),gradBlocY(:)];              
    gradBlocTemp=gradBlocTemp(:);  
    
    

gradBlocX_YINV=pinv(gradBlocX_Y);                   


res3=-gradBlocX_YINV*gradBlocTemp; % Vecteur déplacement de coordonnées u et v
RES3(:,k)=res3; % Tableau où on regroupe les coordonnées des vecteurs déplacement de chaque bloc
k=k+1;

    end
end

[V,W]=meshgrid(1:5:Cim-moduloX,1:5:Lim-moduloY);
[v1,w1]=size(V);
[v2,w2]=size(W);
VectX=reshape(RES3(1,:),v1,w1); 
VectY=reshape(RES3(2,:),v2,w2); 

% Affichage des vecteurs déplacement
figure
quiver(V,W,VectX,VectY) 
colormap hsv

% On observe que le résultat n'est pas parfait mais cela est principalement
% du aux imperfections de l'image résultat : certains blocs déplacés
% apportent des discontinuités à l'image.
% On remarque en revanche que l'approche multi résolution permet d'adapter
% l'algorithme de Lucas & Kanade pour des déplacements importants.
##### SOURCE END #####-->   </body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -