Co-visibility graph(공가시성 그래프)

공대생의 팁 2019. 1. 22. 01:34


 로보틱스에서 motion planning을 하게 될 때 visibility graph(가시성 그래프)를 사용하는 경우가 있습니다. visibility graph란 로봇이 이동을 할 때 자신의 앞에 보이는 장애물을 어떻게 하면 회피해서 갈 수 있는지에 대해 알 수 있는 방법을 고안하는 단계에서부터 시작하게 됩니다. 설명하기에 앞서 간단한 그림을 사용하여 설명해드리겠습니다.



 위 그림은 두 개의 직사각형 모양의 장애물이 있고, 로봇은 검은 점과 붉은 점을 이동해야 하는 상황을 나타낸 것입니다. 먼저 로봇이 지나갈 수 있는지를 visibility graph를 그려 확인하는 과정으로 시작점과 도착점에서 장애물까지 직선으로 선을 긋습니다. 위 그림에서 파란색으로 그려진 부분에서 시작점과 도착점의 visibility graph가 만나고 있음을 알고 있습니다. visibility graph를 그릴 때 주의할 점은 점에서부터 시작되는 visibility graph는 곡선이 될 수 없으며 도달하는 부분까지 직선으로 이어져 있어야 한다는 점입니다.


 이번 포스팅에서 설명하게 될 co-visibility graph(공가시성 그래프)를 이해하기 위해 사전지식으로 visibility graph에 대해 간단히 설명드렸습니다. 이름에서 알 수 있듯이 co-visibility graph는 두 개 이상의 점에서 나오는 직선이 특정 점에 도달하게 되었을 때 visibility graph의 갯수를 나타냅니다.


 Vision 분야에서의 visibility graph를 먼저 설명드리도록 하겠습니다.



 이 그림에서 파란 삼각형은 카메라를 나타낸 것이며 초록색 도형은 카메라에 비치는 물체를 나타낸 것이며 노란 점은 카메라에서 해당 도형에 도달하는 visibility graph를 나타낸 것입니다. 실제 점은 훨신 더 촘촘하게 나타낼 수 있으나 보기 쉽게 설명드리기 위해 일부 점만을 나타낸 것입니다.


 다음 그림은 두 개의 카메라로 도형을 바라보게 된 경우입니다.



 두 대의 카메라를 사용하여 특정 물체를 바라보게 되었을 때 보시는 바와 같이 붉은 점으로 표현된 부분은 두 대의 카메라의 시야에 모두 들어오는 부분입니다. 이렇게 두 대 이상의 카메라에서 영사되어 겹치게 되는 부분의 갯수를 표현하는 것을 co-visibility graph라 합니다.

 위의 그림을 보았을 때 노란점의 경우 한 대의 카메라에서만 해당 부분이 보이며 붉은점의 경우 두 대의 카메라에서 해당 부분을 볼 수 있음을 알 수 있습니다.


 이러한 co-visibility graph의 특성은 Visual-SLAM에서 시각정보로 지도를 그리게 되었을 때 주로 사용됩니다. 각 카메라의 영사 정보를 사용하여 상관관계를 판단하여 실제와 최대한 비슷한 지도를 만들 수 있는 것이지요.

300x250

Pixel Intensity(화소 강도)

공대생의 팁 2019. 1. 13. 01:57


 이미지 처리에 있어 해당 이미지의 기초 단위인 화소는 매우 중요한 요소라 할 수 있습니다. Pixel intensity란 특정 화소의 밝은 정도를 나타낸다고 할 수 있겠습니다. 직관적인 예제를 보도록 합시다.



 위 그림은 Grayscale 관점에서 Pixel intensity를 나타낸 것입니다. 검은색의 경우 low값을 나타내고 흰색의 경우 high값을 나타내고 있으며 그 중간인 회색의 경우 middle값을 가지고 있음을 볼 수 있습니다.

 만약 각 픽셀이 0에서 255 사이의 값을 가진다 하였을 때 검은색은 0을, 흰색은 255, 회색은 0~255 사이의 값을 가질 것으로 예상할 수 있습니다.


 아래의 그림은 15×15 크기의 이미지입니다.



 각 픽셀의 intensity는 아래와 같은 숫자로 나타내게 됩니다. 위에서 보았듯이 검은색에 가까울수록 값은 0에 가깝고 흰색에 가까울수록 255에 가까운 값이 나타남을 알 수 있습니다. 



 여기까지 설명을 들으셨다면 pixel intensity의 개념에 대해 어느 정도 감이 잡혔으리라 생각합니다. 이번에는 grayscale과 같은 단색이 아닌 흔히 쓰이는 RGB 컬러 사진을 보도록 하겠습니다.



 우리들이 흔히 사용하는 이미지는 빨강,초록,파랑의 3개의 색을 조합하여 색을 만듭니다. 각각의 색상 또한 grayscale처럼 색깔의 강도를 조절함으로서 다양한 색을 나타낼 수 있게 되는 것이지요.

 RGB 이미지는 마치 3개의 grayscale로 이루어져 있다고 생각할 수 있습니다. 즉 픽셀 1개당 3개의 값을 가진 벡터 (r, g, b)로 표현할 수 있으며 각 값은 0에서 255 사이의 값을 갖고 있는 것입니다.


 그렇다면 위 이미지의 pixel intensity를 histogram을 통해 확인해보도록 하겠습니다. 이를 위해 Matlab을 사용하여 histogram을 그려보았습니다.


1
2
3
4
5
6
7
8
9
10
11
img = imread('sample.png')
 
Red = imag(:,:,1);
Green = img(:,:,2);
Blue = img(:,:,3);
 
[yRed, x] = imhist(Red);
[yGreen, x] = imhist(Green);
[yBlue, x] = imhist(Blue);
 
plot(x, yRed, 'Red', x, yGreen, 'Green', x, yBlue, 'Blue');
cs


 위 코드를 Matlab에서 실행하면 다음과 같은 그래프를 얻을 수 있습니다.


 위 이미지와 만들어진 histogram을 비교해본다면 각 column에서 가장 많이 차지하는 색상을 어느정도 비슷하게 나타내고 있음을 확인할 수 있습니다.


 특정 이미지에서의 pixel intensity는 의학 분야에서 상당히 중요하게 사용되고 있습니다.



 신체검사 등을 할 때 컴퓨터단층촬영을 한 모습입니다. 각 단면의 pixel intensity의 차이값으로 환자의 몸에 어느 부분에서 문제가 발생하였는지 쉽게 확인할 수 있습니다.

 또한 최근에는 Vision 분야가 발전함으로서 카메라에 들어오는 image를 처리하여 정보를 얻는 등의 방법으로 유용하게 사용되고 있습니다.


300x250