OpenCV로 배우는 영상 처리 및 응용/ 기하학 처리

  • 영상 처리에서 기하학 처리는 영상 내에 있는 기하학적인 대상의 공간적 배치를 변경하는 과정을 말한다.
    • 이것을 화소의 입장에서 보면 영상을 구성하는 화소들의 공간적 위치를 재배치하는 과정이라 할 수 있다.
    • 이러한 변환에는 회전, 크기 변경, 평행이동 등이 있다.

사상(Mapping)

  • 사상은 화소들의 배치를 변경할 때, 입력 영상의 좌표가 새롭게 배치될 해당 목적 영상의 좌표를 찾아서 화소값을 옮기는 과정을 말한다.
    • 사상에는 순방향 사상(forward mapping)과 역방향 사상(reverse mapping)의 두 가지 방식이 있다.
  • 순방향 사상은 원본 영상의 좌표를 중심으로 목적영상의 좌표를 계산하여 화소의 위치를 변환하는 방식이다.
    • 이 방식은 원본 영상과 목적 영상의 크기가 같을 때는 유용하지만 그렇지 않으면 홀(hole)이나 오버랩(overlap)의 문제가 발생할 수 있다.
    • 아래 그림에서 홀과 오버랩에 대해 나타내었는데, 홀은 입력 영상의 좌표들로 목적영상의 좌표를 만드는 과정에서 사상되지 않은 화소를 가리킨다. 보통 영상을 확대하거나 회전할 때 발생한다.
    • 반면 오버랩은 원본 영상의 여러 화소가 목적영상의 한 화소로 사상되는 것으로 영상을 축소할 때 주로 발생한다.
  • 이런 문제를 해결할 수 있는 방법이 역방향 사상이다. 역방향 사사은 목적 영상의 좌표를 중심으로 역변환을 계산하여 해당하는 입력 영상의 좌표를 찾아서 화소값을 가져오는 방식이다.
    • 아래 그램의 예시에서 입력영상의 하단 왼쪽 한 개의 화소가 목적 영상의 두 개 화소로 각각 사상된다. 이 경우에도 역방향 사상의 방식은 홀이나 오버랩은 발생하지 않는다.
    • 다만 입력영상의 한 화소를 목적영상의 여러 화소에서 사용하게 되면 결과 영상의 품질이 떨어질 수 있다.

크기 변경(Scaling)

  • 크기 변경은 입력 영상의 가로와 세로로 크기를 변경해서 목적영상을 만드는 방법으로 입력영상보다 변경하고자 하는 영상의 크기가 커지면 확대가 되고, 작아지면 축소가 된다.
  • 영상의 크기 변경은 비율을 이용해서 수행할 수 있다. 가로와 세로로 변경하고자 하는 비율을 지정하여 입력영상의 좌표에 곱하면 목적영상의 좌표를 계산할 수 있다.

x' = x \cdot ratio X \\ y' = y \cdot ratio Y

  • 목적영상의 크기를 지정해서 변경할 수도 있는데, 이것은 입력영상과 목적영상의 크기로 비율을 계산하고, 계산된 비율을 이용해서 목적영상의 좌표를 계산한다.

ratio X = {dst_{width} \over org_{width}}, ratio Y = {dst_{height} \over org_{height}}

보간(Interpolation)

  • 아래 그림은 입력영상을 두 배 확대할 때 목적영상의 화소 배치를 보인 것이다. 순방향 사상으로 목적영상의 화소를 찾은 경우에는 입력영상의 4개 화소는 쉽게 배치가 되지만, 목적영상에서 확대되는 나머지 화소들은 홀이 발생한다.
    • 이런 문제를 해결하는 방법으로 역방향 사상을 통해서 홀의 화소들을 입력영상에서 찾아서 목적영상의 화소에 대입함으로써 목적영상의 화질을 유지할 수 있다.
  • 이렇게 목적영상에서 홀의 화소들을 채우고 오버랩이 되지 않게 화소들을 배치하여 목적영상을 만드는 기법을 보간법이라한다.
    • 이렇나 보간법의 종류에는 최근접 이웃 보간법(nearest neighbor interpolation), 양선형 보간법(bilinear interpolation), 3차 회선 보간법(cubic convolution interpolation) 등이 있다.

최근접 이웃 보간법(Nearest Neighbor Interpolation)

  • 최근접 이웃 보간법은 목적영상을 만드는 과정에서 홀이 되어 할당 받지 못하는 화소들의 값을 찾을 때, 목적영상의 화소에 가장 가깝에 이웃한 입력영상의 화소값을 가져오는 방법이다.
  • 이 방법은 목적화소의 좌표를 반올림하는 간단한 알고리즘으로 비어있는 홀들을 채울 수 있어 쉽고 빠르게 목적영상의 품질을 높일 수 있다.
    • 다만 확대의 비율이 커지면 영상 내에서 경계선이나 모서리 부분에서 계단현상이 나타날 수 있다.

양선형 보간법(Bililnear Interpolation)

  • 영상을 확대할 때 확대비율이 커지면 최근접 이웃 보간법은 모자이크 현상 혹은 경계부근에서 계단현상이 나타나게 된다. 이러한 문제를 보완할 수 있는 방법이 양선형 보간법이다.
  • 여기서 선형의 의미는 중첩의 원리(superposition principle)가 적용되낟는 것이다. 
    • 쉽게 표현하면 직선의 특징을 가지고 있다는 것인데, 직선의 방정식을 예로 들 수 있다.
    • 아래 그림과 같이 두 개의 화소 값을 알고 있을 때 그 값으로 직선을 그리면, 직선의 선상에 위치한 중간 화소들의 값은 직선의 수식을 이용해서 쉽게 계산할 수 있다.
  • 양선형 보간법은 이와 같은 선형 보간을 두 번에 걸쳐서 수행하기에 붙여진 이름이다. 그 세부적인 방법은 아래 그림을 이용해 설명한다.
  • 먼저 목적영상의 화소(P)를 역변환으로 계산하여 가장 가까운 위치에 있는 입력영상의 4개 화소(A, B, C, D)를 가져온다.
    • (b) 그림과 같이 가져온 4개 화소를 두 개씩(AB, CD) 묶어서 화소값(P1, P2, P3, P4)으로 두 화소를 잇는 직선을 구성한다.
    • 다음으로 직선의 선상에서 목적영상의 화소의 좌표로 중간 위치를 찾고, 그 위치의 화소값(M1, M2)를 계산한다. 이때 중간 위치의 화소값은 기준 화소값 (P1, P2, P3, P4)과 거리 비율(α, 1-α)을 바탕으로 짓건의 수식을 이용해서 계산한다.
    • 마지막으로 구해진 중간 화소값(M1, M2)을 잇는 직선을 다시 구성하고, 두 개의 중간 화소값과 거리 비율(β, 1-β)을 바탕으로 직선의 수식을 이용해서 최종 화소값 (P)를 계산한다.
    • 이때 최종 화소값이 목적영상의 해당 좌표의 화소값이 된다.
  • 정확히는 세 번의 선형 보간을 수행하지만, 4개 화소값(P1, P2, P3, P4) 에 대해서 수행하는 선형 보간은 1차 보간으로 간주한다.
    • 그리고 중간 화소값(M1, M2)에 대해 수행하는 선형 보간을 2차 보간으로 간주하기 때문에 양선형 보간이라 한다.
    • 이를 수식으로 표현하면 다음과 같다.

M_{1} = \alpha \cdot B + (1-\alpha) \cdot A = A + \alpha \cdot (B - A) \\ M_{2} = \alpha \cdot D + (1-\alpha) \cdot C = C + \alpha \cdot (D - C) \\ P = \beta \cdot M_{2} + (1 - \beta) \cdot M_{1} = M_{1} + \beta \cdot (M_{2} - M_{1})

  • OpenCV에서는 보간이 필요한 함수들을 위해 아래와 같은 옵션값을 제공한다.
옵션 상수 설명
INTER_NEAREST 0 최근접 이웃 보간
INTER_LINEAR 1 양선형 보간(기본값)
INTER_CUBIC 2 바이큐빅 보간 – 4×4 이웃 화소 이용
INTER_AREA 3 픽셀 영역의 관계로 리샘플링
INTER_LANCZOS4 4 Lanczos 보간 – 8×8 이웃 화소 이용

평행이동(Translation)

  • 영상에서 원점 좌표는 좌상단이다. 평행이동은 영상의 원점을 기준으로 모든 화소를 동일하게 가로, 세로 방향으로 옮기는 것을 말한다.
    • 아래 그림은 최상단 오른쪽의 원점에서 가로 방향으로 dx, 세로 방향으로 dy 만큼 전체 영상의 모든 화소를 이동시키는 예이다.
    • 여기서 옮겨진 후에 입력영상의 범위를 벗어나는 부분(오른쪽 부분과 하단 부분)은 목적영상에서 제거된다.
    • 평행이동할 화소가 없는 부분인 상단과 왼쪽 부분은 0(검은색) 혹은 255(흰색)로 지정한다.
  • 평행이동을 수식으로 표현하면 다음과 같다.
    • 순방향 사상을 적용하면 입력영상의 화소(x, y)에서 이동할 화소 수만큼 가로 방향과 세로 방향으로 더해 주어서 목적영상의 화소(x’, y’) 위치를 정한다.

순방향 사상

x' = x + dx \\ y' = y + dy

역방향 사상

x = x' - dx \\ y = y' - dy

회전(Rotation)

  • 회전은 입력영상의 모든 화소를 영상의 원점을 기준으로 원하는 각도만큼 모든 화소에 대해 회전 변환을 시키는 것을 말한다.
    • 이것은 2차원 평면에서 회전 변환을 나타내는 행렬을 통해서 수식으로 표현할 수 있다.

순방향 사상

x' = x \cdot cos \theta - y \cdot sin \theta \\ y' = x \cdot sin \theta + y \cdot cos \theta

역방향 사상

