Si vous avez seulement l'image de la grille, vous pouvez essayer la fonction radon
de "Boîte à outils de traitement d'image". Il vous donnera des angles et de la transformation de radon, vous pouvez recalculer la distance entre les lignes de points sur votre image.
Voici un exemple de code pour radon
fonction
% First we generate a grid of points on image
ImgW = 400;
ImgH = 300;
DIdx = ImgH + round(rand(1)*ImgH/10);
ImgGrid = zeros(ImgH,ImgW);
ImgGrid(1:DIdx:end) = 1;
% Then we calculate radon transform
theta = 0:0.1:180;
[R,xp] = radon(ImgGrid,theta);
% Then we calculate standard deviation for each angle of R
Rstd = std(R);
% and find maximal value of std(R) columnwise
[RstdMax,RstdIdx] = max(Rstd);
ThMax = theta(RstdIdx);
% Now we show results
figure('Color','w');
subplot(2,2,1); imshow(ImgGrid);
axis on;
colormap(hot(255));
title('Grid image');
line(ImgW/2+[-1 +1]*min(ImgW,ImgH)/2*cosd(-ThMax), ...
ImgH/2+[-1 +1]*min(ImgW,ImgH)/2*sind(-ThMax), 'Color','y');
subplot(2,2,3); plot(xp,R(:,RstdIdx),'.-');
title(sprintf('Profile at %.2f deg (the yellow line)',ThMax));
subplot(2,2,2); imagesc(log10(R+1), 'Xdata',theta, 'Ydata',xp);
axis on;
colormap(hot(255));
xlabel('\theta (degrees)');
ylabel('x''');
subplot(2,2,4); plot(theta,Rstd,'.-');
title('std(R)');
MAIS en cas général, ce ne vous donnera pas des vecteurs treillis pour la grille! Cela vous donnera seulement la distance entre les lignes de points à la place. Si vous avez besoin de vecteurs en réseau, vous devez les recalculer. Mais si vous êtes assez chanceux et que votre treillis est rectangulaire ... j'espère que vous avez compris: o)
Vous avez encore plus de chance si vous avez les coordonnées (x, y) de vos points. L'approche que CST-Link proposée est quelque peu "trop brutale". Je préférerais calculer le "facteur de structure" pour vos points (voir http://en.wikipedia.org/wiki/Structure_factor et les liens du tutoriel à la fin de l'article) et analyser ses maxima.
À quoi ressemble la grille? Si c'est rectangulaire alors la solution sera plus facile. – Justin
Il est en effet rectangulaire. Je travaille avec des données qui ressemblent à ceci: http://www-personal.umich.edu/~schmatz/grid.jpg – schmatz
Si vous pouvez réellement façonner la grille et lui garantir un rectangle, le point en haut à gauche sera la distance la plus proche de l'origine (supposée être en haut à gauche de l'image). Le point en bas à droite sera la distance la plus éloignée de l'origine. Vous pouvez former une ligne entre ces deux points; le point le plus éloigné de cette ligne sera le point en bas à gauche ou en haut à droite de la grille. Avec ces points, vous pouvez calculer la rotation de la grille. Vous pouvez voir comment j'ai utilisé ceci dans ma réponse ici: http://stackoverflow.com/questions/15604485/sorting-2d-points-into-a-matrix/15604867#15604867 – Justin