다각형을 삼각 분할하다 보면 일부 삼각형 중에는 한 변의 길이가 나머지 변의 길이에 비해서 매우 작거나 또는 매우 큰 경우가 많이 나타난다. (이런 경우에 외접원의 반지름이 매우 커진다). 삼각 분할에서 만들어진 삼각형을 이용하여 mesh을 형성할 경우에 분할된 삼각형이 보다 균일한  경우가 더 좋을 것이다.

균일한 삼각 분할을 만들기 위해서 이미 완성된 분할 결과를 가지고 다시 수정 작업을 거쳐야 한다. 삼각 분할 결과로 나타난 각 내부 edge(AC, diagonal)에 대해서 그 edge가 대각선이 되는 사각형(ABCD)을 찾고, 이 사각형이 convex인 경우에 한하여 아래의 과정을 적용한다.

  1. 사각형 ABCD를 분할하는 두 개의 삼각형 ABC, ACD의 외접원의 반지름의 최솟값을 찾는다.
    min(radius(ABC), radius(ACD))
  2. 사각형 ABCD에서 원래 대각선(AC)과 교차하는 대각선(BD)이 나누는 두 개의 삼각형 BCD, BDA의 외접원의 반지름의 최솟값을 찾는다. 
    min(radius(BCD) and radius(BDA))
  3. 원래 대각선(AC)이 나누는 삼각형 외접원의 최소 반지름이 교차 대각선(BD)이 나누는 삼각형의 최소 반지름보다 더 작은 경우 이 대각선을 기존의 edge(AC)와 바꾼다. (바꾼 edge는 더 이상 바꾸지 않는다)
  4. 다른 내부 edge에 대해서 동일한 과정을 반복한다.

** 내부 edge의  FLIP;

사용자 삽입 이미지

 

** 원래의 삼각화(Ear Clipping)

사용자 삽입 이미지

**최적화 후

사용자 삽입 이미지

 


/**
** http://blog.naver.com/helloktk/80051332733 에서 옮김.
*/

 

728x90

'Computational Geometry' 카테고리의 다른 글

Polygon Fill  (0) 2008.05.22
Fortune's Sweep Algorithm  (0) 2008.05.22
Triangulating Monotone Polygon  (0) 2008.05.22
Trapezoidalization  (0) 2008.05.22
Sweep Line Algorithm  (0) 2008.05.22
Posted by helloktk
,

주어진 이미지의 gaussian scale space의 표현은 이미지와 gaussian kernel의  convolution 결과로 주어진다.
$$L(x, y; σ)= G(x, y; σ) * I(x, y);$$

이 표현은 임의의 $σ$에 대해서 정의되나 실제적으로는 유한한 구간의 값들만 취급한다. 그리고 스케일 값이 한 옥타브를 넘어서는 경우에는 원본 이미지의 크기를 유지할 필요가 없다. 주어진 스케일보다 작은 특징들은 고려 대상이 되지 않는다는 점을 인식하면, 스케일이 두 배로 커지는 경우에는 원본 이미지를 반으로 줄이고 스케일은 동일하게 유지하는 것이 훨씬 더 이득이다. 따라서 scale space를 이미지 pyramid로 표현하는 것이 자연스럽다.
아래 예는 3 옥타브까지 scale space를 표현한 것이다. 각 옥타브에서 3 개의 구간(수직 방향)을 갖는다(각 옥타브에서 마지막 이미지는 비교를 위해 넣은 것이다). 한 단계 위 옥타브의 이미지는 전 단계 옥타브의 동일한 레벨의 이미지를 1/2 다운 샘플링하면 바로 얻을 수 있다.

