ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터 그래픽스 정리 (2) 3차원 뷰잉 모델과 기하 파이프라인
    Computer Graphics 2021. 10. 2. 23:58
    728x90
    3차원 뷰잉 모델과 기하 파이프라인

     

     

    [목차] 

     

    3차원 뷰잉 모델 &  기하 파이프라인

     

    Geometric Primitives 

     

    좌표계 Coordinates

    - 3차원 / 2차원

    - 동차 

     

    변환 Transformations 

    - 3차원

    - 2차원

     

     

     

    3차원 뷰잉 모델

     

     

     

    앞서 (1) 에서 나왔던 렌더링 파이프라인의 여러 단계 중, 기하 파이프라인의 목적

    = 가상의 세상에 카메라의 위치와 방향을 고정하고 구도를 잡았을 때, 다면체 모델로 표현된 각 물체가 화면의 어디에 떨어질 것인가! 결정  

     

    -> 이를 위해, 3차원 공간인 가상의 세상에서 정의된 물체의 각 꼭짓점이, 2차원 공간인 화면의 어느 지점에 나타날지 결정해주는 계산 (3차원 공간에서 2차원 공간으로의 기하학적 좌표 변환에 대한 계산) = 3차원 뷰잉 

     

     

     

     

    Geometric Primitives

     

     

     

    Geometric Primitives 

     

     

    : 컴퓨터 그래픽스에서 기하 물체를 표현하는 데 있어 가장 기본이 되는 요소 

    : 일반적으로 점, 선분, 다각형, 다면체 등의 Linear Primitive를 사용한다. 즉, 수학적으로 1차식으로 표현될 수 있는 선형적인 요소! ( 2차 이상의 식으로 표현했을 때 계산 복잡도가 상승하기 때문에)

    : 위 네 가지 요소들로 기하 물체를 표현하는 것을 다면체 모델로 모델링한다고 한다!  

     

     

    : 다면체(polyhedron)는 다각형(polygon)으로 구성되고, 다각형은 선분(linear segment)으로, 선분은 꼭짓점(vertex)으로 구성된다 

     

    -> 기하 물체를 표현하는 데 있어 가장 기본이 되는 연산은 바로 꼭짓점의 좌표를 나열하는 것!

    OpenGL에서는 glVertex() 함수! 프리미티브들을 기술하는 어떤 방식이든 항상 glVertex()을 통해 기술해야 함! 

     

     

    -> 가장 중요한 geometric primitive는 다각형!

    OpenGL에서는 다각형이라는 기하 프리미티브에 몇 가지 제한을 두며, 그 요구 사항을 모두 만족하는 다각형에 대해서만 정확한 렌더링 보장ㅇㅇ 

     

    <요구 사항> 

    (1) 한 다각형을 구성하는 선분들이 서로 교차하면 안 된다

    (2) 볼록 다각형을 사용해야 한다

    (3) 3차원 공간에서 정의된 다각형의 꼭짓점이 모두 한 평면 위에 존재해야 한다 

     

    -> 이를 항상 만족시키는 다각형은 바로 삼각형이며, 이를 이유로 다면체 모델을 만들 때 삼각형을 가장 자주 사용한다 

     

     

     

     

     

     

    좌표계 Coordinates

     

     

     

    월드 좌표계와 카메라 좌표계3차원 좌표계 (3D Coordinates) 이고, 정규좌표계와 픽셀좌표계/영상좌표계2차원 좌표계 (2D Coordinates)

     

     

    1) 3D Coordinates

     

     

    (1) 월드 좌표계 (World Coordinate System)

     

     

    : 우리가 살고 있는 공간의 한 지점을 기준으로 한 좌표계 

    : 문제에 따라서 우리가 임의로 잡아서 사용할 수 있는 좌표계

     

    : 좌표의 단위(unit)는 미터로 해도 되고 센티미터로 해도 됨

    : 좌표는 대문자로 표기

     

     

     

    (2) 카메라 좌표계 (Camera Coordinate System)

     

     

    : 카메라를 기준으로 한 좌표계

     

    : 카메라의 초점(렌즈의 중심)을 원점으로, 카메라의 정면 광학축 방향을 Z축, 카메라 아래쪽 방향을 Y축, 오른쪽 방향을 X축

     

    : 카메라 좌표계의 단위는 월드좌표계와 동일해야 함

    : 좌표는 대문자로 표기

     

     

     

     

    * ) 오른손 좌표계와 왼손 좌표계

     

     

    : 2차원 좌표계와는 달리, 3차원 좌표계에서는 x축과 y축 외에 추가로 존재하는 z축의 방향을 정확하게 규정하지 않으면 문제가 생김

     

    : 왼손 좌표계 - x축과 y축을 자연스럽게 종이에 그렸을 때 z축이 종이로부터 바깥쪽으로 나올수록 값이 증가하도록 설정

    : 오른손 좌표계 -  z축이 반대 방향, 즉 종이의 안쪽으로 들어갈수록 값이 증가하도록 설정 

     

    -> 두 좌표계의 유일한 차이점 : z축 방향! (따라서 한 좌표계에서 다른 좌표계로 바꾸려면 z축 부호만 바꾸면 된다 )

     

     

     

     

    2) 2D Coordinates

     

     

    (1) 픽셀좌표계 (Pixel Image Coordinate System) / 영상 좌표계 (Image Coordinate System)

     

    : 우리가 실제 눈으로 보는 영상에 대한 좌표

     

    : 이미지의 왼쪽상단(left-top) 모서리를 원점, 오른쪽 방향을 x축 증가방향, 아래쪽 방향을 y축 증가방향

    : 픽셀 좌표계 / 영상 좌표계의 x축, y축에 의해 결정되는 평면을 이미지 평면 (image plane)이라 함

     

     

    : 3D 공간 상의 한 점 P = (X,Y,Z)는 카메라의 초점 (또는 렌즈의 초점)을 지나서 이미지 평면의 한 점 pimg = (x, y)에 투영(projection)됨

    : 점 P와 점 pimg를 잊는 선(ray) 상에 있는 모든 3D 점들은 모두 pimg로 투영

    : 따라서 3D 점 P로부터 pimg는 유일하게 결정할 수 있지만, 반대로 영상 픽셀 pimg로부터 P를 구하는 것은 부가적인 정보 없이는 불가능

     

    : 픽셀 좌표계 / 영상 좌표계의 단위는 픽셀 (pixel)

    : 좌표는 소문자로 표기

     

     

     

    (2) 정규좌표계 (Normalized Image Coordinate System)

     

     

     

    : 카메라의 내부 파라미터(intrinsic parameter)의 영향을 제거한 이미지 좌표계

    : 좌표계의 단위를 없앤(정규화된) 좌표계

    : 카메라 초점과의 거리가 1인 가상의 이미지 평면을 정의하는 좌표계

     

    -> 원래의 이미지 평면을 평행이동시켜서 카메라 초점과의 거리가 1인 지점으로 옮겨놓은 이미지 평면

     

    : 정규 좌표계의 원점은 정규 이미지 평면의 중점 (카메라 좌표계에서의 정면 광학축 Zc와의 교점)

    : 좌표축은 픽셀 좌표계와 구분하기 위해 u, v를 사용

    : 카메라 내부 파라미터를 알면 픽셀 좌표와 정규 좌표 사이의 변환이 가능 ! 

     

     

    : 정규 이미지 평면과 정규 좌표계를 도입한 이유

       - 동일한 장면을 동일한 위치와 동일한 각도에서 찍더라도 사용한 카메라에 따라서 또는 카메라 세팅에 따라서 서로 다른 영상을 얻게 되기에! 이러한 카메라 간의 차이는 어떤 일관된 기하학적인 해석을 하는데 있어서 불필요한 요소

    => 정규화된 이미지 평면에서 공통된 기하학적 특성을 분석하고 이론을 수립하는 것이 보다 효과적 !

     

     

     

     

    3 ) Homogeneous Coordinates

     

    : OpenGL에서는 3차원의 좌표를  (X, Y, Z)가 아니라 (X, Y, Z, 1)나 (wX, wY, wZ, w)로 표현

    : homogeneous 좌표계를 사용하면, affine 변환이나 perspective(projective) 변환을 하나의 단일(single) 행렬로 표현할 수 있기 때문

     

     

     



    유클리드 기하학 ( Euclid Geometry ): 우리가 흔히 알고 있는 것처럼, 2차원의 공간을 (x, y)로 표현하며, 이를 2차원 유클리드 공간 (Euclidean Space)이라고 부른다! 아핀 공간에 거리의 개념이 들어간 공간 


    아핀 공간 (Affine Space): 점과 벡터로 이뤄진 공간 


    -> 유클리드 공간과 아핀 공간은 기하학에서 기본이 되면서도 종종 불완전한 공간임!

    (아핀 공간의 경우, 평면 상의 점과 벡터가 모두 (x,y) 형태로 표현되기에 그 의미가 다르게 해석되는 점이 부자연스러움)




    => 이를 해결하기 위해 "투영 기하학 (Projective Geometry) "을 도입! 


    투영 공간 (Projective Space) : 여기서는 2차원 공간의 점을 표현하기 위해 (x,y) 형태가 아니라 (X,Y,Z) 형태로 나타내는 동차 좌표계(Homogeneous Coordinates)를 사용한다! 


    - 동차 좌표계를 사용하여 표현한 어떤 좌표에 0이 아닌 상수를 곱해 다른 좌표를 만들 수 있으면, 두 좌표는 투영 공간에서 같은 점을 나타내게 된다!
    ( = 유클리드 공간 또는 아핀 공간의 모든 점이 투영 공간에 포함된다 )


    - 투영 공간에서 W가 0이 아닌 점들과 0인 점들은 유클리드 공간에서 각각 점과 벡터에 자연스럽게 대응됨! 따라서 투영 공간은 유클리드 공간이나 아핀 공간에 존재하는 점에다가 방향을 나타내는 모든 벡터들을 더한 공간!


    - 우리가 보는 카메라 영상은 3차원 공간에 있는 점들을 이미지 평면에 투영(projection)시킨 것! 카메라 초점과 투영된 점을 연결하면 하나의 긴 투영선(projection ray)이 나옴

    -> 이 선 상에 있는 모든 점들은 모두 동일한 한 점으로 투영, 이미지 평면상의 한 점에 대한 homogeneous 좌표라는 것은 이 점으로 투영되는 (ray 상의) 모든 점들을 한꺼번에 표현



    homogeneous 좌표 (x, y, z)에서 (x/z, y/z)를 구하는 것은 projection (투영)
    반대로, (u, v)를 homogeneous 좌표 (wu, wv, w)로 표현하는 것은 inverse projection (역투영)

     

     

     

    Geometric Transformations

     

    기하 파이프라인의 주 목적 : 가상의 세상에 카메라의 위치와 방향을 고정하고 구도를 잡았을 때, 다면체 모델로 표현된 각 물체가 화면의 어디에 그릴 것인가

    -> 이를 위해, 각 물체의 다면체 모델에 대한 기하 변환(Geometric Transformations) 필요! 

     

    변환에는 다양한 종류가 있다. 분류의 기준은 변환된 후 그 물체의 특성이 어느 정도까지 보존되는가에 따른 것! 

    좌표 변환은 수학적으로 보았을 때 행렬연산으로 계산! 

     

     

    1) 2D Transformations

     

    아무래도 가장 중요하게 봐야 하는 건 Affine Transformation!  

     

     

    (1) Rigid Transformation / Euclidean transformation

     

     

    : 형태와 크기를 유지한 채, 위치와 방향(rotation)만 바뀔 수 있는 변환 (강체이기 때문에 변환시킨 후에도 변환 하기 전의 속성을 그대로 가진다. 즉 크기도 보존되고 각도 역시 보존된다)

    : 회전(rotation)과 평행이동(translation)만을 허용하는 변환

     

     

     

    (2) Similarity Transformation

     

     

    : 닮음 변환은 rigid 변환에 추가적으로 스케일 변화까지 허용한 변환

     

     

    (3) Linear Transformation

     

     

     

     

    (4) Affine Transformation

     

     

    : 기하 물체의 선형성을 유지 

    : 아핀 변환에는 이동 변환, 크기 변환, 회전 변환, shearing, 반사 (reflection) 등이 있다!  

    사진은 3차원 변환 

     

    - 이동 변환 

     

    * 유클리드  : 행렬 덧셈

    * 동차 : 행렬 곱셈

     

     

     

    - 크기 변환

     

    * 유클리드 : 행렬 곱셈

     

    * 동차 : 행렬 곱셈

     

     

     

    - 회전 변환

     

    * 유클리드 : 행렬 곱셈

     

     

    * 동차 : 행렬 곱셈

     

     

    - shearing : 좌표축 방향으로 shift 시키는 변환

     

     

     

    - Reflection

     

    * x축 대칭

    * y축 대칭

    * 원점대칭

     

     

    (5) Projective Transformation (Homography)

     

     

    : 각도는 변하고 선만 보존되는 변환 (선의 성질은 보존되어 곡선으로 되지는 않는다)

    : 원근감을 표현하기 위해 필요한 변환이며, 입체를 평면이 투영할때도 꼭 필요한 변환

     

    : 2D 평면에서 임의의 사각형을 임의의 사각형으로 매핑시킬 수 있는 변환이 homography

    : 어떤 planar surface가 서로 다른 카메라 위치에 대해 이미지 A와 이미지 B로 투영되었다면 이미지 A와 이미지 B의 관계를 homography로 표현할 수 있다

     

     

     

     

     



    *) 2D 변환 모델을 선택할 때 고려할 사항


    먼저, homography는 위 <그림 1>의 고양이 그림판과 같은 planar한 물체에 대한 변환 모델입니다 (homography 뿐만 아니라 affine, similarity 등도 모두 평면형 물체에 대한 변환 모델입니다). 따라서 주사위 등과 같은 3차원 (입체) 물체의 매핑 관계는 homography만으로는 표현이 안됩니다 (이 경우는 3D 변환 모델이 필요할 것입니다).  물론 주사위의 각각의 면은 homography로 매핑시킬 수 있습니다. 그렇다고 3D 물체에 2D 변환을 사용하지 못하는 것은 아닙니다. 카메라에 아주 근접한 경우가 아니라면 대부분의 물체는 평면으로 가정해도 큰 무리가 없기 때문입니다. 예를 들어, 사람 얼굴을 찾거나 추적하는 경우에 고개를 옆으로 돌리지 않는 한 얼굴 모습은 크게 바뀌지 않습니다.


    Homography는 가장 일반적인 2D 변환 모델이며 planar한 물체의 모든 가능한 3D 변화를 표현할 수 있는 모델입니다. 하지만 일반적인 만큼 데이터에 overfitting 될 수 있는 위험성도 가지고 있습니다. 따라서 이 위험도를 줄이기 위해서는 문제의 특성에 따라 가능한 낮은 자유도의 변환을 사용하는 것이 좋습니다. 하지만 위 <그림 1>처럼 3D 공간에서 자유롭게 움직이는 물체를 검출하기 위해서는 어쩔 수 없이 homography를 사용해야 합니다.


    Detection과 Tracking의 차이. Detection 문제에 있어서는 문제 특성에 따라 적절한 변환을 선택하면 되지만, tracking의 경우에 있어서는 3D 모션이 있더라도 굳이 homography를 사용할 필요가 없으며 대부분 similarity나 affine으로 충분합니다. 그 이유는 인접한 영상 프레임 사이에는 변화가 그리 크지 않기 때문입니다.


    마지막으로, homography나 affine을 사용하면 가끔 말도 안되게 매핑이 되는 경우를 종종 발견할 수 있을 것입니다. 그 경우는 바로 매핑이 뒤집혀진(reflected) 경우인데, 그건 affine과 homography가 reflection을 포함하기 때문입니다. 그런데 영상인식 관점에서는 이 reflection이 불필요한 경우가 대부분입니다. 예를 들어, <그림 1>에서 고양이 그림판이 뒤집혀서 뒷면이 보이는 경우까지를 고려하는게 합당할까요? DB에 저장된 고양이 그림과 그림판의 뒷면(뒷면에는 과연 뭐가 있을까요?)을 매칭시키는 것은 패턴매칭 관점에서 말도 안되며 가능하지도 않습니다. 따라서 homography나 affine을 사용할 경우에는 추정된(estimated) 변환에 reflection이 포함되었는지를 조사하여 reflection이 들어간 경우에는 추정이 잘못된 것으로 판단하는게 좋습니다.



     

     

     

     

    2) 3D Transformations 

     

     

    3D 변환은 회전과 평행이동 (즉, rigid 변환) 뿐! 

     

     

     

    - 이동변환(= 평행이동) Translation: 행렬 덧셈

     

     

     

    - 회전변환 Rotation: 행렬 곱셈


    z축 회전변환

     

    y축 회전 변환

     

    x축 회전 변환

    임의의 축 회전 변환

     

     

     

    - 사이즈변환 Scaling: 행렬 곱셈

     

     

     

     

    - z축 대칭이동 Reflection

     

     

     

     

     

     

    * ) 3D 좌표계 변환 방법 (예: 월드 좌표계 -> 카메라 좌표계)







    방법 1) 회전변환을 조합하는 방법





    방법 2) 변환행렬을 직접 구하는 방법



    참고: https://darkpgmr.tistory.com/84?category=460965



     



    * ) 2D 좌표계 변환 방법 ( 픽셀 좌표계 < -> 정규 좌표계 )








    여기서 fx, fy는 초점거리, cx, cy는 주점(principal point, 광학축과 영상평면이 만나는 픽셀좌표)이며, 가운데 3 x 3 행렬을 camera matrix라 부릅니다. 위 식을 정리하면 다음과 같은 식이 됩니다.





    역으로, 이미지 상의 픽셀 (x, y)에 대응하는 정규좌표는 다음과 같이 계산됩니다.




     

     

     

    참고: 

     

    https://darkpgmr.tistory.com/77

     

    [영상 Geometry #1] 좌표계

    이번 글은 컴퓨터 비전에서 가장 어렵고 골치아픈 주제중 하나인 영상 geometry(기하학?)에 대한 것입니다. 영상 Geometry는 카메라 캘리브레이션, 스테레오 매칭, structure from motion, 모션 추정, local fe

    darkpgmr.tistory.com

     

    https://darkpgmr.tistory.com/78

     

    [영상 Geometry #2] Homogeneous Coordinates

    (3D 비전 geometry 2번째 파트 homogeneous coordinates 입니다) 2. Homogeneous Coordinates 먼저, 들어가기 앞서 http://blog.daum.net/shksjy/229 글을 읽어보기를 추천합니다. Homogeneous Coordinate에 대한..

    darkpgmr.tistory.com

     

    https://blog.daum.net/shksjy/229

     

    [영상처리] 일지 17 Homogeneous Coordinates에 대해서.....

    일지 17 : Homogeneous Coordinates 변환을 행렬로 표현하여, 변환된 점P'을  변환전의 점P와 변환행렬의 곱으로 표현하는 것이 속도면에서나 다루는 면에서 아주 장점을 많이 가지고 있다. 앞 일지에서

    blog.daum.net

     

    https://darkpgmr.tistory.com/84?category=460965 

     

    3D 좌표계 변환 방법 (예: 월드좌표계 - 카메라 좌표계)

    3차원 공간에서 좌표축 또는 좌표계를 변환하는 방법입니다. 3D 월드 좌표계를 카메라 좌표계로 변환하는 것을 예로 들어 설명하겠습니다. 즉, 월드 좌표계(world coordinate system)에서의 점 (X, Y, Z)로

    darkpgmr.tistory.com

     

    https://blog.daum.net/shksjy/228?category=2098822 

     

    [영상처리] 일지 16: Transformations -- 기본적이며 전반적 이해를 위해

    일지 16 : Transformations(변환) 아무 개념없이 이미지의 이동/ 회전/ 확대를 앞 일지에서 하였다. 그러다가 원근변환을 해야하는 일이 있어 공부해보니 이 모든 것이 다 변환이었다. 그래서 영상처리

    blog.daum.net

     

    https://justdoitproject.tistory.com/39

     

    [CG]컴퓨터 그래픽스 03. 기하 변환 Geometric Transformation

    2020/04/06 - [CSE] - [CG] 컴퓨터그래픽스 01.기본개념 2020/04/06 - [CSE] - [CG] 컴퓨터그래픽스 02. Rasterization 2020/04/07 - [CSE] - [CG]컴퓨터 그래픽스 03. 기하 변환 Geometric Transformation 첫번째..

    justdoitproject.tistory.com

     

    https://darkpgmr.tistory.com/79

     

    [영상 Geometry #3] 2D 변환 (Transformations)

    (3D 비전 geometry 3번째 파트 2D 변환입니다) 3. 2D 변환 (2D Transformations) 변환에 대해서는 2D 변환과 3D 변환을 구분해서 설명하겠습니다. 2D 변환은 detection 또는 tracking 문제에 있어서 아래 그림과..

    darkpgmr.tistory.com

     

    https://darkpgmr.tistory.com/81

     

    [영상 Geometry #5] 3D 변환

    (3D 비전 geometry 4번째 파트 3D 변환입니다) 4. 3D 변환 (3D Transformations) 컴퓨터 비전에서 관심있는 3D 변환은 회전과 평행이동 뿐입니다 (즉, rigid 변환). 하늘에 떠 있는 비행기가 갑자기 커지거나 로

    darkpgmr.tistory.com

     

    728x90
Designed by Tistory.