x = x' \cdot cos \theta + y' \cdot sin \theta \\ y = - x' \cdot sin \theta + y' \cdot cos \theta

  • 목적영상의 모든 화소(x’, y’)에 대해 역방향 사상의 수식을 적용하여 입력화소를 계산하면 아래 그림과 같이 원점으로부터 시계 방향으로 정해진 각도만큼 회전된 영상이 생성된다.
    • 직교 좌표계에서 회전 변환은 반시계 방향으로 적용된다. 그러나 영상 좌표계에서는 y좌표가 하단으로 내려갈수록 증가하기 때문에 시계방향의 회전으로 표현됨에 유의한다.
  • 평행이동과 마찬가지로 목적영사으이 범위를 벗어나는 입력화소는 제거되며, 입력영상에서 찾지 못하는 화소는 검은색이나 흰색으로 지정한다.
  • 일반적으로 영상을 회전시킬 때 회전의 기준을 영상의 기준 원점인 좌상단으로 하지 않고, 물체의 중심(center X, center Y)으로 하는 경우가 많다.
    • 이런 경우에는 평행이동의 수식을 포함하여 회전 변환을 수행한다. 이것은 영상의 기준점을 원점으로 이동시킨 후 회전을 수행하고, 다시 기준점으로 이동하는 것이다.

x = (x' - cneter X) \cdot cos \theta + (y' - center Y) \cdot sin \theta + center X \\ y = -(x' - cneter X) \cdot sin \theta + (y' - center Y) \cdot cos \theta + center Y

행렬 연산을 통한 기하학 변환 – 어파인 변환(Affine Transform)

  • 앞서 기술한 기하학 변환들의 수식은 행렬식으로 표현 가능하다. 즉, 기하학 변환 수식이 행렬의 곱으로 표현되는 것이다. 각 변환식은 다음과 같은 수식으로 표현할 수 있다.

회전 

\left[ \begin{array}{rr} x' \\ y'  \end{array} \right] = \left[ \begin{array}{rr} cos \theta & - sin \theta \\ sin \theta & cos \theta \end{array} \right] \left[ \begin{array}{rr} x \\ y  \end{array} \right]

크기변경

\left[ \begin{array}{rr} x' \\ y'  \end{array} \right] = \left[ \begin{array}{rr} \alpha & 0 \\ 0 & \beta \end{array} \right] \left[ \begin{array}{rr} x \\ y  \end{array} \right]

평행이동

\left[ \begin{array}{rr} x' \\ y'  \end{array} \right] = \left[ \begin{array}{rr} x \\ y \end{array} \right] \left[ \begin{array}{rr} t_{x} \\ t_{y}  \end{array} \right]

  • 회전과 크기변경은 2×2 행렬로 표현이 가능하지만, 평행이동까지 포함하려면 2×3 행렬이 필요하다. 다음 수식과 같이 2×3 행렬로 변환 행렬을 구성하는 것을 어파인 변환이라 한다.

\left[ \begin{array}{rr} x' \\ y'  \end{array} \right] = \left[ \begin{array}{rrr} \alpha_{11} & \alpha_{12} & \alpha_{13} \\ \alpha_{21} & \alpha_{22} & \alpha_{23} \end{array} \right] \cdot \left[ \begin{array}{rrr} x \\ y \\ 1  \end{array} \right]

  • 어파인 변환은 변환 전과 변환 후의 두 어파인 공간 사이의 공선점을 보존하는 변환이다.
    • 따라서 변환 전에 직선은 변환 후에도 그대로 직선이며, 그 거리의 비도 유지된다. 또한 변환 전에 평행선도 변환 후에 평행선이 된다.
  • 어파인 변환을 수행하는 방법은 크게 2가지가 있다.
    • 하나는 회전 각도, 크기변경 비율, 평행이동의 정도를 지정해서 각각 변환 행렬을 구성한다. 그리고 각 변환 행렬을 행렬 곱으로 구성하면 하나의 변환 행렬을 만들 수 있다.
    • 각 행렬들을 곱하는 순서는 변환하고자는 방식에 따라서 달라질 수 있다.
    • 이때 2×3 크기의 어파인 행렬로 구성하면 행렬의 곱을 계산할 수 없기 때문에 다음 수식과 같이 3×3 크기의 행렬로 구성하여 행렬 곱을 수행한다.

어파인 변환행렬

