ImageTracking 시에 이미지 좌표를 알고싶습니다.
안녕하세요.
혹시 image Tracking시에 사용되는 이미지에 좌표값 혹은 Matrix를 알수있을까요?
생각하기로는 image Tracking시에 영상이 재생되는 위치는
쳐다보는 image의 네 개 꼭지점 좌표를 구한 뒤 영역을 계산해서 영상이 재생되는 위치가 결정되는 것 같은데
좌표를 구하기가 어려워 문의드립니다.
혹시 이미지에 좌표를 따로 구하는 것이 가능할까요??
안녕하세요.
MAXST SDK에 관심가져주셔서 감사합니다.
꼭지점의 이미지 상 좌표를 얻는 것은 나중에 설명드리겠지만, 좀 복잡한 연산이 필요합니다.
1) 먼저 이미지의 꼭지점 위치에 오브젝트를 증강시키는 방법에 대해서 설명드리겠습니다.
문의자께서 TargetManager에 입력한 가로 길이는 trackable.getWidth() 함수를 통해서 얻을 수 있습니다.
현재 getHeight() 함수는 없기에 실제 타깃의 height값을 m 단위로 측정한 값을 알고 계셔야 합니다.
만약 width는 0.26이고 hegith는 0.2 라면, 좌측 상단의 꼭지점의 좌표는 -0.13, -0.1 입니다.
증강시킬 오브젝트의 위치 값을 -0.13, -0.1, 0 으로 세팅하고 저희가 추적시 제공하는 ProjectionMatrix 와 trackable.getPoseMatrix 를 이용하여 증강시키면 좌측 상단 꼭지점 위치에 오브젝트가 증강됩니다.
2) 만약 문의자께서 직접 이미지 좌표를 얻길 원하신다면 다음과 같은 방법으로 계산해야 합니다.
위 상황과 마찬가지로 real width와 height가 각각 0.26, 0.2 라고 가정하겠습니다.
좌측상단의 꼭지점 좌표는 -0.13, -0.1 입니다.
저희가 추적시 제공하는 ProjectionMatrix를 P, trackable.getPoseMatrix()는 T라고 가정하겠습니다.
vector (-0.13, -0.1, 0, 1) 를 W라하면,
X = P * T * W 를 계산합니다.
(저희는 위 연산을 위해 따로 Matrix Library를 제공하지 않습니다.)
X의 각 원소를 X(0), X(1), X(2), X(3)라 하겠습니다.
ix = X(0) / X(3); iy = -X(1) / X(3); 를 먼저 계산하고,
ix = ix * (screen_width / 2.0) + (screen_width / 2.0);
iy = iy * (screen_height / 2.0) + (screen_height /2.0);
이렇게 얻어진 ix, iy가 현재 스크린 상의 좌측 상단 꼭지점 좌표입니다.
답변이 도움되셨길 바랍니다.
감사합니다.
John,
MAXST Support Team
참고로 SDK 3.5.2에서는 trackable.getWidth() 를 통해 width 값만을 얻을 수 있지만,
곧 출시할 SDK 4.0.0에서는 trackable.getHeight()가 추가됩니다.
이 함수를 통해 height 값도 얻을 수 있습니다.
John,
MAXST Support Team
빠른 답변 감사드립니다.
몇 가지만 더 여쭙고 싶습니다.
Trackable 클래스에는 getId, getName, getPoseMatrix 뿐이고 getHeight 함수는 없는데 다른 클래스에 있는 것인가요?
버전은 3.5.2 버전을 사용하고 있습니다.
->real width와 height가 각각 0.26, 0.2 라고 가정하겠습니다.
좌측상단의 꼭지점 좌표는 -0.13, -0.1 입니다.
일경우 좌측하단은 -0.13, -0.3이 되는것이 맞는건가요? (혹시 좌측상단이 -0.13, 0.1 이 아닌가 하여 여쭙습니다.)
마지막으로 ->vector (-0.13, -0.1, 0, 1) 를 W 라고 할때
네 개 꼭지점 모두 뒤에 두 개는 0, 1 을 넣어서 계산하면 되는지 여쭙고 싶습니다. 감사합니다.
1) 현 3.5.2 버전에는 getHeight 함수가 포함되지 않았습니다.
8월중 출시할 SDK 4.0.0 버전에는 getHeight가 포함될 예정입니다.
2) 좌측하단의 좌표는 -0.13, 0.1 입니다.
좀 더 자세한 이미지 타깃상 좌표계는
https://developer.maxst.com/MD/doc/g/coordi
를 참고하시기 바랍니다.
3) 맞습니다.
자꾸 질문 드리게 되어 죄송합니다.
그렇다면 동영상이 생성되는 좌표는 0.0 , 0.0 의 위치라고 할 때
동영상이 생성되는 위치를 10cm 내려서 즉, 0.0, -0.1 의 위치에 생기게 하는 것이
가능할까요???
만약에 Target Manager 에서 입력하신 real width 값이 실제로 비출 타깃의 실물 크기를 제대로 반영하셨다면
말씀하신대로 가능합니다.
그러면 어떤식으로 하면 되는지를 여쭈어봐도 될까요??
안녕하세요.
Target Manager에서 이미지 타깃을 업로드할 때 아래 그림과 같은 창이 보입니다.
Width를 입력할 때 실제로 출력한 이미지 타깃의 가로 길이를 정확히 입력하시면 됩니다.
만약 출력한 타깃의 가로 길이가 30cm라면 0.3을 입력하면 됩니다.
이렇게 실물 크기를 정확히 입력하고 0.0, 0.1, 0.0 위치에 증강시키면 동영상이 타깃 중심보다 10 cm 아래에 증강됩니다.
John,
MAXST Support Team
빠른 답변 감사드립니다.
그러면 settranslate(0.0,0.1,0.0 )으로 입력하면 될까요???
자꾸 질문드려 죄송합니다.
네.. 맞습니다.