문제

안녕하세요, 수학 괴짜 여러분, 한동안 저를 괴롭혔던 문제가 있습니다.개인 프로젝트용입니다.

세 개의 점이 있습니다.빨간색, 녹색, 파란색.빨간색 점이 왼쪽 아래(0,0)에 있고, 파란색 점이 오른쪽 아래(1,0)에 있고, 녹색 점이 왼쪽 위에 있도록 카드보드 전표에 배치되어 있습니다.뒤로 물러서서 비스듬히 카드 사진을 찍는다고 상상해 보세요.사진에서 각 점의 중심을 찾으려면(단위는 픽셀이라고 가정) 사진에서 카메라를 기준으로 카드 면의 법선 벡터를 어떻게 찾을 수 있습니까?

이제 이 문제에 대해 제가 알아낸 몇 가지 사항은 다음과 같습니다.

  1. ("실제 생활"에서) 점들은 항상 직각을 이루고 있습니다.사진에서 카메라가 "축"(빨간색과 파란색 또는 빨간색과 녹색 점으로 생성된 선인 축)을 따라 빨간색 점 주위로 회전한 경우에만 직각에 있습니다.
  2. 카드의 한 면에만 점이 있습니다.따라서 당신은 결코 그것의 뒤를 보지 않을 것이라는 것을 알고 있습니다.
  3. 카드와 카메라의 거리는 중요하지 않습니다.각 점의 깊이를 안다면 훨씬 더 쉬울 것입니다(간단한 교차곱이죠?).
  4. 카드의 회전은 내가 찾고 있는 것과 관련이 없습니다.이것을 알아내기 위해 내가 해왔던 작업에서 결국 법선 벡터의 도움으로 회전을 찾을 수 있습니다.회전이 법선 벡터를 찾는 것의 일부(또는 결과)인지 여부는 나에게 알려져 있지 않습니다.

이 작업을 수행했거나 수학 천재인 누군가가 있기를 바랍니다.여기에는 내 친구 두 명이 나를 도와주고 있는데 지금까지 우리는 성공하지 못했습니다.

도움이 되었습니까?

해결책

나는 이전 버전의 Mathcad에서 해결했습니다.

alt text

편집 : Mathcad의 스크린 샷에서 잘못된 문구 : "알려진 : g 그리고 ~이다 수직 서로에게"

Mathcad에서 나는 교차 제품을 수행하는 마지막 단계를 잊어 버렸습니다. 여기서는 이전 답변에서 여기에서 복사 할 것입니다.

이제 우리는 번역 된 G와 B 포인트의 XYZ를 해결했으며, 원래 질문은 평면의 정상을 원했습니다.

크로스 g 엑스 , 우리는 벡터를 둘 다 정상화 할 것입니다.

        | u1  u2  u3 |
g x b = | g1  g2  g3 |
        | b1  b2  b3 |  

      = (g2b3 - b2g3)u1 + (b1g3 - b3g1)u2 + (g1b2 - b1g2)u3

모든 값이 알려져 있습니다. 플러그를 꽂습니다 (G3 및 B3가 대체 된 버전을 쓰지 않습니다. 너무 길고 추악하기 때문에 도움이되기 때문입니다.

그러나 실용적으로, 나는 당신이 수치 적으로 해결하고 조정해야한다고 생각합니다. g 그리고 조건에 가장 잘 맞도록 :

g · = 0

그리고

|g| = ||

픽셀은 대수적으로 완벽하지 않기 때문에.

예시

Apollo 13 우주 비행사의 사진을 사용하여 명령 모듈의 정사각형 리튬 수산화 리튬 Cannister 중 하나를 리깅하여 LEM에서 일할 수 있습니다.

alt text

그것들을 XY 평면의 기초로 사용 :

alt text

Photoshop을 사용하여 픽셀 위치를 기록했으며, 오른쪽에 x 양의 x, z의 오른쪽 규칙을 유지하기 위해 "~ 안으로" 사진):

g = (79.5, -48.5, g)

= (-110.8, -62.8, b)

두 개의 시작 공식을 Excel에 펀칭하고 Analysis Toolpack을 사용하여 "최소화하십시오"조정하여 오류 g 그리고 , 그것은 두 가지 z 값을 만들었습니다.

g = (79.5, -48.5, 102.5)

= (-110.8, -62.8, 56.2)

그런 다음 다른 흥미로운 가치를 석양 할 수 있습니다.

길이 g 그리고 픽셀로 :

|g| = 138.5

|| = 139.2

일반 벡터 :

g 엑스 = (3710, -15827, -10366)

단위 정상 (길이 1) :

N = (0.1925, -0.8209, -0.5377)