\left[ \begin{array}{rrr} cos \theta & -sin' \theta & 0 \\ sin \theta & cos \theta & 0 \\ 0 & 0 & 1 \end{array} \right] \cdot \left[ \begin{array}{rrr} \alpha & 0 & 0 \\ 0 & \beta & 0 \\ 0 & 0 & 1 \end{array} \right] \cdot \left[ \begin{array}{rrr} 1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1 \end{array} \right]

  • 행렬 곱을 완성하면 3×3 행렬에서 마지막 행(0 0 1)을 삭제하면 최종적으로 2×3 형태의 어파인 행렬이 된다.
  • 다른 한 가지 방법으로 위 그림과 같이 변환 전인 입력영상의 좌표 3개 (x1, x2, x3)와 변환이 완료된 목적영상에서 상응하는 좌표 3개 (x’1, x’2, x’3)를 알면 두 좌표 (x -> x’) 사이를 변환해 주는 어파인 변환 행렬을 구할 수 있다.
  • 이렇게 행렬의 곱으로 기하학 변환을 적용하면 단순하면서도 쉽게 입력영상에 대한 변환이 가능하다.
    • OpenCV 에서도 어파인 변환을 수행할 수 있는 cv::wrapAffine() 함수를 제공한다. 이 함수는 지정된 어파인 변환 행렬을 적용하면 입력영상에 어파인 변환을 수행한 목적영상을 반환한다.
  • 또한 어파인 변환 행렬을 만드는 함수로는 cv::getAffineTransform()과 cv::getRotationMatrix2D()가 있다.
    • cv::getAffineTransform()는 변환 전의 좌표 3개와 변환 후의 좌표 3개를 지정하면 해당 변환을 수행해 줄 수 있는 어파인 행렬을 반환한다.
    • cv::getRotationMatrix2D()는 회전 변호나과 크기 변경ㅇㄹ 수행하는 어파인 행렬을 반환한다. 여기서 회전의 방향은 양수일 때 반시계 방향으로 회전하는 행렬을 반환한다.
반환형 이름 파라미터 내용
void wrapAffine

InputArray src,
OutputArray dst,
InputArray M,
Size dsize,
int flags,
int borderMode

입력영상에 어파인 변환을 수행해서 반환한다.
Mat getAffineTransform InputArray src,
OutputArray dst,
Point2f src[],
Point2f dst[]
3개의 좌표쌍을 입력하면 어파인 변환 행렬을 반환한다.
Mat getAffineTransform const Point2f src[],
const Point2f dst[]
 
Mat getRotationMatrix2D Point2f center,
double angle,
double scale
회전 변환과 크기 변경을 수행할 수 있는 어파인 행렬을 반환한다.

원근 투시(투영) 변환 (Perspective Projection Transformation)

  • 원근 투시 변환은 원근법을 영상 좌표계에서 표현하는 것이다. 원근 투시 변환은 아래 그림과 같이 3차원의 실세계의 좌표를 투영 스크린상의 2차원 좌표로 표현할 수 있도록 변환해 주는 것을 말한다.
  • 영상 처리에서 원근변환은 주로 2차원 영상을 다른 2차원 영상으로 변환할 때 사용한다.
    • 예컨대 카메라에서 입력 받은 영상에서 카메라 렌즈에 의한 왜곡을 보정할 수 있다. 그리고 원근감이 잘 표현된 2차원 영상을 변환하여 3차원 공간상의 거리를 측정하고자 할 때 사용될 수도 있다.
  • 원근 투영 변환을 사용할 때는 동차 좌표계(homogeneous coordinates)를 사용하는 것이 편리하다.
    • 동차 좌표계는 모든 항의 차수가 동일하기 때문에 붙여진 이름으로 n차원의 투영 공간을 n+1개의 좌표로 나타내는 좌표계이다. 좀 더 쉽게 말하면 직교 좌표인 (x, y)를 (x, y, 1)로 표현하는 것이다.
    • 이것을 일반화해서 표현하면 0이 아닌 상수 w에 대해 (x, y)를 (wx, wy, w)로 표현한다. 이렇게 되면 상수 w가 무한히 많기 때문에 (x, y)에 대한 동차 좌표 표현은 무한히 많이 존재하게 된다.
    • 거꾸로 동차 좌표계에서 한 점 (wx, wy, w)을 직교 좌표로 나타내면 각 원소를 w로 나누어저 (x/w, y/w)가 된다.
  • 원근변환을 수행할 수 있는 행렬은 다음과 같다. 이 수식으로 입력영상의 좌표를 목적영상의 좌표로 변환하면 원근변환이 수행된다.

w \cdot \left[ \begin{array}{rrr} x' \\ y' \\ 1\end{array} \right] = \left[ \begin{array}{rrr} \alpha_{11} & \alpha_{12} & \alpha_{13} \\ \alpha_{21} & \alpha_{22} & \alpha_{23} \\ \alpha_{31} & \alpha_{32} & \alpha_{33} \end{array} \right] \cdot \left[ \begin{array}{rrr} x \\ y \\ 1 \end{array} \right]

데코수학/ 부분벡터공간

개념

  • (V, +', \cdot ') : V.S over \mathbb{F} 일때, (W, +', \cdot ') : sub V.S of (V, +', \cdot ') (V.S = Vector Space)
    • \Leftrightarrow
      • W \subseteq V
      • +', \cdot ' W 위에서 그대로 잘 정의되어,  (W, +', \cdot ') : V.S over \mathbb{F}
  • Sub V.S 예시
    • \mathbb{Q}^{n} (over \mathbb{Q} ) : sub V.S of \mathbb{R}^{n} (over \mathbb{Q} )
    • V : sub V.S of V
    • \{ \vec{0}_{V} \} : sub V.S of V
    •  
  • W : sub V.S of V
    • \Leftrightarrow
      • \vec{0}_{V} \in W
      • a, b \in W \Rightarrow a + b \in W
      • \alpha \in \mathbb{F}, a \in W \Rightarrow \alpha \cdot a \in W
  • Sub V.S 특징
    • W : sub V.S of V , U : sub V.S of W \Rightarrow U : sub V.S of V
    • W_{\alpha} : sub V.S of V  \Rightarrow \cap W_{\alpha} : sub V.S of V
    • W_{1}, W_{2} : sub V.S of V 
      • \Rightarrow
        • W_{1} \cup W_{2} : sub V.S of V  \Leftrightarrow W_{1} \subseteq W_{2} \lor W_{2} \subseteq W_{1}
    • W_{1}, W_{2} : sub V.S of V 
      • \Rightarrow
        • W_{1} + W_{2} : sub V.S of V
        • W_{1}, W_{2} : sub V.S of W_{1} + W_{2}
        • U : sub V.S of V, W_{1} \subseteq U, W_{2} \subseteq U \Rightarrow W_{1} + W_{2} \subseteq U
    • W : sub V.S of V
      • \Leftrightarrow
        • W \neq \emptyset (c \in \mathbb{F}, a, b \in W \Rightarrow c \cdot a \in W, a + b \in W)
        • 0_{v} \in W (\alpha \in \mathbb{F}, a, b \in W \Rightarrow \alpha \cdot a + b \in W)
  • (V_{1}, +_{1}, \cdot_{1}), (V_{2}, +_{2}, \cdot_{2}) : V.S over \mathbb{F} 일때, 곱집합 
  • 벡터 공간의 External Direct Sum
    • V_{1} \times V_{2} = \{ (a, b) | a \in V_{1}, b \in V_{2}  \} 에 다음 연산을 정의한다.
      • (a, b) +_{E} (c, d) = (a +_{1} c, b +_{2} d)
      • \alpha \cdot_{E} (a, b) = (\alpha \cdot_{1} a, \alpha \cdot_{2} b)
    • 그러면 (V_{1} \times V_{2}, +_{E}, \cdot_{E}) 는 V.S over \mathbb{F} 가 된다.
    • 이 벡터공간을 V_{1} \oplus_{E} V_{2} 이라 한다.
  • 벡터 공간의 Internal Direct Sum
    • (Z, +, \cdot) : V.S over \mathbb{F} , (X, +, \cdot), (Y, +, \cdot) : sub V.S of (Z, +, \cdot) 일 때
      • Z = X \oplus_{I} Y
        • \Leftrightarrow
          • \forall z \in Z, \exists x \in X, y \in Y, z = x + y
          • X \cap Y = {\vec{0}}
  • (Z = X \oplus_{I} Y) \approx X \oplus_{E} Y
    • External, Internal Direct Sum이 Isomorphic 하기 때문에 특별히 구분 하지 않고 X \oplus Y 라 쓴다.
  • 벡터 공간의 Direct Sum의 예
    • \mathbb{R} \oplus \mathbb{R} \approx \mathbb{R}^{2}
      • \{ (a, 0) | a \in  \mathbb{F} \} \oplus \{ (0, b) | b \in  \mathbb{F} \} \approx \mathbb{F}^{2}
    • \mathbb{F} \oplus (\mathbb{F} \oplus \mathbb{F}) \approx \mathbb{F}^{3}
    • \mathbb{F}^{2} \oplus \mathbb{F}^{3}  \approx \mathbb{F}^{5}
    • \mathbb{R} \oplus_{I} \mathbb{R}_{i} = \mathbb{C} \approx \mathbb{R} \oplus_{E} \mathbb{R} = \mathbb{R}^{2}
  • Direct Sum of Many V.S 에 대해서도 정의 가능. 유한한 경우와 무한한 경우 정의가 다른데 생략.

19.05.25

짐짝이 달린다…운전석 없는 자율주행 트럭 시험주행

시험 운행은 저속구간인 산업단지 공공도로의 300미터 구간에서 이뤄진다. 회사 물류 창고에서 출발해 게이트를 거쳐 단지터미널로 들어갔다가 되돌아오는 코스다. 짧은 구간이지만 도중에 5번의 회전 코너가 있고 다른 차량들과 함께 운행해야 하는 구간도 있어 자율주행 능력을 테스트하는 데는 적절하다는 평가다. 초기 주행 속도는 시속 5km로 제한했다. 매일 한 차례 이상 왕복운행 테스트를 할 예정이라고 한다.

시간이 문제일 뿐 확실한 미래. 파도가 오면 파도에 올라 타야지 거스르면 안 된다.

강력한 기억력의 원천은 ‘보상’

사람 등 포유류 뇌에서 기억을 관장하고 있는 부위는 관자엽 안쪽에 있는 해마(hippocampus)다. 새로운 사실을 기억하고 학습 활동을 관장하는 중요한 기관이다.

뇌에서 신경 단위 세포가 생성되는 몇 안 되는 영역 가운데 하나로 무엇인가 중요하다고 판단되는 새로운 경험을 통해 새로운 사실을 인식할 경우 ‘기억의 공고화 과정’을 거쳐 장기간 그 사실을 기억하게 된다.

클로스터만 교수 연구팀은 해마에서 이루어지는 이 기억의 공고화 과정이 반복적인 경험뿐만 아니라 또 다른 요인에 의해 강화되고 있다고 판단했다.

특히 기억력이 긍정적인 보상 효과와 큰 관련이 있다고 보고, 쥐 실험을 시도했다.

모든 정보에는 우선 순위가 있다. 뇌 입장에서 반복적으로 인출(retrieval) 되는 정보나, 확실한 보상(reward)과 관련된 정보에는 우선순위를 높일 수 밖에 없지. 우리가 처리하는 업무(task)도 마찬가지잖아?

플랑크톤이 소멸하고 있다

용커스 교수는 “데이터의 비교 분석 결과 해수 온도 상승과 플랑크톤 잔해의 축적 규모 간에 밀접한 상관관계를 보여주고 있다”며, “수온 상승이 바다 생태계의 기초가 되는 플랑크톤 생존에 심각한 영향을 미치고 있다는 것을 확신하고 있다”고 말했다. (중략)

플랑크톤의 소멸은 바다 생태계에 있어 큰 변화를 예고하는 것이다. 이 상태가 지속될 경우 바다 생물 생태계의 근간이 흔들리고, 바다와 함께 살고 있는 인류의 삶에 지대한 영향을 미칠 수 있다. 예상했던 우려가 현실로 나타나고 있다.

바다 속 플랑크톤이 만들어내는 산소가 3/4 이라는데, 심각한 일이다.

온실가스로 온실가스 잡는 ‘이이제이’ 묘책

지구 평균온도를 산업화 이전보다 2도 높은 정도로 유지하기 위해 내놓은 여러 방책들은 근본적으로 대기에 배출되는 이산화탄소 총량을 줄이든지, 이미 배출된 대기중 이산화탄소를 나무심기나 땅속 격리 등으로 제거하는 방법에 근거하고 있다. 하지만 기후변화에 기여도가 훨씬 큰 메탄가스 같은 다른 온실가스를 제거하는 것도 보완책일 수 있다고 연구팀은 제안했다.

이산화탄소 제거 방책들은 전형적으로 수십년에 걸쳐 수천억톤의 이산화탄소를 제거하는 것을 가정하지만, 그렇게 해도 대기를 산업화 이전 수준으로 되돌릴 수 없다. 반면 대기중 32억톤의 메탄을 지구 산업용 배출량의 몇달치에 해당하는 이산화탄소로 전환시켜 제거하면 메탄 농도의 산업화 이전 수준을 회복할 수 있다. 이런 작업이 성공하면 지금까지의 지구 온난화 원인의 6분의 1이 제거되는 것이다.

공유지의 비극 문제. 결코 나라들의 합의로는 온난화를 막을 수 없다. 방법은 지구공학 뿐.

12만 년 전 인류 생태 지능 ‘탁월’

남아프리카공화국 케이프 남부에 있는 클래지스(Klasies) 강 유역 동굴에서 실시된 최근의 발굴조사에 따르면, 화덕에서 새까맣게 탄 음식 잔해물을 분석한 결과 해부학적으로 현대인에 속하는 인류가 이미 12만 년 전에 덩이뿌리와 뿌리줄기 같은 녹말질 음식을 구워 먹었던 것으로 밝혀졌다.

그렇다고 합니다.

러셀 서양철학사/ 13세기

  • 중세 시대는 13세기에 전성기를 맞이 함.
    • 로마의 몰락 이후 점차 형성되기 시작한 종합은 도달 가능한 수준만큼 완결되었음.
    • 14세기에 여러 제도와 철학 체계들이 해체되고, 15세기에 우리가 지금도 근대적 특징으로 간주하는 제도와 철학들이 나타나기 시작 함.
  • (이하 인물들, 이단 종교 설명 생략)

러셀 서양철학사/ 12세기

  • 12세기의 4가지 양상은 다음과 같다.
    • 황제권과 교황 체제의 계속되는 갈등
    • 롬바르디아 도시들의 발흥
    • 십자군
    • 스콜라 철학의 설장
  • (중간 중간 역사와 인물의 배경 이야기는 생략)
  • 교황과 황제 사이에 벌어진 투쟁의 최종 결과는 하인리히 3세에게 굴복했던 교황이 황제와 필적하는 권력자가 되었다는 것이다.
    • 동시에 교황은 교회 내에서 완전한 주권자가 되어 교황 특사들을 파견해 지배력을 과시했다.
    • 이와 같이 교황 권력이 증대함에 따라 주교들의 지위는 점점 낮아졌다.
    • 교황 선출은 세속 군주의 지배에서 자유로워졌고, 성직자들은 대체로 교회 개혁 이전보다 도덕성을 갖추게 되었다.
  • 좁은 의미의 스콜라 철학은 12세기에 시작된다. 스콜라 철학은 철학 학파로서 명확한 특징을 나타낸다.
    • 첫째, 스콜라 철학의 저자들은 신앙에 따르는 범위 내에 갇혀 있다.
    • 둘째, 정통 신앙의 한계 내에서 12세기를 거쳐 13세기에 이르는 동안 점차 충분히 알려지게 된 아리스토텔레스를 최고 권위로 받아 들인다. 플라톤은 더는 최고 권위로 군림하지 못하게 된다.
    • 셋째, 변증법과 삼단논법의 추리에 대한 믿음이 대단히 확고했다. 스콜라 철학자들의 일반적 기질은 신비주의에 기울기 보다는 엄밀하고 논쟁을 좋아했다.
    • 넷째, 보편자 문제는 아리스토텔레스와 플라톤의 견해가 다르다는 사실을 발견함으로서 표면화 되었다.
  • (이하 다양한 사람들과 설명 생략)
  • 12세기에 번역가들이 점차 늘면서 서방의 학생들이 그리스 서적을 더 많이 손에 넣을 수 있게 되었다. 이러한 번역서를 낸 주요 공급원 세 곳이 콘스탄티노플, 팔레르모, 톨레도였다.
    • 이 가운데 톨레도는 가장 중요한 곳이었는데, 그리스어를 직접 번역하지 않고, 아랍어로 번역된 책을 중역하는 일이 흔했다.
    • 12세기 중엽 톨레도의 대주교 레몽은 번역가 양성 대학을 설립했고, 대학의 업적으로 풍성한 열매를 맺었다.

러셀 서양철학사/ 이슬람교 문화와 철학

  • 이슬람교의 기원 헤지라(Hegira, Hijra)는 622년에 일어났으며 무하마드는 10년 후 사망.
    • 그가 죽은 직후 아랍인은 정복을 시작하여 엄청난 속도로 정복사업을 이어감.
  • 무하마드가 세운 종교는 정교한 삼위일체설이나 육화 신학으로 뒤얽히지 않은 단순한 일신교였음.
    • 무하마드는 자신을 신이라 주장하지도 않았고, 그를 따르던 신도들이 자신을 신이라 주장하지도 못하게 했음.
    • 그는 우상 숭배를 금지하는 유대인의 풍습을 부활시켰으며 포도주 사용도 금지했음.
    • 신자들의 의무는 이슬람교의 확장을 위해 가능한 한 세계의 더 많은 지역을 정복하라는 명령을 이행하는 일이었으나, 그리스도교를 비롯하여 유대교나 조로아스터교도 쿠란에서 경전의 가르침을 따르는 자들이라 부른 ‘성서의 백성(people of the book)’을 박해하지 않았음.
  • 아랍 제국은 전제군주국으로 제국을 통치하는 칼리프는 무하마드의 후계자로서 신성한 성품을 대부분 물려 받았음.
    • 칼리프의 지위에 오르려면 명목상 선출의 절차를 밟아야 했으나 곧 세습제로 바뀜.
  • 아랍인은 새로운 종교의 이름으로 세계의 대부분 지역을 정복했지만, 종교심이 깊은 종족은 아니었음. 아랍인이 정복을 시작한 동기는 종교가 아니라 약탈과 재물 때문.
    • 소수의 이슬람교 전사가 큰 어려움 없이 고도의 문명과 낯선 종교를 겸비한 다수 사람들을 지배할 수 있었던 것도 광신의 요소가 결여되어 있었기 때문.
  • 페르시아인은 일찍부터 종교심이 깊고 사색의 수준이 높았는데, 페르시아인은 개종한 다음 이슬람교로부터 예언자 무하마드와 그의 동족이 상상했던 것보다 훨씬 더 흥미진진하고 더욱 종교적이고 더욱 철학적인 종교를 만들어 냄.
  • 661년 무하마드의 사위 알리가 죽은 뒤 이슬람교도는 수니파와 시아파로 나뉨. 수니파가 더 큰 종파이고, 시아파는 알리를 계승함.
    • 페르시아인은 오랫동안 시아파에 속함.
  • 이슬람교 철학자인 아비세나는 선대 이슬람교 철학자들보다 아리스토텔레스와 더 가까웠고, 신플라톤 학파와는 멀어졌음.
    • 그는 후에 그리스도교 스콜라 철학자들처럼 보편자 문제에 몰두함.
  • 아비세나는 아베로에스와 알베르투스 마그누스가 반복해 사용한 공식을 고안 함. “사유가 형상들의 일반성을 만들어낸다.”
    • 그는 유, 즉 보편자가 동시에 사물 앞에도, 사물 안에도, 사물 다음에도 존재한다고 말 함.
    • 유는 신의 지성 안에서는 사물 앞에 존재한다. 자연계의 물체 안에서는 사물 안에 존재한다. 우리의 사유 안에서는 사물 다음에 존재한다.
  • 아베로에스는 신플라톤 학파의 영향을 지나치게 받았던 아랍인들의 아리스토텔레스 해석을 바로 잡는데 관심을 가졌음.
    • 그는 마치 교주 대하듯 아리스토텔레스에 존경을 표함.
    • 아베로에스는 신의 존재를 계시에 의존하지 않고 이성을 통해 증명할 수 있다고 주장했는데, 이는 토마스 아퀴나스가 주장한 견해이기도 함.
    • 영혼 불멸에 관해서도 아베로에스는 아리스토텔레스를 철저히 따른 것으로 보이며, 영혼은 불멸하지 않지만 지성은 불멸한다고 주장함.
    • 그러나 이러한 견해가 인격의 영혼 불멸을 보장해주지는 못하는데, 지성은 다른 인격들 안에 나타나더라도 같기 때문. 그리스도교 철학자들은 이러한 아베로에스의 견해를 제거하기 위해 분투함.
  • 아베로에스는 엄격한 정통 신앙을 고집하지 않음.
    • 당시 철저한 정통 신학자들로 구성된 종파에서는 모든 철학이 신앙에 해롭다고 선언하며 반대했는데, 아베로에스는 <파괴의 파괴>라는 책을 집필하여 응수함.
    • 아베로에스는 종교란 비유 형태로 철학적 진리를 포함한다고 생각함.
  • 아베로에스는 이슬람교 철학보다 그리스도교 철학에서 더 중요한 인물.
    • 이슬람교에서 그는 발전의 끝을 의미했으나, 그시르도교에서는 발전의 시작을 의미함.
  • 아랍 철학은 독창적인 사사응로서는 중요한 가치를 지니지 않는다. 아비세나와 아베로에스는 본래 주석가였음.
    • 전성기 이슬람교 문명은 예술과 여러 방면에서 기술이 경탄할 만하지만, 이론적인 문제에서는 독자적인 사색의 역량을 보여주지 못 함.
  • 그러나 문명의 전달자로서 갖는 이슬람 문명의 중요한 가치를 과소평가해서는 안 됨.

러셀 서양철학사/ 11세기 교회 개혁

  • 유럽은 서로마 제국 멸망 이후 11세기에 처음으로 급속한 진보를 이룸.
    • 이러한 진보는 수도원 개혁과 더불어 시작되었으며, 그 다음 교황 체제와 교회 조직으로 확대 되었다.
    • 11세기가 막을 내릴 무렵 최초의 스콜라 철학자들이 배출 되었다.
    • 교육 수준은 성직자 계급에서 많이 높아졌고, 세속 귀족 계급에서도 상당한 수준까지 높아졌다.
  • 초기 단계의 개혁 운동은 주창자들의 정신 속에 자리 잡았다가 도덕적 동기에 의해 현실로 나타남.
    • 성직자들의 부패와 타락 때문에 사람들은 성직자들이 그들의 원칙에 더 적합한 생활을 하도록 하는 일에 착후함.
    • 여기는 또 다른 동기가 있었는데, 성직자와 속인을 완전히 분리함으로써 성직자 계급의 힘을 키우는 것.
    • 교회 개혁의 승리가 곧바로 황제와 교황의 권력 투쟁으로 이어진 사태는 당연한 귀결이었음.
  • (이하 성직자의 부패, 교황과 황제의 대립 등에 대한 내용 생략)
  • 성 안셀무스는 신의 존재에 대한 ‘존재론적 증명’ 제창자로 유명함
    • 안셀무스는 ‘신’을 생각할 수 있는 가장 큰 대상으로 정의하고 어떤 사유 대상이 존재하지 않는다면 그것과 꼭 같으면서 존재하는 다른 사유 대상이 더 큰 대상이 되므로 사유의 모든 대상들 가운데 가장 큰 대상이 존재해야 하는 까닭은 그렇지 않으면 더 큰 대상이 가능할 것이라고 주장. 그렇기 떄문에 신은 존재한다고 주장함.
    • 신학자들은 안셀무스의 논증을 수용하지 않았고, 토마스 아퀴나스는 안셀무스의 논증을 거부함.
  • 안셀무스는 플라톤 철학의 많은 요소를 습득했는데, 플라톤의 이상들이 존재한다고 믿고, 여기에서 또 다른 신 존재 증명을 도출해 냄.
    • 신플라톤 학파의 논증들에 따라 그는 신의 존재 뿐만 아니라 삼위일체도 입증하겠다고 선언함.
    • 안셀무스는 이성이 신앙에 종속되어야 한다고 생각함. 그는 ‘나는 이해하기 위해 믿는다’라고 말함.
    • 또한 아우구스티누스를 추종하여 신앙이 없이는 이해도 불가능하다고 주장.
    • 신은 의로운 존재가 아니라 의로움 자체라고 말함.
  • 안셀무스는 선대 그리스도교 철학자들과 마찬가지로 아리스토텔레스보다 플라톤의 전통에 속함.
    • 때문에 그는 토마스 아퀴나스에서 절정에 달한 ‘스콜라’ 철학의 뚜렷한 특징을 드러내지 않음.
  • 중세의 플라톤 사상은 현대의 연구자가 플라톤의 저술에서 도출한 사상과 여러 면에서 달랐음.
    • 중세 시대 플라톤 사상은 종교와 명백한 관련이 없는 거의 모든 요소를 누락하는데 그치지 않고, 종교철학 내에서는 다른 요소를 희생시키고 특정한 측면을 확대하거나 강조했음.
    • 이렇게 플라톤 사상 체계에 일어난 변화는 이미 플로티노스에 의해 나타남.
  • 아리스토테렐스에 대해서도 단편적으로 알려졌으나, 정반대 방향으로 변화가 일어남.
    • 12세기까지 아리스토텔레스에 대해 알려진 것이라고는 보이티우스가 번역한 <범주론>과 <명제론>이 전부였음.
    • 따라서 아리스토텔레스는 그저 변론가로 생각되었던 반면, 플라톤은 종교철학자이자 이상 이론의 창시자로 여겨짐.
    • 중세 후반기에 접어들면서 아리스토텔레스의 사상 체계에 대한 편견은 차츰 바로 잡혔으나 플라톤에 대한 생각은 르네상스 시대까지 변하지 않았음.

데코수학/ 벡터 공간

개념

  • (V, +, \cdot) : 스칼라 \mathbb{F} 에 대한 벡터 공간 (+ : V \times V \to V, \cdot : \mathbb{F}\times V \to V )
    • \Leftrightarrow
      • \forall u, v \in V, u + v = v + u
      • \forall u, v, w \in V, u + (v + w) = (u + v) + w
      • \exists \vec{0} \in V, \forall \in V, u + \vec{0} = \vec{0} + u
      • \forall u \in V, \exists (-u) \in V, u + (-u) = (-u) + u = \vec{0}
      • \forall u \in V, 1 \cdot u = u
      • \forall \alpha, \beta \in \mathbb{F}, \forall u \in V, \alpha \cdot (\beta \cdot u) = (\alpha \cdot \beta) \cdot u
      • \forall \alpha \in \mathbb{F}, \forall u, v \in V, \alpha \cdot (u + v) = \alpha \cdot u + \alpha \cdot v
      • \forall \alpha, \beta \in \mathbb{F}, \forall u \in V, (\alpha + \beta) \cdot u = \alpha \cdot u + \beta \cdot u
    • 용어
      • \mathbb{F} 의 원소는 스칼라
      • V 의 원소는 벡터
      • + 는 벡터합
      • \cdot 는 스칼라곱
      • (V, +, \cdot) \mathbb{F} 에 대한 벡터공간
  • 벡터공간의 예
    • (\mathbb{F}^{n}, +_{c}, \cdot_{c}) : \mathbb{F} 에 대한 벡터공간
      • 스칼라의 카테시안도 벡터공간이 된다. 위 8가지 조건을 만족함.
    • (M_{m \times n}(\mathbb{F}), +_{c}, \cdot_{c}) : \mathbb{F} 에 대한 벡터공간
      • 행렬도 벡터공간이 된다. 위 8가지 조건을 만족함.
    • (\mathbb{F}^{S}, +', \cdot ') : \mathbb{F} 에 대한 벡터공간
      • 함수들도 벡터공간이 된다. 위 8가지 조건을 만족함.
    • (\mathbb{F}^{\mathbb{N}}, +', \cdot ') : \mathbb{F} 에 대한 벡터공간
      • 수열공간도 벡터공간이 된다. 위 8가지 조건을 만족함.
    • 미지수 x 에 대하여, \mathbb{F}[x] = \{a_{0} + a_{1} x + a_{2} x^{2} + ... + a_{n} x^{n} | n \in \mathbb{N}, a_{i} \in \mathbb{F} \} \ , +' 는 다항식의 덧셈, \cdot ' 는 다항식에 스칼라곱이라 같이 정의하면
      • (\mathbb{F}[x], +', \cdot ') : \mathbb{F} 에 대한 벡터공간
    • V 를 “합동이면 같은 것으로 보는 유향 선분의 집합”, +' 는 “평행사변형식 덧셈”, 
    • \cdot ' 는 “길이만 스칼라배 늘리기”로 정의하면
      • (V, +', \cdot ') : \mathbb{R} 에 대한 벡터공간
  • 벡터공간이라면 다음이 성립한다.
    • \forall u, v, w \in V, u + w = v + w \Leftrightarrow u = v
    • \vec{0} 는 유일하다.
    • u 마다, (-u) 가 유일하다.
    • 0 u = \vec{0}
    • (- \alpha) u = \alpha (-u)
    • \alpha \vec{0} = \vec{0}
    • \alpha u = \vec{0} \Rightarrow \alpha = 0 \lor u = \vec{0}
    • \alpha x = \beta x (x \neq \vec{0}) \Rightarrow \alpha = \beta
    • \alpha x = \alpha y (\alpha \neq 0) \Rightarrow x = y
  • 벡터공간으로써 구조가 같다.
    • (V, +_{1}, \cdot_{1}), (W, +_{2}, \cdot_{2}) : Vector-space Isomorphic (over \mathbb{F} )
    • \Leftrightarrow
      • \exists \phi : V \to W : 전단사,
        • \phi (a +_{1} b) = \phi (a) +_{2} \phi (b)  
        • \phi(\alpha \cdot_{1} a) = \alpha \cdot_{2} \phi (a)  
    • 이때 \phi 를 VS isomorphism 이라 부른다.
      • \phi : V \approx W
    • \mathbb{F} \approx \mathbb{F}^{1} \approx M_{1 \times 1} (\mathbb{F})
    • \mathbb{F}^{n} \approx M_{n \times 1} (\mathbb{F}) \approx M_{1 \times n} (\mathbb{F})

금융으로 본 세계사

제목 그대로 금융을 중심으로 세계사의 변화를 짚은 책. 

나는 역사의 흐름은 결국 이권에 달려있고, 대부분의 경우 경제적인 자원이 그 중심에 있으니, 역사의 흐름에는 경제적인 이슈가 끼어 있다고 생각하기 때문에 –전쟁은 대단히 리스크가 큰 일이기 때문에 결코 그냥 일어나지 않는다. 전쟁을 통해 얻을 수 있는 이익이 리스크보다 크기 때문에 전쟁이 일어난다– 그런 류의 내용을 기대 했는데, 책 자체는 그냥 경제사에 가깝다.

뭐 그냥 저냥이다.

 

OpenCV로 배우는 영상 처리 및 응용/ 영역 처리

회선 (Convolution)

공간 영역의 개념과 회선

  • 영상 처리에서 ‘영역’에 대한 하나의 의미는 두 개의 다른 범위(domain)의 구분이다.
    • 하나는 공간 영역(spatial domain)이고, 다른 하나는 주파수 영역(frequency domain)이다.
      • 공간 영역은 영상들이 다루어지는 화소 공간을 의미하는데, x, y 차원의 2차원 공간을 말한다.
    • 다른 하나는 영역 기반 처리(area based processing)라는 표현에서 사용하는 영역이다.
      • 이는 화소 기반 처리와 상반되는 의미로서, 화소점 하나 하나의 개념이라기 보다는 화소가 모인 특정 범위(영역)의 화소 배열을 의미한다.
  • 화소 기반 처리가 화소값 각각에 대해 여러 가지 연산을 수행하는 것이라면, 공간 영역 기반 처리는 마스크(mask)라 불리는 규정된 영역을 기반으로 연산이 수행된다. 이러한 이유에서 공간 영역 기반 처리를 마스크 기반 처리라고도 한다.
  • 마스크 기반 처리는 마스크 내의 원소값과 공간 영역에 있는 입력 영상의 화소값들을 대응되게 곱하여 출력화소값을 계산하는 것을 말한다. 이러한 처리를 하는 과정을 모든 출력화소값에 대해 이동하면서 수행하는 것을 회선(convolution)이라고 한다.
    • 이때 입력 영상에 곱해지는 마스크는 커널(kernel), 윈도우(window), 필터(filter) 등의 용어로 불려진다.
  • 위 그림은 3×3 크기의 마스크로 회선을 수행하는 과정을 표현한 것으로, 출력 화소 O22는 대응되는 위치에 있는 입력화소 I22와 마스크 크기만큼의 주위 화소들을 이용해서 계산된다.
    • 즉 마스크의 각 원소가 같은 위치의 입력화소와 곱해지며, 이 곱한 값들을 모두 더해서 출력 화소가 계산된다.
    • 계속적으로 출력화소 O23은 입력 영상에서 마스크를 한 화소 오른쪽으로 이시킨 후에 대응되는 입력화소들과 곱하여 계산된다.
    • 같은 방법으로 입력 영상의 모든 화소에 대해 마스크를 이동시켜 곱하고, 그 값들을 모두 더해서 해당 위치의 출력화소가 계산된다.
  • 결과적으로 회선으로 생성되는 영상은 마스크의 원소 값에 따라 결정된다. 즉, 입력 영상의 각 화소의 위치에서 마스크의 크기의 주변 화소들을 마스크 원소의 비율만큼 반영하는 것이다.
    • 이 마스크의 원소를 어떻게 결정하느냐에 따라 결과 영상이 드라마틱하게 달라진다.

블러링(Blurring)

  • 블러링은 영상에서 화소값이 급격하게 변하는 부분들을 감소시켜 점진적으로 변하게 함으로써 영상이 전체적으로 부드러운 느낌이 나게 하는 기술이다.
    • 경우에 따라 스무딩(smoothing)이라고 하는 경우도 있다.
  • 화소값이 급격하게 변하는 것을 점진적으로 하는 방법은 회선을 이용한 필터링을 이용하는 것이다.
    • 마스크를 아래 그림과 같이 모든 원소의 값을 같게 구성하여 회선을 수행하면 블러링이 적용된다.
    • 이때 마스크의 전체 원소의 합은 1이 되어야 입력 영상의 밝기가 유지된다.
  • 아래 그림은 회선을 통한 블러링을 설명하기 위한 내용이다.
    • 아래 그림에서 O22와 O23의 계산에서 입력 영상 중 6개 화소가 동일하며, 나머지 3개 화소만 다르다.
    • 이웃하는 두 출력화소는 마스크 크기 내에서 입력화소의 2/3가 공통 부분이고 블러링 마스크의 원소 값이 모두 같기 때문에 입력화소가 같은 비율로 출력화소에 반영된다.
    • 따라서 입력화소의 공통부분이 같은 비율로 반영되기 떄문에 출력 영상에서 이웃하는 화소들이 비슷한 값을 갖게 된다.

샤프닝(sharpening)

  • 블러링이 이웃 화소의 차이를 감소시켜서 부드럽게 만드는 것이라면, 샤프닝은 이웃 화소끼리 차이를 크게 해서 날카로운 느낌이 나게 만드는 것이다.
    • 이렇게 함으로써 영상의 세세한 부분을 강조할 수 있으며 경계 부분에서 명암대비가 증가되는 효과를 낼 수 있다.
  • 입력 영상의 화소와 출력 영상의 화소가 마스크의 중심 위치에서 대응된다. 이 마스크의 중심 위치의 계수를 중심계수라고 한다.
    • 마스크 중심계수의 비중이 크면 출력 영상은 입력 영상의 형태를 유지하게 된다. 추가적으로 주변 계수들을 중심계수와 값의 차이를 크게 만들면 샤프닝이 수행된다.
    • 여기서 마스크 원소의 전체 합이 1이 되어야 입력 영상의 밝기가 손신 없이 출력 영상의 밝기로 유지된다. 마스크 원소의 합이 1보다 작으면 출력 영상의 밝기가 입력 영상보다 어두워지며, 1보다 크면 입력 영상보다 더 밝아진다.
    • 따라서 중심계수는 1보다 훨씬 크게 구성하며, 주변 화소는 비중을 감소시킬 수 있도록 음수 값을 갖게 한다. 그리고 전체 원소의 합은 1이 되도록 구성하면 샤프닝 필터가 완성된다. 아래 그림은 이와 같은 조건에 부합하는 샤프닝 마스크의 예이다.

에지(Edge) 검출

  • 영상처리에서 에지는 윤곽선 혹은 경계선의 의미를 갖는다. 이 윤곽선은 객체에서 크기, 위치, 모양을 인지할 수 있으며, 그 방향성을 탐지할 수 있다.
    • 따라서 에지 검출은 영상 처리에서 아주 중요하며 기본적인 처리 분야로 다루어진다.
  • 위 그림은 영상의 특정 지점(40, 250)에서 가로로 50개의 화소를 가져와서 그 화소값을 그래프로 나타낸 모습이다.
    • 그래프에서 원으로 표시한 부분들을 보면 화소값에서 급격하게 변하여 그래프가 꺾이는 것을 볼 수 있는데, 28번째 픽셀에서 화소값이 급격하게 낮아지며, 32번째 픽셀 주위에서는 다시 급격하게 높아진다.
    • 이렇게 화소값 그래프에서 급격하게 꺽이는 부분을 영상에서 보면 모서리나 윤곽선 혹은 경계 부분인 것을 알 수 있다.
  • 에지 검출(edge detection)이란 에지에 해당하는 화소를 찾는 과정으로 그 방법으로는 가장 간단하게 이웃하는 화소의 차분을 이용하여 그 차분이 특정 임계값 이상인 곳을 에지로 지정하는 것이다.
    • 또한 에지는 마스크를 이용하여 계산할 수도 있는데, 1차 미분 마스크나 2차 미분 마스크를 사용하여 회선을 수행하는 것이다.

차분 연산을 통한 에지 검출

  • 단순하고 빠른 에지 검출 방법으로 유사 연산자와 차 연산자를 이용한 방법이 있다.
    • 유사 연산자는 중심화소에서 각 방향의 주변 화소와 차분을 계산하고, 그 중에서 가장 큰 값을 출력화소로 결정하는 방법이다. 아래 그림에서 보듯 8방향의 차분을 계산해야 한다.
    • 반면 차 연산자는 중심화소를 배제하고 주변 화소의 상하 차분, 좌우 차분, 그리고 대각선 차분을 계산하고 그 중에서 가장 큰 값을 출력 화소로 결장하는 방법이다.
  • 회선의 방법과 유사하게 입력 영상의 해당 화소에 마스크를 위치시키지만 화소값과 마스크 원소를 곱하는 것이 아니라 마스크 범위의 입력 화소들 간에 차분을 계산한다.
    • 차 연산자의 경우 중심화소를 배제시켰기 때문에 4번의 차분만 계산하여 속도 면에서 유리하다.
  • 위 그림은 차 연산자를 이용한 에지 검출 예제이다. 여기서 반복을 통해서 원소의 대각선 방향 차분(start-end)을 구하기 위해 mask 벡터를 도입해서 그림과 같이 계산한다.

1차 미분 마스크

  • 영상의 특정 좌표에서 가로 방향(혹은 세로방향)으로 화소값들을 구성했을 때, 결과 그래프에서 밝기의 변화를 파악할 수 있다.
    • 에지가 화소의 밝기가 급격히 변하는 부분이기 때문에 함수의 변화율을 취하는 미분 연산을 이용해서 에지를 검출할 수 있다.
    • 영상에서 밝기의 변화율을 검출하는 방법은 밝기에 대한 기울기(gradient)를 계산하는 것이다. 현재 화소에서 밝기의 기울기를 계산하고, 이 기울기의 크기를 구하면 에지가 된다. 
    • 그러나 디지털 영상은 연속이 아닌 이산된 데이터이기 때문에 엄밀한 의미에서 미분 연산을 할 수 없다. 그래서 다음과 같은 수식으로 근사하여 계산한다.

G[f(x, y)] = \left[ \begin{array}{rr} G_{x} \\ G_{y}  \end{array} \right] = \left[ \begin{array}{rr} {\partial f(x, y) \over \delta x} \\ {\partial f(x, y) \over \delta y}  \end{array} \right]

G_{x} = {f(x + dx, y) - f(x, y) \over dx} \fallingdotseq f(x+1, y) - f(x, y), (dx = 1)

G_{y} = {f(x, y + dy) - f(x, y) \over dy} \fallingdotseq f(x, y+1) - f(x, y), (dy = 1)

G[f(x, y)] \fallingdotseq \sqrt{G_{x}^{2} + G_{y}^{2}} \approx |G_{x}| + |G_{y}|

\theta = tan^{-1}({G_{y} \over G_{x}})

  • 먼저 2차원 공간 상의 한 화소에서 수평 방향과 수직 방향으로 각각 미분한다. 이를 편미분이라 한다.
    • 그리고 각 방향의 편미분을 한 화소단위 (dx = 1, dy = 1)의 차분으로 근사한다.
    • 다음으로 각 방향의 차분을 이용해서 기울기의 크기를 계산한다. 이 크기가 에지의 강도가 된다.
    • 여기서 계산 복잡도를 줄이기 위해 제곱과 제곱근 대신, 절댓값을 사용하기도 한다. 또한 역탄젠트(arctan) 함수에 가로 방향과 세로 방향 차분을 적용하면 에지의 방향을 계산할 수도 있다.
  • 이러한 1차 미분 공식을 영상에 구현하는 쉬운 방법이 1차 미분 마스크로 회선을 적용하는 것이다.
    • 마스크의 중심 위치의 입력 화소가 f(x, y)일 때 주변 화소의 위치를 보면 위 그림과 같다.
    • 마스크 원소를 (a)와 같이 f(x, y), f(x, y+1) 위치에 -1과 1을 구성하여 회선을 수행하면, 회선의 내부 계산 수식이 f(x, y+1) – f(x, y) 이 되어서 y 방향 미분인 Gy와 같은 결과가 된다.
    • 또한 (b)와 같이 f(x, y), f(x+1, y) 위치에 -1과 1을 구성하여 회선을 수행하면, 회선 수식이 f(x+1, y) – f(x, y)이 되어서 x 방향 미분인 Gx가 적용된다.
    • 이렇게 회선의 수식을 이용해서 차분을 계산할 수 있도록 마스크의 원소를 구성하면 1차 미분 마스크가 된다. 이 마스크를 적용해서 입력 영상에 회선을 수행하면 에지 검출이 가능하다. 이때 마스크 계수의 합은 0이 되어야 한다.
  • 이 외에도 다양한 1차 미분 마스크가 있으며 대표적으로는 소벨(Sobel), 프리윗(Prewitt), 로버츠(Roberts) 등이 있다.

로버츠(Roberts) 마스크

  • 로버츠 마스크는 아래 그림과 같이 대각선 방향으로 1과 -1을 배치하여 구성된다. 나머지 원소의 값이 모두 0이어서 다른 1차 미분 마스크에 비해 수행 속도가 빠르다.
    • 그리고 한 번만 차분을 계산하기 때문에 차분의 크기가 작고, 이로 인해 경계가 확실한 에지만을 추출하며, 잡음에 매우 민감하다.

프리윗(Prewitt) 마스크

  • 프리윗 마스크는 로버츠 마스크의 단점을 보완하기 위해 고안되었다.
    • 먼저 수직 마스크를 보자. 원소의 배치가 수직 방향으로 구성되어서 수직 마스크라고 하며, 결과 영상에서 에지의 방향도 수직으로 나타난다.
    • 중심화소의 앞과 뒤 화소로 x 방향의 차분을 3번 계산하고, 다음 수평 마스크는 중심화소에서 위와 아래의 화소로 y 방향으로 차분을 3번 계산한다.
    • 최종적으로 수직 마스크의 회선 결과와 수평 마스크의 회선 결과에 대해서 크기(magnitude)로 결과 영상(에지 강도)을 생성한다.
    • 세 번의 차분을 합하기 때문에 로버츠 연산자에 비해 에지의 강도가 강하며, 수직과 수평 에지를 동등하게 찾는데 효과적이다.

소벨(Sobel) 마스크

  • 소벨 마스크는 에지 추출을 위한 가장 대표적인 1차 미분 연산자이다. 마스크의 구성은 프리윗 마스크와 유사하지만, 중심화소의 차분에 대한 비중을 2배로 키운 것이 특징이다.

2차 미분 마스크

  • 1차 미분 연산자는 밝기가 급격하게 변화하는 영역 뿐만 아니라 점진적으로 변화하는 부분까지 민감하게 에지를 검출하여 너무 많은 에지가 나타날 수 있다.
    • 이를 보완하기 위한 방법으로 1차 미분에서 한 번 더 미분을 하는 방법이 2차 미분 연산이 있다.
    • 2차 미분 연산자는 변화하는 영역의 중심에 위치한 에지만을 검출하며, 밝기가 점진적으로 변화되는 영역에 대해서는 반응을 보이지 않는다.
    • 대표적인 방법으로는 라플라시안(Laplacian), LoG(Laplacian of Gaussian), DoG(Difference of Gaussian) 등이 있다.

라플라시안(Laplacian) 에지 검출

  • 가장 대표적인 2차 미분 연산자로 라플라시안이 있다. 프랑스 수학자 라플라시안의 이름을 따서 지은 라플라시안은 함수 f에 대한 그래디언트의 발산으로 정의되며 수식으로 표현하면 다음과 같다.

\Delta f = \nabla^{2} f = \nabla \nabla f

  • 영상은 2차원 좌표계이기 때문에 2차원 직교좌표계에서 라플라시안의 수식은 다음과 같다.

\nabla^{2} f = {\partial^{2} f \over \partial x^{2}} + {\partial^{2} f \over \partial y^{2}}

  • 각 항을 디지털 영상의 화소로 근사하여 1차 미분한 결과에 한 번 더 미분을 수행하면 다음과 같이 정리할 수 있다.

{\partial^{2} f \over \partial x^{2}} = {\partial f(x+1, y) \over \partial x} - {\partial f(x, y) \over \partial x}

= [f(x+1, y) - f(x,y)] - [f(x,y) - f(x-1, y)]

= f(x+1, y) - 2 \cdot f(x, y) - f(x-1, y)

{\partial^{2} f \over \partial y^{2}} = {\partial f(x, y+1) \over \partial y} - {\partial f(x, y) \over \partial y}

= [f(x, y+1) - f(x,y)] - [f(x,y) - f(x, y-1)]

= f(x, y+1) - 2 \cdot f(x, y) - f(x, y-1)

  • 두 항을 더하면 라플라시안 마스크의 공식이 완성된다.

\nabla^{2} f(x, y) = f(x-1, y) + f(x+1, y) + f(x, y-1) + f(x, y+1) - 4 \cdot f(x, y)

  • 3 x 3 크기의 마스크를 예로 라플라시안 마스크 공식에 적용하면 중심화소를 4배로 하고 상하좌우 화소를 중심화소와 반대 부호를 갖게 구성한다. 또한 마스크 원소의 전체 합은 0이 되어야 한다.
  • 이런 방법으로 아래 그림 (a)와 같이 두 개의 마스크를 구성할 수 있으며, 4방향을 가지는 마스크가 된다.
    • 경우에 따라서는 (b)와 같이 8방향으로 늘려 보면 모든 방향의 에지를 검출하고자 할 때도 있다. 중심계수의 값을 더 크게 하고 8방향의 모든 값을 반대 부호가 되게 하면 된다.

LoG와 DoG

  • 라플라시안은 잡음에 민감한 단점이 있다. 그래서 잡음을 먼저 제거하고 라플라시안을 수행한다면 잡음에 강한 에지 검출이 가능할 것이다. 잡음 제거의 수단이 다양하게 있기에 미디언 필터링 혹은 최대/최솟값 필터링 등을 수행할 수 있다.
    • 그러나 이런 방법들은 비선형 공간 필터링이기 때문에 먼저 잡음 제거 필터링을 수행하고, 다시 라플라시안을 수행해야 한다. 바로 속도에서 문제가 있는 것이다.
  • 잡음을 제거하는 달느 방법으로 선형 공간 필터를 선택하여 회선을 하고, 그 후에 라플리사인 마스크로 회선하는 방법을 생각해 볼 수 있다. 이 경우 두 가지 모두 선형 필터링이기 때문에 다음 수식과 같이 단일의 마스크로 계산할 수 있다.
    • 여기서 Gσ는 가우시안 스무딩 마스크이며, *는 회선을 의미한다.

\Delta [G_{\sigma}(x, y) * f(x, y)] = [\Delta G_{\sigma}(x, y)] * f(x, y) = Log * f(x, y)

  • 이렇게 구성한 마스크를 LoG(Laplacian of Gaussian)라고 한다. LoG 마스크를 수식에 따라 풀면 다음과 같다.

LoG(x, y) = - {1 \over \pi \sigma^{4}} [1 - {x^{2} + y^{2} \over 2 \sigma^{2}}] \cdot e^{{-(x^{2} + y^{2}) \over 2 \sigma^{2}}}

  • 이 수식으로 마스크의 계수를 구성하고, 회선을 수행하면 잡음에 강한 에지를 검출할 수 있다.
    • 다만 수식에 따라 마스크 계수를 생성할 때 값의 범위가 너무 작은 관계로 전체 계수의 합이 0에 가까워지도록 스케일 조정이 필요하다.
  • LoG는 복잡한 공식에 의해 마스크를 생성해야 하며, 그에 따라 수행 시간도 많이 걸리게 된다. 이런 단점을 보완하여 LoG와 유사한 기능을 하면서 단순한 방법으로 구현하는 알고리즘이 바로 DoG(Difference of Gaussian)이다.
  • DoG는 가우시안 스무딩 필터링의 차이를 이용해서 에지를 검출하는 방식으로 공식은 아래와 같다.

DoG(x, y) = ({1 \over 2 \pi \sigma_{1}^{2}} \cdot e^{{-(x^{2} + y^{2}) \over 2 \sigma_{1}^{2}}}) - ({1 \over 2 \pi \sigma_{2}^{2}} \cdot e^{{-(x^{2} + y^{2}) \over 2 \sigma_{2}^{2}}}) (\sigma_{1} < \sigma_{2})

  • 두 개의 표준 편차를 이용해서 가우시안 마스크를 만들고 그 차이가 DoG 마스크가 된다.
    • 이 마스크로 회선을 수행하면 에지 검출이 가능하다. 여기서 각 표준 편차의 값을 조절함으로써 검출할 에지의 넓이를 조절할 수 있다.
    • 또한 좀 더 쉽게 DoG를 구현하는 방법은 두 개의 표준 편차로 가우시안 마스크를 생성하여 회선을 수행하고, 그 결과 행렬들의 차분을 계산하는 것이다.

캐니 에지 검출

  • 영상 내에서 잡음은 다른 부분과 경계를 이루는 경우가 많다. 그러다 보니 대부분의 에지 검출 방법이 이 잡음들을 에지로 검출하게 된다. 이런 문제를 보완하는 방법 중의 하나가 John F. Canny에 의해 개발된 캐니 에지(Canny Edge) 검출 방법이다.
  • 캐니 에지 알고리즘은 일반적으로 다음 네 단계의 알고리즘으로 구성되어 있다.
    1. 블러링을 통한 노이즈 제거(가우시안 블러링)
    2. 화소 기울기(gradiant)의 강도와 방향 검출 (소벨 마스크)
    3. 비최대치 억제(non-maximum suppression)
    4. 이력 임계값(hysteresis threshold)으로 에지 결정
  • 첫 단계에서 블러링은 5 x 5 크기의 가우시안 필터를 적용해서 수행한다. 여기서 블러링은 불필요한 잡음을 제거하기 위해서 수행하는 것이기 때문에 마스크의 크기를 다르게 하든지 혹은 다른 필터링을 적용해도 무관하다.
  • 다음으로 화소 기울기(gradient) 검출에는 가로 방향과 세로 방향의 소벨 마스크로 회선을 적용하고 회선이 완료된 행렬(Gx, Gy)를 이용해서 화소 기울기의 크기(magnitude)와 방향(direction)을 계산한다. 그리고 기울기의 방향은 4개 방향 (0, 45, 90, 135)로 근사하여 단순화 한다.
    • 여기서 아래 그림과 같이 기울기의 방향과 에지의 방향은 수직을 이루는 것에 유의하자.
  • 비최대치 억제(non-maximum suppression)라는 것은 현재 화소가 이웃하는 화소들보다 크면 에지로 보존하고 그렇지 않으면 에지가 아닌 것으로 간주해서 제거하는 것이다.
    • 먼저 에지의 방향에 있는 이웃 화소는 비교할 필요가 없기 때문에 아래 그림과 같이 기울기의 방향에 있는 두 개의 화소를 비교 대상으로 선택한다.
    • 그리고 현재 화소와 선택된 두 화소의 에지 강도를 비교하여 최대치가 아니면 억제되고, 최대치인 것만 에지로 결정한다.
  • 비최대치를 억제하여도 에지가 아닌 것이 에지로 결정된 경우가 많이 존재한다. 잘못된 에지를 제거하는 쉬운 방법 중 하나가 임계값을 설정하고, 에지의 강도가 이 임계값보다 작으면 에지에서 제외하는 것이다.
    • 그러나 이 방법은 임계값이 높으면 실제 에지도 제거될 수 있으며, 임계값이 낮으면 잘못된 에지를 제거하지 못하는 문제가 생길 수 있다.
  • 캐니 알고리즘은 잘못된 에지를 제거하고 정확한 에지만을 검출하여 에지가 끊어지는 것을 방지하는 방법으로 이력 임계값 방법(hysteresis thresholding)을 사용한다.
    • 이것은 두 개의 임계값 (Thigh, Tlow)을 사용해서 에지의 이력을 추적하여 에지를 결정하는 방법이다.
    • 이 방법은 각 화소에서 높은 임계값 (Thigh) 보다 크면 에지 추적을 시작한다.
    • 그리고 추적을 싲가하면 추적하지 않은 이웃 화소들을 대상으로 낮은 임계값 (Tlow) 보다 큰 화소를 에지로 결정하는 방식이다.
  • 아래 그림의 예시를 보면 A 부분은 높은 임계값보다 높아서 에지로 결정된다. C 부분은 높은 임계값보다 낮지만 에지 추적에 의해서 에지로 결정된다.
    • 반면 B 부분은 C 부분보다 에지의 강도는 높지만, 높은 임게값 보다 큰 이웃하는 부분이 없기 때문에 에지로 결정되지 않는다. 
    • 즉 낮은 임계값 이상인 에지들이 높은 임계값에서부터 연결되어 있다면 에지로 간주하는 것이다.

기타 필터링

최댓값/최솟값 필터링

  • 최댓값/최솟값 필터링은 입력 영상의 해당 화소(중심화소)에서 마스크로 씌워진 영역의 입력화소들을 가져와서 그 중에 최댓값 혹은 최솟값을 출력화소로 결정하는 방법이다.
  • 따라서 최댓값 필터링은 가장 큰 값인 밝은 색들로 출력화소가 구성되기 때문에 돌출되는 어두운 값이 제거되며, 전체적으로 밝은 영상이 된다.
    • 최솟값 필터링은 가장 작은 값들인 어두운 색들로 출력화소가 구성되기 때문에 돌출되는 밝은 값들이 제거되며, 전체적으로 어두운 영상이 된다.
    • 최댓값 필터링은 밝은 임펄스 잡음이 강조되며, 최솟값 필터링은 어두운 임펄스 잡음이 강조될 수 있다. 경우에 따라 높은 대조를 가진 영상에서 특징을 확대시키기 위한 기법으로 이용될 수 있다.

평균값 필터링

  • 평균값 필터링은 마스크로 씌워진 영역의 입력화소들을 가져와서 그 화소들의 평균을 구하여 출력화소로 지정하는 방법이다.
    • 마스크 영역의 화소값들을 평균하기 때문에 블러링의 효과가 나타난다.
  • 입력 영상의 상하좌우 끝부분에 있는 화소들은 마스크를 씌웠ㅇㄹ 때 입력화소가 존재하지 않는 화소들이 있다.
    • 3 x 3 마스크일 경우에는 상하좌우로 한 화소씩이 해당하며, 5 x 5 마스크일 경우에는 상하좌우 두 화소씩이 해당된다.
    • 이 경우 배열 참조가 잘못되어 오류가 발생하기 때문에 추가적인 방법을 적용해서 출력화소를 결정해야 한다.
    • OpenCV에서도 cv::filter2D(), cv::blur(), cv::boxFilter(), cv::sepFilter2D()와 같은 필터링을 수행하는 함수들에서 상하좌우 경계부분의 화소값을 결정하는 방법으로 borderType 이라는 옵션 상수를 다음과 같이 정의해 두었다.
옵션 상수 설명
BORDER_CONSTANT 0 특정 상수값으로 대체
BORDER_REPLICATE 1 계산 가능한 경계의 출력화소 하나만으로 대체
BORDER_REFLECT 2 계산 가능한 경계의 출력화소로부터 대칭되게 한 화소씩 지정
BORDER_WRAP 3 영상의 왼쪽 끝과 오른쪽 끝이 연결되어 있다고 가정하여 한 화소씩 가져와서 지정

미디언 필터링

  • 미디언 필터링은 중간값을 이용하기에 중간값 필터링이라고도 한다.
  • 중간값 필터링 과정은 아래 그림과 같다.
    • 먼저 입력 영상에서 해당 입력화소를 중심으로 마스크를 씌워 마스크 크기 내에 있는 입력화소들을 가져온다. 회선과는 다르게 마스크 계수는 필요하지 않고, 마스크의 크기만 필요하다.
    • 그리고 마스크 내에 있는 화소들을 크기 순으로 정렬한다.
    • 정렬된 화소값 중에서 중간 값을 취하여 출력 화소로 지정한다.
    • 이와 같은 과정을 마스크를 이동하며 모든 입력솨호에 대해 수행해서 출력영상을 생성한다.
  • 일정 영역에서 다른 화소들과 밝기가 심하게 차이가 나는 화소들은 임펄스(impulse noise) 잡음이나 소금-후추(salt & pepper) 잡음일 가능성이 높다.
    • 미디언 필터링 과정에서 마스크 영역 내의 심하게 차이가 나는 화소들은 정렬로 인해서 최하위 값이나 최상위 값이 된다. 따라서 중간 값만이 출력화소로 지정되고, 나머지 값들은 출력화소로 지정되지 않고 제거된다.
    • 이러한 이유로 미디언 필터링은 임펄스 잡음이나 소금-후추 잡음을 잘 제거해 준다. 또한 평균 필터를 이용한 필터링에 비하면 블러링 현상이 적다.
    • 다만 마스크의 크기가 커지면 잡음의 제거 성능은 향상되지만, 정렬 알고리즘을 수행해야 하는 부담 때문에 수행 시간이 기하급수적으로 증가한다.
  • 미디언 필터링은 보통 명암도 영상에서 효과적으로 수행된다.
    • RGB 컬러 공간에서는 3개 채널간의 상호 의존도가 매우 크다. 예컨대 한 채널에서는 특정 화소가 주위와 심한 차이를 보여서 제거되어도, 다른 채널에서는 같은 화소가 주위와 차이가 작아서 제거되지 않는 경우들이 생긴다. 이런 경우 RGB 조합이 맞지 않아서 오히려 잡음이 더 많아질 수도 있다.

가우시안 스무딩 필터링

  • 스무딩(smoothing)은 영상의 세세한 부분을 회선을 통해서 부드럽게 하는 기법으로 블러링과 같은 의미이다.
  • 스무딩 처리에 사용되는 대표적인 방법으로 가우시안 필터링이 있다. 가우시안 필터링은 가우시안 분포를 마스크의 계수로 사용해서 회선을 수행하는 것을 말한다.
    • 가우시안 분표는 정규 분포(normal distribution)으로 특정 값의 출현 비율을 그래프로 그렸을 때, 평균에서 가장 큰 수치를 가지며, 평균을 기준으로 좌우 대칭의 형태가 나타나고, 좌우 양끝으로 갈수록 급격하게 수치가 낮아지는 종 모양의 형태를 보인다.
    • 정규 분포를 평균(\mu )과 표준편차(\sigma )를 이용해서 함수식으로 표현하면 아래 수식과 같고, 이 수식에 따라 그래프를 그리면 아래 그림과 같다.
    • 그래프에서 표준 편차가 커지면 그래프의 폭이 넓어지고 표준편차가 작아지면 폭이 좁하진다.

N(\mu, \sigma)(x) = {1 \over \sigma \sqrt{2\pi}} exp(- {(x - \mu)^{2} \over 2 \sigma^{2}})

 

  • 가우시안 분포를 회선 마스크로 적용하려면 2차원으로 구성해야 한다. x, y 좌표를 축으로 2차원 가우시안 분포 함수를 구성하면 다음의 수식과 같고 이것을 그래프로 표현하면 아래 그림과 같다.

N(\mu, \sigma_{x}, \sigma_{y})(x, y) = {1 \over \sigma_{x} \sigma_{y} \sqrt{2\pi}} exp[- ({(x - \mu)^{2} \over 2 \sigma_{x}^{2}} + {(y - \mu)^{2} \over 2 \sigma_{y}^{2}})]

  • 이 가우시안 분포 값으로 마스크를 구성하여 회선을 수행하면 가우시안 스무딩을 수행할 수 있다.
    • 단, 마스크 계수의 전체 합이 1이 되어야 입력 영상의 밝기를 유지할 수 있다.
    • 여기서 표준편차를 변경하면 그래프에서 기둥의 폭을 조절할 수 있다. 즉, 마스크 계수의 구성을 표준편차로 조정하는 것이다.
    • 표준편차가 클수록 평균의 높이는 낮아지고, 폭이 넓어진다. 따라서 생성되는 마스크는 블러링 마스크와 유사하게 만들어진다. 결과 영상에 중심화소와 비슷한 비중으로 주변 화소가 반영되기 때문에 흐림의 정도가 심해진다.
    • 표준편차가 작아지면 구성된 마스크에서 중심계수의 값이 커지고, 주변 계수의 값은 작아진다. 이럴 경우 결과 영상에 중심화소의 비중이 커지기 때문에 흐림의 정도가 약화된다.

모폴로지(morphology)

  • 모폴로지는 형태학이라는 뜻으로서 영상 처리에서는 객체들의 형태(shape)를 분석하고 처리하는 기법을 말한다. 이 형태학적 처리를 활용하여 영상의 경계, 골격, 블록 등의 형태를 표현하는데 필요한 요소를 추출한다.
  • 영상 내에서 아주 작은 크기의 객체들은 잡음일 가능성이 높다. 이런 작은 크기의 객체는 그 크기를 더 깎아내서 제거하거나, 객체들을 분리하거나, 객체를 팽창하거나 할 때 필요한 것이 모폴로지이다.
  • 모폴로지는 객체의 형태를 변형시켜야 하기 때문에 주로 이진 영상에서 수행된다. 대표적인 연산 방법으로는 침식 연산과 팽창 연산이 있으며, 이 두 개를 결합한 닫힘 연산과 열림 연산이 있다.

침식 연산(erosion operation)

  • 침식 연산은 말 그대로 객체를 침식시키는 연산이다. 따라서 객체의 크기는 축소되고 배경은 확장된다. 객체의 크기가 축소되기 때문에 영상 내에 존재하는 잡음 같은 작은 크기의 객체들은 사라질 수도 있다.
  • 이러한 현상을 이용해서 소금-후추(salt & papper) 잡음과 같은 임펄스(impulse) 잡음들을 제거한다. 영상 내에서 객체의 돌출부를 감소시키기 때문에 서로 닿는 물체를 분리할 때도 유용하게 사용할 수 있다.
  • 위 그림은 이진 영상에서 침식 연산의 과정에 대한 내용이다. 
    • 입력 영상의 중심화소 주변에서 마스크 크기의 화소들을 가져와서 침식 마스크와 원소 간(element-wise)에 일치하는지를 비교한다. 여기서 침식 마스크의 원소가 1인 값에 대해서만 비교를 수행한다.
    • 그림의 상단과 같이 입력 영상의 화소와 마스크 원소가 한 개의 화소라도 일치하지 않으면 출력화소는 검은색인 0이 된다.
    • 반면 그 아래쪽의 그림과 같이 입력 영상의 화소와 마스크 원소와 비교해서 모두가 일치하면 출력화소는 흰색인 1이 지정된다.
    • 마스크의 크기와 원소의 구성은 입력 영상의 형태에 따라 사용자가 조정하여 더 나은 결과를 생성할 수 있다.
  • 아래 그림은 입력 영상에 값을 표시하고 침식 연산을 수행하여 결과 영상에 값을 표시한 예이다.
    • 입력된 이진 영상에서 객체로 인식되는 흰색의 블록들은 그 경계부분이 깎여져서 출력 영상이 만들어진다.

팽창 연산(dilation operation)

  • 팽창 연산은 객체를 팽창시키는 연산이다. 객체의 최외곽 화소를 확장시키는 기능을 하기 때문에 객체의 크기는 확대되고 배경은 축소된다. 또한 객체의 팽창으로 인해 객체 내부에 있는 빈 공간도 메워지게 된다.
  • 위 그림은 이진 영상에서 팽창 연산을 수행하는 과정을 나타낸 것이다.
    • 마스크 범위의 입력화소와 팽창 마스크의 원소 간(element-wise)에 일치하는 지를 비교한다. 팽창 마스크가 1인 원소와 해당 입력화소가 모두 불일치하면 출력화소로 0을 지정한다. 그리고 1개 화소라도 일치하게 되면 1이 출력화소로 결정된다.
  • 아래 그림은 팽창 연산의 결과를 예시한 것이다.
    • 팽창 연산 수행 결과로 객체의 외각이 확장되며 객체 내부의 빈 공간이 경계부분의 확장으로 인해 메워진다. 
    • 반면에 잡음으로 예상되는 작은 크기의 객체도 확장되는 것을 볼 수 있다.

열림 연산과 닫힘 연산

  • 열림 연산과 닫힘 연산은 모폴로지의 기본 연산인 침식 연산과 팽창 연산의 순서를 조합하여 수행한다.
  • 열림 연산(opening operator)은 침식 연산을 먼저 수행하고, 바로 팽창 연산을 수행한다.
    • 침식 연산으로 인해 객체는 축소되고, 배경 부분의 미세한 잡음들은 제거된다.
    • 다음으로 축소되었던 객체들이 팽창 연산으로 인해 다시 원래 크기로 돌아간다.
  • 아래 그림은 열림 연산의 과정을 예시한 것이다. 배경 부분의 잡음을 제거하면서 침식 연산으로 인한 객체 크기의 축소를 방지할 수 있다. 
    • 다만 돌출된 부분은 제거된 후 다시 원래 크기로 돌아가지 않는다.
  • 닫힘 연산(closing operator)은 팽창 연산을 먼저 수행하고, 다음으로 침식 연산을 수행한다.
    • 팽창 연산으로 객체가 확장되어서 객체 내부의 빈 공간이 메워진다.
    • 다음으로 침식 연산으로 확장되었던 객체의 크기가 원래대로 축소된다.
    • 최종 결과 영상을 보면 객체 내부의 비어있던 공간이 채워지며, 인접한 객체를 이어지게 하는 효과도 있다.
    • 모폴로지 연산은 한 번의 수행으로 결과 영상이 미흡할 경우에는 여러 번 반복적으로 수행할 수 있다.