앞으로 포스팅 할 영상처리(Image Processing)는 Rafael C. Gonzalez 와 Richard E. Woods의 Digital Image Processing을 기반으로 한다. 



디지털 영상 처리 방법들은 크게 다음의 두 가지를 하기 위함이다. 

  • 인간의 해석을 위한 이미지 정보의 향상
  • 저장, 전송, 기계를 통한 정보의 자동 인식 등을 위한 영상 처리


이를 위해 먼저 영상처리란 무엇인지 알아보고 역사적 관점, 현재 기술, 주요 접근 방법, 범용 영상처리 시스템에 담겨진 요소 등에 대해서 알아보자. 

본 포스팅에서는 위 내용들을 아주 간략하게만 언급하고 이후 포스팅에서 보다 자세하게 다룰 예정이다. 




디지털 이미지 프로세싱(Digital Image Processing)이란 무엇인가? 


 

(※영상이라는 것도 기본적으로는 실세계에 존재하는 아날로그 신호를 수집하여 만드는데 이 과정에서 아날로그 신호처리 과정이 필요함을 염두해 두고 이어서 보도록 하자)

영상이라함은 기본적으로 2차원의 함수 로 정의 되며, 여기서 x와 y는 각각 공간상의 좌표를 의미한다.

어떤 좌표(x, y)에 해당하는 지점의 진폭(amplitude)값을 intensity 혹은 영상의 gray level이라고 부르며, 함수 f에서 x, y, intensity 값들이 유한(finite) 하며 이산(discrete)의 양을 가진다면 우리는 이러한 영상을 디지털 영상(Digital Image)이라고 부른다.


결국 디지털 영상처리는 디지털 컴퓨터를 이용해 디지털 이미지를 각종 기법들을 이용해 처리하는 것을 말한다.  


디지털 영상은 아날로그 세계처럼 무한하지 않다. 유한개의 요소들을 가지고 있으며 각 요소들은 특정 위치와 그에 해당하는 을 가지고 있다. 이러한 요소들은 다양하게 불리는데, picture elements, image elements, pels, 그리고 pixels이다. 디지털 이미지에선 픽셀(pixel)이 가장 널리 사용되는 용어이다. 

다시 말하자면 pixel은 위치와 값으로 정의 되며  로 표현할 수 있다. 이러한 여러 개의 유한한 픽셀들이 모여 하나의 디지털 이미지를 형성하게 된다. 


보통 디지털 이미지라 함은 스마트 폰이나 컴퓨터 등으로 볼 수 있는 이미지들을 떠올리는데 이러한 이미지 이외에도 다양한 형태의 디지털 이미지들이 존재한다. 인간의 눈으로는 감지할 수 없는, 이를테면 초음파(ultrasound), 전자현미경 이미지(electron microscopy)등 다양한 형태의 이미지가 있으며 디지털 영상처리는 이러한 다양한 형태의 디지털 이미지들을 처리하는 것을 포함한다. 



디지털 영상 처리와 유사하게 들릴 수 있는 용어들이 몇 가지 있는데, 컴퓨터 비전(Computer vision), 영상 이해(Image understanding), 영상 분석(Image analysis)등이 있다. 각각의 의미와 지향하는 바를 조금 살펴보자면..


- 컴퓨터 비전(Computer Vision): 인간의 인지기능을 모방하는 것을 목표로 하며, 시각적 입력(Visual input)을 기반으로 추론하고 행동(action)을 취하는 것까지 포함된 넓은 의미를 가지고 있다. 인간의 지능을 모방하는 학문인 인공지능(AI)의 한 갈래이기도 하다. 


- 영상 이해(Image Understanding): 컴퓨터 비전과 유사한 의미이나 그 용어가 지칭하는 범위는 컴퓨터 비전보다는 작다. 


- 영상 분석(Image Analysis): 영상처리와 컴퓨터 비전의 중간 정도에 위치한다.



