Ich möchte ein Bild mit perspektivischer Verzerrung korrigieren. Ich habe Punkte der Ecken und ich habe auch einen Algorithmus, der erfüllt, was ich brauche, aber er führt wirklich langsam aus. Es hat 'imtransform' und 'maketform' Funktionen, die Matlab hat schnellere Funktionen für diese Aktionen. Also habe ich versucht, sie zu ersetzen, aber ich konnte es nicht richtig machen. Irgendwelche Hilfen werden geschätzt.Matlab Bild mit Bezug auf Eckpunkte korrigieren
Hier sind die Bilder dieser Frage klarer zu machen:
Eingangsbild mit bekannten Koordinaten (x, y):
und gewünschte Ausgabe:
Dieser Prozess wird im Abstand von 2 Sekunden ausgeführt, ich muss diesen Prozess durch neuen Matlab-Spaß ersetzen Aber ich konnte es nicht schaffen.
Old algorihm war:
%X has the clockwise X coordinates %Y has the clockwise Y coordinates
A=zeros(8,8);
A(1,:)=[X(1),Y(1),1,0,0,0,-1*X(1)*x(1),-1*Y(1)*x(1)];
A(2,:)=[0,0,0,X(1),Y(1),1,-1*X(1)*y(1),-1*Y(1)*y(1)];
A(3,:)=[X(2),Y(2),1,0,0,0,-1*X(2)*x(2),-1*Y(2)*x(2)];
A(4,:)=[0,0,0,X(2),Y(2),1,-1*X(2)*y(2),-1*Y(2)*y(2)];
A(5,:)=[X(3),Y(3),1,0,0,0,-1*X(3)*x(3),-1*Y(3)*x(3)];
A(6,:)=[0,0,0,X(3),Y(3),1,-1*X(3)*y(3),-1*Y(3)*y(3)];
A(7,:)=[X(4),Y(4),1,0,0,0,-1*X(4)*x(4),-1*Y(4)*x(4)];
A(8,:)=[0,0,0,X(4),Y(4),1,-1*X(4)*y(4),-1*Y(4)*y(4)];
v=[x(1);y(1);x(2);y(2);x(3);y(3);x(4);y(4)];
u=A\v;
%transfer fonksiyonumuz
U=reshape([u;1],3,3)';
w=U*[X';Y';ones(1,4)];
w=w./(ones(3,1)*w(3,:));
T=maketform('projective',U');
%transform uygulayıp resmi düzleştiriyoruz
P2=imtransform(I,T,'XData',[1 n],'YData',[1 m]);
, wenn es hilft, hier ist, wie ich "A" Matrix und U-Matrix erzeugt:
wow wirklich schneller ausgeführt, es ist etwa 0,2 Sekunden! 10x schneller Danke – vslzl
@vslzl Wenn diese Antwort genau das tut, was Sie brauchen, denken Sie bitte daran, es als akzeptiert zu markieren –