A Algebra Lineart
Por: GabrielSunip • 23/6/2017 • Projeto de pesquisa • 1.159 Palavras (5 Páginas) • 764 Visualizações
Foi colocada uma regua deitada e dela foi tirada uma foto.
Utilizando uma aplicação em c++, foi traçada dois segmentos de reta sobre a imagem da camera o primeiro segmento é delimitado pelos pontos(0,200) e (700,200) o segundo é definido pelos pontos (0,300) e (700,300);
O primeiro segmento(azul) passa em cima da medidade de 12,8 cm e o segundo segmento(verde) passa sobre a medida de 11 cm
Se criarmos um plano para a regua podemos dizer que:
A medida 11cm corresponde a (1, 11) que corresponde a (700,300) e 12,8cm corresponde a (1, 12.8) que corresponde a (700, 200) no plano de pixels (imagem da camera).
Logo podemos estabelecer uma relação entre esses dois espaços vetoriais
T * (1, 11) = (700, 300);
T * (1, 12.8) = (700, 200);
Sendo T: [pic 1]
(1, 11)*= (700, 300);[pic 2]
(1, 12.8) * = (700, 200)[pic 3]
Por definição
(x, y) * = (a*x + b*y, c*x + d*y);[pic 4]
Logo temos quatro equações:
a*x + 11*b = 700
c*x + 11*d = 200
a*x + 12.8*b = 700
c*x + 12.8*d = 300
Depois de resolvidas teremos
a = 700
b = 0
c = 911,111....
d = -55,555...
ou
T =[pic 5]
Para verificar a veracidade iremos aplicar o calculo de T * (1. 11) e T * (1 , 12.8)
T*(1, 11) = * (1,11) = (700*1 + 0*11, 911.111*1 + (-55.555)*11) =[pic 6]
= (700 + 0, 911.111 – 611,111) = (700, 300);
e
T*(12.8) = *(1, 12.8) = (700*1 + 0*12.8, 911.111*1 + (-55.555)*12.8)=[pic 7]
=(700+0, 911.111 – 711.1111) = (700 , 200);
Para verificar sua aplicação, vamos supor que se queira achar, na imagem, o ponto equivalente a medida de 11,5cm
Considerando 11,5cm como (1, 11.5) temos:
T * (1, 11.5) = (x, y)
* (1, 11.5) = (x, y)[pic 8]
Portanto:
[pic 9]
O ponto equivalente a (1, 11,5) na imagem seria o ponto (700, 272.222)
O terceiro segmento traçado(vermelho) é delimitado por (0,272.222) e (700, 272.222)
Sabendo que nesse caso
(, ) * = (x, y)[pic 10][pic 11][pic 12]
Podemos calcular qualquer ponto equivalente a uma certa medida na regua, ou qualquer medida equivalente a certo ponto.
Aplicação utilizada para traçar as linhas na imagem, usando a biblioteca OpenCV
//#include
#include
#include
using namespace cv;
int main5() {
Mat image; //Create Matrix to store image
VideoCapture cap; //initialize capture
cap.open(0);
namedWindow("window", 1); //create window to show image
Point pt1 = Point(0, 200);
Point pt2 = Point(700, 200);
Point pt3 = Point(0, 300);
Point pt4 = Point(700, 300);
Point pt5 = Point(0, 272);
Point pt6 = Point(700, 272);
Point pt7 = Point(200, 0);
Point pt8 = Point(200, 500);
while (1) {
cap >> image; //copy webcam stream to image
line(image, pt1, pt2, Scalar(255, 0, 0));
line(image, pt3, pt4, Scalar(0, 255, 0));
line(image, pt5, pt6, Scalar(0, 0, 255));
//line(image, pt7, pt8, Scalar(255, 0, 255));
imshow("window", image); //print image to screen
if (waitKey(30) >= 0) break;
}
imwrite("e:/ache.jpg", image);
return 0;
}
Em 3 eixos
Foi desenhado em um papel um plano de duas dimensões x e z sendo a terceira dimensão a altura y,formando assim um espaço vetorial de 3 dimensões que chamarei aqui de espaço 1
Sobre ele foi colocado uma caixa, de modo que um canto da caixa estava sobre a origem do espaço
O segundo espaço é a imagem de uma webcam que possui duas dimensões x e y e é medido em pixels, chamaremos ele de espaço 2
Com a camera foi tirada uma foto, da caixa
Procura-se a correspondência do espaço 1 com o espaço 2
...