정상을 동일한 길이 (픽셀)로 스케일링 g 그리고 (138.9):

정상 = (26.7, -114.0, -74.7)

이제 나는 정상이 같은 길이와 같은 g 그리고 , 나는 같은 그림에 그것들을 그렸습니다.

alt text

카메라 렌즈가 도입 한 새로운 문제가 있다고 생각합니다. 3 개의 점은 2 차원 사진 평면에 완벽하게 투사되지 않습니다. 직선이 더 이상 직선이 아니고, 같은 길이를 더 이상 같지 않으며, 정상을 약간 정상으로 만들 수있는 구형 왜곡이 있습니다.

Microsoft Research에는 카메라의 왜곡을 수정하는 방법을 알아내는 알고리즘이 있습니다.

카메라 교정을위한 유연한 신기술

그러나 그것은 나를 넘어선다 :

카메라를 쉽게 교정하기 위해 유연한 신기술을 제안합니다. 3D 지오메트리 또는 컴퓨터 비전에 대한 전문 지식없이 사용하기에 적합합니다. 이 기술은 카메라가 몇 가지 (최소 2 개) 다른 방향으로 표시된 평면 패턴을 관찰해야합니다. 카메라 또는 평면 패턴을 자유롭게 이동할 수 있습니다. 움직임을 알 필요는 없습니다. 방사형 렌즈 왜곡이 모델링됩니다. 제안 된 절차는 폐쇄 형식 솔루션으로 구성되며, 최대 가능성 기준에 기초한 비선형 개선이 이어집니다. 컴퓨터 시뮬레이션과 실제 데이터는 제안 된 기술을 테스트하는 데 사용되었으며 매우 좋은 결과를 얻었습니다. 2 개 또는 3 개의 직교 평면과 같은 고가의 장비를 사용하는 고전 기술과 비교하여 제안 된 기술은 사용하기 쉽고 유연합니다. 실험실 환경에서 실제 사용에 이르기까지 3D 컴퓨터 비전을 발전시킵니다.

왜곡을 볼 수있는 샘플 이미지가 있습니다.

alt text
(원천: Microsoft.com)

메모

  • 골판지의 "상단"또는 "하단"을 볼 수 있는지 알지 못하므로 정상은 수직으로 미러링 될 수 있습니다 (예 : z = -z)

업데이트

Guy는 파생 된 대수식에서 오류를 발견했습니다. 그것을 고치면 내가 생각하지 않는 공식으로 이어집니다. 간단한 닫힌 형태가 있습니다. 어쨌든 정확하게 해결할 수 없기 때문에 이것은 나쁘지 않습니다. 그러나 수치 적으로.

다음은 두 가지 알려진 규칙으로 시작하는 Excel의 스크린 샷입니다.

g · = 0

그리고

|g| = ||

두 번째를 차이 ( "오류"금액)로 쓰면 해당 값을 모두 추가하고 숫자로 사용할 수 있습니다. 최소화하십시오:

alt text

이것은 당신이 자신의 숫자 반복 솔버를 작성해야한다는 것을 의미합니다. 나는 내 것을 쳐다보고있다 엔지니어를위한 수치 적 방법 대학 교과서; 간단한 닫힌 양식없이 재귀 방정식을 해결하기위한 알고리즘이 포함되어 있습니다.

다른 팁

그것의 소리에서, 당신은 세 가지 점이 있습니다 1, 2, 그리고 3 평면을 정의하면 평면의 일반 벡터를 찾고자합니다.

원점에서 벡터로 점을 나타내는 정상 벡터에 대한 방정식 할 것입니다
N = (2 - 1)엑스(3 - 1)
(여기서 X는 두 벡터의 교차 제품)

벡터가 앞쪽 카드의 다음 오른쪽 규칙을 Ala,
1 = 빨간색 (하단) 도트
2 = 파란색 (낮은 오른쪽) 도트
3 = 녹색 (상단) 도트

@ Ian Boyd... 설명이 마음에 들었는데, 문제를 해결하라고 했을 때 2단계에서 막혔어요. .넌 아직 갖고 있었어 당신의 대답에, 나는 당신이 그렇게해서는 안된다고 생각합니다 당신의 대답에 ...

+/- 제곱근이어야 합니다. g엑스2 +g와이2 +g2 -b엑스2 -b와이2

제가 직접 해본 후 대체하기가 매우 어렵다는 것을 알았습니다. g를 풀 때 첫 번째 방정식에, 왜냐하면 b를 대체할 때, 이제 다음을 얻게 됩니다.

g = -(g엑스엑스 +g와이와이) / sqrt(g엑스2 +g와이2 +g2 -b엑스2 -b와이2 )

