SYDLAB_inha/Dynamic Mesh

VDMC - Apple's(2) / Pre-Processsing / decimation / re-parameterization / fitting

빈그레 2024. 1. 26. 19:59

 

 


Pre-Processing

 

 

 

 

 

 

 

Pre-Processing (2D-curve로 설명)

 

 

: 이번 게시글부터 Video based dynamic Mesh Coding의 알고리즘에 대하여 구체적으로 다루어볼 계획이다.

 첫 번째 과정인 Pre-Processing에 대해 먼저 설명한다. 아래 그림은 이전 게시글에서 pre-processing 과정으로 보여주었던 mesh의 변화 과정이다.

 

https://kycu-sb.tistory.com/183

 

이전 게시글에서 설명했던 Pre-Processing

 

//앞쪽 3개가 pre-processing단에서 이루어지는 거고, 마지막은,, decoder에 복원된다면 저렇게 생겼겠다~ 하는 의미인 듯

 

아래 그림은 제안하는 pre-processign sheme의 basic한 idea를 2D curve로 표현한 것이다. 

 

 

 

- Decimated

decimation이라는 게 결국 vertex 두개가 이루던 하나의 edge를 vertex 하나로 합쳐 edge를 사라지게 함으로써 데이터를 줄여나가는 것이다. 아래 그림에서 original의 vertex에서 근접한 위치에 있는 vertex들을 하나로 통합시키며 edge를 줄여나간 것을 확인할 수 있다.  decimation mesh는 encoder에 base mesh로서 전달된다.

//vertex 개수 기준으로 주기가 있기 보다는 각도가 일정 각도 이상으로 꺾이는 point 기준으로 decimated 되는 듯

 

- Sub_Division

decimated된 curve의 vertex 사이사이를 나눈다. 여기에서는 두 vertex 사이를 interpolation하는 division 방식이 사용되었다. interpolation은 edge의 middle에 new point를 찍는 방식으로 진행된다. 아래 그림에서는 2번의 sub-division이 적용되었다. Proposed Scheme에서 subdivion방식은 독립적으로 이루어지므로 어떠한 subdivision 방식과도 결합될 수 있다. 

//거리 상관없이 vertex 개수 주기 맞춰서 interpolation으로 subdivision

 

-Displaced

subdivision된 curve를 original curve와 더욱 유사하게 만들기 위하여 변형된다. 더 정확히는 각각의 vertex들의 original과의 차이를 의미하는 displacement vector가 계산된다.  Figure 4에서의 red vector가 이를 시각적으로 나타내고 있다.

 

 

 

 

3D Mesh에 이와 동일한 과정이 적용되어 base mesh와 displacement field를 생성한다. 

원본과의 차이값(displacement)가 제공된다면 sub_division을 통해 효율적인 압축이 가능해진다.

//일단 base mesh 간단히 보내고 subdivision한다음에 displacement만 더해주면 되니까

 

 

[ Compression Efficiency Properties ]

- 적은 비트수로 처리 가능
: decimated curve 즉 base curve는 더 적은 수의 vertex를 가져서 encoded나 transmitted될 때에, 제한적인 비트수로도 처리될 수 있다.

- curve 자동 생성
: Decoder moduel에서 base curve가 디코딩된다면 sub-division curve는 그걸 더 나누기만 하면 되니가 자동적으로 생성될 수 있다. // interpolation과 같은 subdivision type이나 subdivision iteration count 정보만 필요함

- 간단한 base mesh 정보로 displaced mesh 얻기
: base curve로부터 자동 생성된 subdivision curve의 vertex들과 연관된 displacement vector들을 decoding함으로써 원본과 비슷한 displaced curve를 얻을 수 있다. 
*** scalability : 확장성 / 유연하게 대응할 수 있는 정도

- 높은 압축 효율
: subdivision structure는 높은 압축 효율을 가능케하는 wavelet transform을 사용할 수 있다.
 ex) wavelet decomposition

 

 

 

Pre-processing System

 

 

- Mesh Decimation

simplification technique로 input mesh를 decimate하여 dm(i)를 생성한다.

//일정 거리 혹은 일정 각도 기준으로 vertex 줄여나갈 듯

 

 

- Atlas Parametrization

decimate하는 과정에서 orginal mesh 대비 약간의 변형이 이루어질 수 있으므로 이에 대해 re-parameterization을 진행하여, pm(i)를 생성한다.

Atlas parametrization 
: 3D 모델링과 관련된 개념으로, 복잡한 3D 표면을 단순화된 형태로 표현하는 기법이다. 3D mesh의 각 부분을 2D v평면에 매핑하는 과정을 포함한다.(mesh로 처리하되, 이를  attribute map과의 mapping을 위해서 uv atlas로도 표현한다는 걸 말하는 듯하다.) 이를 통해 3D 표면을 분석하고 조작하는 데 필요한 계산을 단순화할 수 있다.
//처리가 되는 것은 계속 mesh이다. uv coordinate로 표현된건 처리된 mesh에 대해 표현한 것 뿐