디지털 영상처리를 포함해 위의 분야들을 명확히 구분 짓기는 어렵다. 그러나 한 가지 유용한 방법은 처리 단계별로 구분 짓는 것이다. 즉 Low, Mid, High-level 처리로 말이다. 아래 그림을 보자. 





Low-level은 노이즈 제거, 명암 효과, 화질 개선 등의 작업을 의미한다(전처리 과정). 이를 통해 사람이 영상을 좀 더 보기 좋게, 혹은 이후 과정에서 처리하기 좋게 만드는 과정을 의미한다. 즉 입력이 영상이고 출력 역시 영상의 형태이다. 


Mid-level은 전처리된 영상을 기반으로 그 안에서 어떤 속성을 뽑아내는 작업이다. 영상을 영역별로 분할하는 segmentation, 분할된 영역, 혹은 object들을 이후 과정에서 사용할 수 있도록 축소된 형태로 기술하는 과정 등이 포함된다. 입력은 전처리된 영상, 출력은 그 영상에서 뽑아낸 속성들, 이를테면 엣지, 외곽선, 개별 object들의 식별 결과 등이다. 


High-level은 뽑아낸 속성들을 기반으로 해당 scene을 "이해"하고 "추론"하는 것이다. 



이해를 돕기 위해 예를 들어보자. 



CCTV에 어떤 사람이 다른 사람에게 위협을 가하는 영상이 포착 됐다. 

-> (입력)


영상에 노이즈가 많이 섞여있어서 화질이 않좋다. 노이즈 제거 처리를 해서 깨끗한 영상을 얻었다. 

-> (Low-level)


영상 내에서 사람인 부분만 segmentation을 하고 미리 학습한 데이터를 기반으로 이것이 사람인 것을 알아낸다. 

-> (Mid-level)


영상 내의 한 사람이 다른 사람에게 위협을 가한 다는 것을 알아 차리고 경찰서에 연락해야 한다는 판단을 한다. 

-> (High-level)


앞서 말한 것과 같이 선형대수(Linear algebra)는 선형 방정식(Linear equations)으로 표현되는 어떤 시스템을 풀기 위한 방법론이다. 

 

이를 어떻게 푼다는 것일까? 

 

그 전에 먼저 다음을 살펴보자. 

우선 n개의 선형 방정식들과(linear equations) n개의 미지수(unknowns)가 있는 일반 적이면서 nice한 경우를 가정해 보자. 

식은 아래와 같을 것이다. 

 

 

두 개의 식(1)과 (2), 그리고 두 개의 미지수 x, y가 있다. 이 두 개의 식을 행렬(Matrix)로 표현할 수 있다. 이를 위해선 다음의 3개 요소가 필요하다. 

 

계수 행렬(coefficient matrix)

미지수 벡터(unknown vector)

우변 벡터(right-hand side vector)

 

여기서 계수(coefficient)란 각 미지수 앞에 곱해진 수를 의미한다. 단순히 방정식의 등호 앞의 계수들만 뽑아서 나열하면 된다. 아주 간단하다. (※ 이때 식은 =0의 일반형이어야 한다)

 

어쨋든 이를 행렬로 표현하면 아래와 같다. 

 

 

 

 

왼쪽부터 순서대로 계수행렬(A), 미지수 벡터(x), 우변 벡터(b)이다. 이를 간단히 아래의 식으로 표현할 수 있다.

(여기서 미지수 벡터 x의 차원은 미지수의 개수이다)

 

 

자 지금까지 우리는 어떤 시스템의 선형연립방정식을 행렬로 표현하는 방법을 공부했다. 위 행렬을 중/고등학교때 공부했던 행렬의 계산식대로 곱해보면 처음의 방정식 형태가 나온다는 것을 쉽게 알 수 있을 것이다.

 

 

이제 여기서 우리가 알아야 할 것은 이 시스템에서 다음이 의미하는 것들이다.  

 

- Row picture

- *Column picture

- Matrix form

 

 

Row picture란 쉽게 말해 Row방향의 방정식을 하나씩 보는 것이다. 예를 들면 위 식에서 2x-y=0의 하나의 방정식을 놓고 봤을 때, 이 방정식이 공간상에서 어떻게 표현되는지, 무엇을 의미하는지 아는 것이다.  

 