*** $L(x; σ) = G(x; σ) * I(x)$ 의 1/2 down-sampling 이미지 $L'(x;\sigma)$는 (1-dim만 고려해도 충분하다)
$$\begin{align} L'(x; σ)\equiv L(2x; σ)  &= \int \frac{1}{σ} \exp\Big[-\frac{(2x-x')^2}{2σ^2}\Big] I(x') dx',   \quad (x'\rightarrow 2x') \\&=\int \frac{1}{σ} \exp\Big[- \frac{(2x-2x')^2}{2σ^2} \Big] I(2x') d(2x')\\&= \int \frac{1}{\sigma/2} \exp \Big[ -\frac{(x-x')^2 }{2(σ/2)^2}\Big] I(2x') dx'   \\  &=G(x; σ/2) * I(2 x);\end{align}$$
임을 알 수 있다. 즉, 스케일 $σ$로 gaussian convolution 이미지를 1/2 다운샘플링한 것은 1/2 다운샘플링한 이미지를 $σ/2$ 스케일로 gaussian convolution 결과와 같다. 따라서 스케일이 2배인 이미지가 필요하면 현재의 스케일에서 이미지를 반으로 줄이면 된다.

사용자 삽입 이미지

 

 
 
728x90

'Image Recognition' 카테고리의 다른 글

Gaussian Mixture Model  (2) 2008.06.07
Rasterizing Voronoi Diagram  (0) 2008.05.26
RANSAC Algorithm  (0) 2008.05.24
Contour Tracing  (0) 2008.05.22
Watershed Algorithm 적용의 예  (2) 2008.05.21
Posted by helloktk
,

(1) closest pair in the planar point set
     * brute force : O(n^2) --> O(n log n), see also divide and conquer algorithm.
     * ref : http://www.cs.mcgill.ca/~cs251/ClosestPair/ClosestPairPS.html 

사용자 삽입 이미지

(2) simplicity of polygon :

Shamos-Hoey Algorithm

 

 

 

사용자 삽입 이미지

(3) voronoi diagram :Fortune algorithm


 

 

사용자 삽입 이미지

(4) segment intersection : Bentley-Ottmann Algorithm

      * 파란색 점 : sweep-line과 교차하는 세그먼트들 간의(붉은색으로 표시)의 교차점으로(before sweep-line)로 point 이벤트 큐에 들어간다.
      * 청록색 점 : sweep-line이 지나간 후의 교차점.

사용자 삽입 이미지

sweep-line알고리즘을 구현하는데서 스텝별로 쪼개서 구현하려고 하니 조금 귀찮은 작업들이 많아진다 (DC에 그려지는 것을 자동으로 저장하는 부분을 만들어서 매 스텝마다 캡처하는 작업은 줄였다). 그러나 근본적인 문제는 입력되는 데이터에 degeneracy가 있는 경우다. 이것 때문에 가장 기본적인 세그먼트 intersection 부분부터 다시 살펴보아야 했다.

/**
** http://blog.naver.com/helloktk/80051980882 에서 옮긴 글.
*/

 

728x90

'Computational Geometry' 카테고리의 다른 글

Polygon Fill  (0) 2008.05.22
Fortune's Sweep Algorithm  (0) 2008.05.22
Triangulating Monotone Polygon  (0) 2008.05.22
Trapezoidalization  (0) 2008.05.22
Optimizing Polygon Triangulation  (0) 2008.05.22
Posted by helloktk
,

(1) cell image : 원본 영상을 이진화(Otsu-알고리즘)시킨 결과다. 두 군데서 셀이 겹쳤다. 단순히 connected component labeling을 적용해서는 이를 분리할 수 없다.

사용자 삽입 이미지

(2) distance transform : distance 변환 결과에 blurring을 추가한 결과다. distance 변환은 셀 외부는 셀로부터의 거리를, 셀 내부는 배경으로부터의 거리의 음의 값을 취한 후 전체적으로 다시 리스케일한 것이다.  blurring은 watershed 알고리즘이 보다 정확히 동작하는데 필요하다.

사용자 삽입 이미지

 

(3) watershed segmentation: 분할된 영역의 label이 나온다(경계 label=0). 이 label을 가지고  false coloring을 한 결과다. 이 알고리즘은 논문 "The Watershed Transform: Definitions, Algorithms and Parallelization Strategies", Jos B.T.M. Roerdink and Arnold Meijster의 내용을 구현한 것이다. 8-방향 픽셀 연결성을 이용했다.

사용자 삽입 이미지

(4) final result; watershed 결과를  mask로 이용해서 이미지를 분할한 것이다. 겹친 cell이 분리되었다.

사용자 삽입 이미지

다른 예:

사용자 삽입 이미지

 

사용자 삽입 이미지

 

사용자 삽입 이미지

/**
** http://blog.naver.com/helloktk/80051779331 에서 옮긴 자료.
*/

728x90

'Image Recognition' 카테고리의 다른 글

Gaussian Mixture Model  (2) 2008.06.07
Rasterizing Voronoi Diagram  (0) 2008.05.26
RANSAC Algorithm  (0) 2008.05.24
Contour Tracing  (0) 2008.05.22
Gausssian Scale Space  (0) 2008.05.22
Posted by helloktk
,