구현할 때 UV Atlas tool을 사용하였다. Atlas tool은 Atlas parameterization을 할 때에 decimated mesh의 geomety 정보만을 고려한다. 즉, re-parameterization과정은 공간적인 측면에서만 진행된다는 의미이다.

아래 Figure 6에서 보여주고있는 것 처럼, decimated도 하고 mesh에 대해 parameter까지 조정해주면 original mesh 대비 더 적은 수의 patch로 mesh가 표현된다. 

이는  parameterization discontinuities(불연속)을 감소시키고 //re-parameterized되면서 original과 연속되게 표현..?
더 나은 RD performance를 제공한다. //original과 불연속이었던 부분을 해결하면서 손실이 적어지겠지


*** patch : mesh를 구성하는 작은 표면 영역들을 의미하며, 여러개의 vertex와 edge로 구성된다.

 

 

- Fitting Subdivision Surface

- Fitting : origijnal mesh의 형태와 가장 근접하게 되도록 맞추어가는 과정

- [input]
:  pm(i), 원본 input mesh M(i)           //원본과 decimated된 게 들어가서

- [output]
: Base mesh m(i), Displacements d(i)    //원본과의 차이값이랑 decimated된게 나오네
                                                               //에..?? 그럼 m(i)가 pm(i)랑 뭐가 달라 그냥 동일한 거 그대로 나오나

- 먼저, pm(i)가 아래와 같은 방식으로 삼각형 내부가 재귀적으로 분할되면서 subdivision된다. 

- sub division된 mesh의 각 vertex들과 original mesh의 가장 가까운 지점을 결정함으로 displacement field가 결정된다. 아래 그림에서 두번째 mesh는 decimated된 mesh이고 이를 original과 fitting하여 input으로 들어왔던 original mesh 가까운 점들을 계산함으로써 deformed mesh가 생성되었다. 


- 아래 그림에서 확인할 수 있듯이 deformed mesh는 decimated 기준으로 변형된 것이기 때문에 세밀하게 표현은 되었지만 확대하여 보았을 때, original보다는 부분적으로 flat한 구조를 가지고 있다.



 

 

??deformed mesh를 왜 만드는 거지 차이값인 displacement만 계산하고 encoder로 넘겨야하는 거 아닌가?

??deformed mesh가 enhancement mesh인가?

??base mesh에 subdivision해서 enhancement vector 더하면 deformed mesh일 듯

??fitting과정의 결과값이 ehnahcement vector 뿐인데, 이걸 만약 decoder에서 복원한다면   

    base mesh에 subdivision해서 enhancement vector를 더한게 deformed mehs라는 건가?

 

 

 

Random Access (RA) condition  //inter mode

 

Random Access Condition에서 ( inter mode에서 ), temporally consistent re-meshing은 reference frame의 base mesh인 m(j)를 참조하여 계산될 수 있다.  따라서 기준이 되는 reference mesh M'(j)에 대해 계산한 것과 동일한 subdivision 구조를 current mesh 인 M'(i)에서도 생성할 수 있게 된다.

 

*** reference index : j            current indes : i

*** temporally consistent re-meshing  : 시간적 일관성을 유지하며 mesh를 재구성하는 process

 

이러한 re-mesing process는 current frame M(i)에 대한 base mesh m(i)의 encoding을 건너뛰고,

reference frame M(j)에 연관된 base mesh m(j)를 재사용할 수 있도록 해준다. //차이값 계산해서 그것만 사용

 

이러한 재사용은 Geometry,Attributes 정보에 대한 더 나은 temporal prediction을 가능하게 해준다. 

 

*** temporal prediction : 이전 프레임의 데이터를 기반으로 현재 프레임의 데이터를 추정하는 과정

                                       보통, 차이만 압축하여 인코딩함으로써 데이터의 양을 줄인다.

 

reference frame의 정보를 활용하는 re-meshing process를 더 정확히 말하자면, motion field f(i)가 계산되고 encoding된다고 할 수 있다. 

 

*** motion field : reference frame의 base mesh인 m(j)가 current frame의 base mesh인 m(i)와 동일한 위치를 갖기까지 얼만큼 움직여야하는지를 묘사한 field //즉, 쉽게말해 reference field와의 차이값을 계산해서 처리한다는 말이다.

 

time-consistent re-meshing은 항상 가능하지는 않다.

Apple이 제안한 system에서는 시간적으로 일관성이 있는지 없는지에 따른 왜곡 정도를 비교하며 RD performance를 최대로 낼 수 있는 방향으로 선택하도록 한다.

//시간적 일관성이 있을 때에만 이전 frame을 참조하는 re-meshing 방법을 사용한다는거

 

이러한 Preprocessing(전처리) module은 표준화된 것은 아니며, subdivision surface를 통한 방법 말고 그보다 더 효율적인 시스템이 나온다면 언제든 대체될 수 있다.