Column picture는 위 행렬에서 계수 행렬에서 column방향의 벡터들을 보고 이것의 의미가 무엇인지, 그리고 공간상에서는 어떻게 표현 되는지를 이해하는 것이다. 

 

마지막 Matrix form은 이러한 Row와 Column picture들로 이루어진 Matrix에 대해 그 의미를 이해하는 것이다. 위 식에서 A에 해당한다. 

자 그럼 이제 이 내용들을 시각화 하여 이해 해보도록 하자. 

 

우선 주어진 식은 다음과 같다. 아래의 식이 이 시스템을 행렬 형태로(Matrix form)보는 것이기 때문에 Matrix form부분은 설명을 생략한다. 

 

 

1. Row picture

 

앞서 말한 것과 같이 Row picture란 한 번에 하나의 row방향의 방정식을 따져 보는 것을 의미한다. 즉 아래 수식에서 (1)번식, (2)번식 각각을 의미한다. 

선형대수에서 이러한 row방향의 하나의 방정식은 좌표 공간상에서 직선으로 표현된다. 즉 2x-y=0을 만족시키는 모든 x와 y의 점들을 찍으면 결국 좌표 공간 상에서 하나의 직선으로 표현되는 것이다. 

이를 실제로 구현하려면, y=의 꼴로 이항하여 식을 먼저 정리하면 좋다. 정리하면 아래와 같다.

 

 

MATLAB으로 실제로 구현해보자. 코드는 아래와 같다. 

 

 

 

코드 실행 결과는 아래와 같다. 

 

 

 

 

 

주어진 식은 x와 y로 구성된 선형 일차식이기 때문에 그 형태는 무조건 직선이 된다. 

이러한 형태의 식을 그리기 위해선 간단히 해를 만족하는 두 개의 점만 구하면 된다. 

 

첫 번째 식 2x-y=0의 경우 x=0일때 y=0이어야 하므로 [0,0]을 한 점으로 잡을 수 있고 x=1일 때 y=2여야 해를 만족하므로 [1,2]가 두 번째 해를 만족하는 점이 된다. 위 그래프에 실제로 대입해보면 맞는 것을 확인할 수 있다. 

 

두 번째 식 -x+2y=3인 경우 x=1일 때 y=2여야 한다. 따라서 [1,2]가 한 점. y=0일 때 x=-3이므로 [-3, 0] 이 한 점이다. 

 

 

위 그림에서 우리는 두 선이 만나는 지점이 있다는 걸 알 수 있다. 우리는 앞의 내용을 통해 두 직선의 교점이 [1,2] 라는 것을 알 수 있다. 만약 교점이 없다면, 이 시스템의 해는 존재하지 않는다. 

 

결국 선형대수의 행렬에서 Row picture는 Row 방향의 개개의 방정식들이고 이러한 Row 방향의 방정식들은 2x2행렬에선 직선(line)으로 표현된다. (3x3는 plane으로 표현됨)

결국 2x2행렬에서 Row picture의 해는 해당 직선들이 만나는 교점이라는 것을 알 수 있다. 

 

 행렬에서 각 Row에 해당하는 방정식을 한 번에 하나씩 보는 것이 Row picture이고, 
각 Row방정식들의 교점을 찾는 것이 목표이고 그 교점이 그 시스템의 다. 

 

 

 

2. Column picture

 

다음은 Column picture에 대해 알아보자. 

말 그대로 행렬에서 column part를 보는 것이다. 즉 다시 말하면 행렬에서 x부분과 y부분으로 각각 보는 것이다. 

방정식을 다시 보자. 

 

 

여기서 x column이란 x에만 곱해지는 계수들 즉, [2, -1]이고, y column은 마찬가지로 [-1, 2]이다. b column은 [0, 3]이 된다. 위 식을 column식으로 표현하면 아래와 같다. 

 

 

 