이것을 어렵게 만드는 부분이 있다는 것이다. g 제곱근이므로 분리해서 결합해야 합니다. g 함께, 그리고 해결하다 g 내가 그랬지만, 내가 해결한 방식이 옳다고 생각하지 않습니다. 왜냐하면 내가 계산 프로그램을 작성할 때였기 때문입니다. g 나를 위해 나는 당신을 사용했습니다 g엑스, 그리고 g와이 내 답변이 귀하의 답변과 일치하는지 확인하기 위해 값을 사용했지만 일치하지 않았습니다.

그래서 나는 이것이 내 프로젝트 중 하나에서 작동하도록 해야 하기 때문에 당신이 나를 도와줄 수 있는지 궁금합니다.감사해요!

여기서 내 발을 생각하는 것만으로도.

효과적인 입력은 명백한 비율 RB/RG [+], 겉보기 각도 BRG 및 RB가 화면 좌표 y 축을 사용하여 만드는 각도입니다 (무엇이든 놓쳤습니까). 정규화 된 정상 (HEH!) 벡터의 구성 요소가 필요합니다. 벡터는 두 개의 독립적 인 값이라고 생각합니다 (카드가 보이는 경우 앞면 모호성이 남아 있지만) [++

그래서 이것이 가능하다고 생각합니다 ...

여기서부터 나는 RB의 명백한 각도가 항상 0이라는 가정에 대해 노력하고 나중에 z 축 주위에서 최종 솔루션을 회전시킬 수 있습니다.

시야 평면과 평행 한 카드로 시작하고 "자연적인"방식으로 지향합니다 (즉, 상단 대 하단 및 왼쪽 대 오른쪽 과제는 존중됩니다). 우리는 회전하여 카드의 모든 흥미로운 위치에 도달 할 수 있습니다. \theta 초기 x 축 주위 (for -\pi/2 < \theta < \pi/2), 그런 다음 회전합니다 \phi 초기 y 축 주위 (for -\pi/2 < \phi < \pi/2). RB 벡터의 명백한 방향을 보존했습니다.

다음 단계는 \theta 그리고 \phi 결과를 반전합니다. [+++

정상이 될 것입니다 R_y(\phi)R_x(\theta)(0, 0, 1) ~을 위한 R_i 축 주위의 원시 회전 매트릭스 i.

+] 절대 길이는 계산되지 않습니다. 단지 카드까지의 거리를 알려줍니다.

++] 한 가지 더 가정 : 카드에서 평면까지의 거리가 카드 크기보다 훨씬 큽니다.

+++] 여기에서 3D 공간에서 관찰 비행기까지 사용하는 투영이 중요합니다. 이것은 어려운 부분이지만, 당신이 어떤 투영을 사용하고 있는지 말하지 않는 한 우리가 당신을 위해 할 수있는 일은 아닙니다. 실제 카메라를 사용하는 경우, 이것은 관점 투영이며 본질적으로 3D 그래픽의 모든 책으로 덮여 있습니다.

오른쪽, 일반 벡터는 거리에 따라 변하지 않지만 그림 위의 골판지 투영 하다 거리별로 변경 (단순 : 작은 골판지가있는 경우 아무것도 변경되지 않습니다. 1 마일 높이 1 마일, 높이가 1 마일이 있고 한쪽이 더 가까워지고 다른 쪽이 더 멀리 떨어져 있으면 회전하면 근처가 근처가 있습니다. 그림에서 확대되고 먼 쪽이 단축되었습니다. 직사각형이 직사각형이 아니라 공중 그네를 즉시 알 수 있습니다)

작은 각도와 중간을 중심으로하는 카메라의 대부분의 정확한 방법은 중간 줄의 "정상"이미지와 각도 이미지 사이의 너비/높이의 비율을 측정하는 것입니다 (뒤틀리지 않기 때문에).

우리는 x를 왼쪽에서 오른쪽으로, y로, 위로, z를 멀리서 가까이서 정의합니다.

그 다음에
x = arcsin (measuredwidth/normwidth) 빨간색
y = arcsin (측정 값/Normheight) 적색 녹색
z = sqrt (1.0-x^2-y^2)

나는 내일 더 정확한 해결책을 계산할 것이지만 지금은 너무 피곤하다 ...

당신은 u, v, n co-oridnates를 사용할 수 있습니다. "눈"또는 "카메라"의 위치로 관점을 설정 한 다음 x, y, z 코디네이트를 u, v, n으로 변환하십시오. 거기에서 원하는 경우 정상 및 관점 및 보이는 표면을 결정할 수 있습니다 (u ', v', n '). 또한 z = 0 인 2D = 3D를 명심하십시오. 마지막으로 균질 한 좌표를 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top