(5)는 (4)를 좀 더 일반적으로 표현한 것이다. 

위 식을 좀 더 자세히 살펴보자. Row picture와는 달리 계수행렬(coefficient matrix)에서 동일한 변수가 곱해지는 계수들을 묶어서 정리한 것이다. 이렇게 정리한 결과는 계수행렬에서 column vector들과 각 변수의 곱의 조합으로 표현되어진다. 

 

다시 말하면.. 

 

좌변에서 [2 -1]벡터에 어떤 상수 x가 곱해진 것과 [-1 2]벡터에 어떤 상수 y가 곱해진 것을 더했을 때 우변의 벡터 결과가 나오는 것이다. 




(※ bold체는 벡터를 의미)



우리는 이를 선형 결합(Linear Combination)이라 부르며, 이러한 형태의 연산은 선형대수에서 가장 근본적이며 핵심적인 연산이다. 
여기서는 column의 선형 결합(Linear combination of columns)라 할 수 있다. 
결국 이 식이 우리에게 묻고자 하는 것은 주어진 벡터들에 어떤 상수 x와 y가 곱해져야 우변의 벡터 값이 나오는가? 이다. 즉 우항의 벡터를 만족시키기 위한 적절한 선형 결합은 무엇인가? 이것이 곧 이고 핵심이다. 

 

자 그렇다면 이러한 column 벡터의 선형 결합이 공간상에서 어떻게 표현되는지 알아보자.  

계수 행렬의 각 column은 공간상에서 벡터로 표현된다. 

 

위의 식 (4)에서 x에 곱해진 벡터 v1과 y에 곱해진 v2, 그리고 u=b를 각각 그려보자. 아래와 같이 될 것이다. 

 

 

 

 

다시 말하자면 이 선형식에서 우리의 목표는 벡터 v1v2에 얼마의 상수 x, y를 각각 곱하여 벡터 b를 만드는 것이다. ((5)번식 참조)

 

그렇다면 이 식을 만족시키는 해 x, y는 어떤 값일까? 

 

결론부터 말하자면 해는 [1 2]이다. 눈치 챘겠지만 이 해는 Row picture에서의 해와 같다.  

해를 대입하여 식을 다시 쓰면 아래와 같다. 주어진 식을 만족하는 것을 확인할 수 있다. 

 

 

자 그럼 이제 이를 공간상에서 표현해 보자. 결과 그림은 아래와 같이 될 것이다. 

$1 \; \overrightarrow{\boldsymbol{v_1}}$은 파란색 벡터이고, 이 벡터에 2배 만큼을 곱한 $2 \; \overrightarrow{\boldsymbol{v_2}}$를 더해준다. 이 벡터는 아래 그림에서 자홍색 파선으로 표현된 벡터다. 

자 이렇게 v1과 v2의 선형 결합을 한 결과 벡터가 어느 곳을 가르키고 있는가? 바로 $ \overrightarrow{\boldsymbol{b}}$벡터의 끝점과 일치하는 것을 볼 수 있다. 

   

 

 

 

위 그림을 통해 우리는 행렬의 column picture에서 각 column의 선형결합(Linear combination)이 공간상에서 어떻게 표현되는지를 눈으로 확인할 수 있었다. 

위 그래프를 그리기 위한 MATLAB코드는 아래와 같다. 

 

 

 

 결과적으로 우항의 벡터 b를 만족시키기 위한 좌항의 적절한 선형 결합을 찾는 것이 Column picture에서의 목표이다. 
또한 Row picture든 Column picture든 어차피 똑같은 시스템 A를 보는 것이기 때문에 결국 해는 같다. 
문제를 직선이나 평면 등의 방정식으로 볼 것인지, 아니면 벡터들의 선형 결합으로 볼 것인지가 Row와 Column picture의 차이다.

 

 

다음 시간에는 2차원이 아닌 3차원에서 Row와 Column picture를 확인해보고 이에 대한 좀 더 깊은 이해를 해 보도록 하자. 

 

앞으로 포스팅 할 선형대수(Linear Algebra)에 관한 내용은 MIT의 gilbert strang교수님의 강의를 기반으로 한다. 구글에 검색해보면 길교수님의 강의를 쉽게 찾을 수 있다. 


본격적인 공부에 앞서 선형대수란 놈에 대해서 알아보자.


선형대수란 무엇일까? 



선형대수(Linear algebra)는 선형 방정식을 풀기 위한 방법론이다.  


언뜻 이해하기어려워 보이지만 좀 더 풀어서 써보면...

선형 방정식(linear equation)이 있는데, (2x+3y=0 와 같은...)

여기서 우리는 우측의 해(0)를 만족시키는 x와 y를 찾아내는 것이다. 


방정식(equation)이 하나이고 미지수(unknown) 역시 하나라면 답은 굉장히 쉬울 것이다.

3x+1 = 7, (미지수 x의 값은?)


그러나 2x+3y=0과 같이 식이 하나, 미지수가 두 개인 경우엔 (미지수 x, y)

해를 만족시키는 x와 y를 이 하나의 식만 가지고는 찾아내기가 힘들다. 

일일이 값을 대입해보거나 직관으로 풀어야 하는데 이는 굉장히 비 효율적이다. 


그런데 위와 같은 식이 하나가 더 있다면 어떨까?

같은 차원의 방정식이 하나 더 존재한다면, 우리는 두 방정식의 관계를 이용해 해를 쉽게 찾아낼 수 있는 것이다. 

이것이 우리가 선형대수를 공부하는 목적이다. 



그럼 여기서 선형은 뭐고 대수는 또 뭐지? 와 같은 의문이 들 수 있다. 

정말 간단히 설명하자면...

선형이란 입력에 a라는 영향을 주면 그에 따른 출력 값도 기존에 출력값에서 a라는 영향을 받은 만큼의 결과 값이 나오는 시스템이다. 

즉 다시말하면.. 



어떤 시스템에서 입력값에 영향을 준 만큼 결과 값도 그만큼 영향을 받아서 나오는,

다시 말해 예측이 가능한 시스템이라는 것이다. 



쉬운 예로 직선의 방정식 y=ax를 살펴보면 이해가 쉬울 것이다. 이 방정식의 경우 x에 어떠한 수를 곱해도 y는 a만큼 곱해준 수 만큼 결과 값이 나올 것이다. 

이를 식으로 표현하면 아래와 같다. 



또한 선형성은 아래의 식으로도 정의할 수 있다. 




간단한 직선의 방정식을 통해 위 정의를 검증해 보자. 


(1)번을 살펴보면

 y=3x 라는 식이 있다고 했을 때 x=2인 경우 y는 6이다. 

여기서 x앞의 계수 3을 없애고 x의 결과 값인(y=x) y에 3을 곱해주면 결과 값은 당!연!히! 같아진다. 


(2)번을 살펴보면

x1=3, x2=4, a=6인 경우를 생각해 보자.

y=a(x1+x2) = a(x1)+a(x2)

6(3+4) = 6(3) + 6(4)

= 42


이것이 선형성(linearity)이다. 위에서 정의한 대로 입력 부분의 계수 값에 따라서 결과값이 그대로 예측이 가능하다. 






그렇다면 대수라는건 무엇인가?

대수(代數)라는 말 그대로 "숫자를 대신하는"것(문자)을 의미한다. 

숫자를 대신하는 대수(代數)를 이용하여 방정식을 풀고 해를 구하는 것을 우리는 대수학(代數學)이라고 한다. 

직선의 방정식 y=3x에서 대수는 x, y를 의미하며 3은 대수에 붙은 계수(係數)로써 선형대수에서는 이 계수들이 매우 중요한 의미를 갖는다. 우리는 앞으로 이 계수들을 활용해서 연립방정식의 해를 구하게 될 것이다. 




결국 선형 대수라는 것은 

선형성(linearity)을 가지는 대수(algebra)로 이루어진 방정식들의 해를 구하는 방법론, 혹은 학문이다.


+ Recent posts