시각 인지의 요소(Element of Visual Perception)

 

비록 디지털 영상처리라는 학문이 수학과 확률론적 이론을 토대로 만들어 졌지만, 그 근간에는 인간의 직관과 분석력, 그리고 인지 매커니즘이 있다. 그러므로 인간의 시각적 인지 방법을 이해하는 것은 중요하다. 하지만 이 주제는 굉장히 방대하고 복잡하여 모든 부분을 다룰 순 없다. 따라서 이번 포스팅에선 이미지가 어떻게 형성이 되고 이를 인간이 어떻게 인지하는지에 대한 매커니즘을 공부해 보도록하자. 또한 인간의 시각 및 인지력의 물리적 한계를 디지털 영상처리와 관련하여 이해해보도록 하자. 

 

 

 

1. 인간 눈의 구조(Structure of Human Eye)

 

잠시 해부학 공부를 해보자. 아래 그림은 인간의 눈의 단면을 나타낸 것이다. 모양은 구체에 가깝고 평균 지름은 대략 20mm정도이다. 총 3개의 막이 눈을 에워싸고 있는데, 각막(cornea)공막(sclera)이 외부를 감싸고, 맥락막(choroid) 그리고 망막(retina)순으로 위치해 있다. 

 

 

 

 

각막은 앞쪽의 표면을 덮는 거칠고 투명한 조직이다. 각막과 이어져 눈의 나머지 전체를 덮고 있는 공막은 불투명한 막이다. 맥락막은 공막 바로 아래에 위치해 있으며, 눈에 영양분을 공급하는 혈관 조직을 가지고 있다. 이 맥락막은 아무리 작은 상처라도 눈에 혈액공급을 원할하게 하지 못하는 염증(inflammation)을 일으켜 눈에 손상을 입힐 수 있다. 맥락막은 두꺼운 색소층을 가지고 있어 관련없는 빛이 눈에 들어오는 것을 줄여주고 눈 안쪽 전체로 후방산란(backscatter)시킨다. 

 

이 막의 앞쪽 끝단에서 맥락막은 모양체(ciliary body)홍채(Iris)로 나뉜다. 홍채는 눈으로 들어오는 빛의 양을 늘리거나 줄이는 조절 기능을 한다. 홍채의 개방(동공: pupil) 정도는 대략 지름 2~8mm 범위에서 열리고 닫힌다. 홍채의 앞쪽 부분은 색소층을 가지고 있고 뒤쪽은 검은 색소를 띄고 있다. 

 

렌즈(lens)는 섬유세포(fibrous cell)들이 동심원을 이루어 여러층으로 이루어져 있으며 섬유질에 의해 모양체에 붙어있다. 60~70%의 물, 6% 정도의 지방, 그리고 눈의 다른 조직들에 비해 보다 많은 단백질로 구성되어 있다. 렌즈는 약간 노란색을 띄고 있으며 나이가 들 수록 노란 색소가 증가한다. 극단적인경우 백내장(cataract)에 의한 렌즈 혼탁이 와서 색깔 구분 능력을 떨어트리고 시야를 흐리게 만든다. 렌즈는 가시광선 스펙트럼 영역의 약 8%를 흡수하며 짧은 파장(wavelength)에서 상대적으로 높은 흡수율을 보인다. 적외선과 자외선 모두 렌즈 구조 내의 단백질에 의해 상당량 흡수 되며, 과도할 경우 눈에 손상을 입히게 된다. 

 

눈의 가장 안쪽에 존재하는 막은 망막(retina)으로써 안쪽 벽 전체를 차지하고 있다. 눈의 초점이 적절하게 맞을 경우, 외부 사물의 빛이 망막에 맺혀 이미지를 형성하게 된다. 망막의 표면엔 빛의 수용기(light receptor)가 다수 분포해 있어 패턴화된 시각(pattern vision)을 만들어 낼 수 있다. 눈의 망막에는 추상체(cones)와 간상체(rods)로 알려진 두 가지 종류의 빛 수용체가 있다.

추상체는 대략 600~700만개가 존재하며 주로 와(fovea)로 불리는 망막의 중심부에 위치해 있다. 추상체는 색깔에 굉장히 민감하며 인간은 주로 이 추상체를 이용하여 상세한 부분을 처리할 수 있다. 이는 각 추상체가 고유의 신경 말단에 연결되어 있기 때문이다. 

눈의 근육들은 눈의 회전눈의 회전을 제어하며 관심영역의 물체가 와(fovea)에 오도록 한다. cone vision을 명소시(photopic or bright-light vision)라고도 부른다. 

 

간상체(rods)의 수는 추상체에 비해 훨씬 많으며 7,500만개 ~ 1억 5천만개가 망막 표면에 분포해 있다. 간상체의 넓은 분포와 몇 개의 간상체가 하나의 신경 말단에 연결되어 있기 때문에 디테일한 부분의 처리 보다는 전체적인 이미지를 인식하는데 사용된다. 간상체는 색상 인지나 처리에는 관여하지 않고 저 조도에 민감하다. 예를 들어 햇빛에서는 다양한 밝은 색상으로 보였던 물체가 달빛 아래에서는 색깔이 없는 물체로 보이는 현상이 있는데, 이는 오직 저조도에 민감한 간상체만 자극받기 때문이다. 이러한 현상을 암소시(scotopic or dim-light vision)라 한다. 

 

 

아래 그림은 눈에서 시신경이 출현하는 지역에서 추상체와 간상체들의 밀도를 그래프로 나타낸 것이다. 

 

 

            (cones: 추상체, Rods: 간상체)

 

그래프를 보면 아예 없는 부분이 있는데 이를 blind spot이라 한다. 이 부분을 제외하곤 수용기들의 분포는 와(fovea)를 중심으로 반지름 방향으로 대칭이다. 수용기 분포는 fovea로부터 각도 단위로(degree)측정되었다. 그래프를 보면 추상체는 망막의 중심부인 와에서 가장 밀도가 높다. 간상체는 중심부로부터 약 20도 까지는 증가하다가 Blind spot을 제외하곤 바깥으로 갈 수록 줄어드는 경향을 보인다. 

 

와(fovea)는 망막에 있는 지름 1.5mm정도의 원형 자국이다. 하지만 앞으로는 이를 정사각형, 혹은 사각형 형태의 센서 배열(sensor array)로 간주하고 설명할 것이다. 그 편이 더 이해하기 쉽고 유용하다. 우리는 앞으로 이 와(fovea)를 1.5mm x 1.5mm 크기의 센서 배열로 생각하자. 추상체의 밀도는 망막의 중심부에서 대략 150,000/mm^2 이다. 이러한 수치를 기반으로 추정해 봤을 때 눈에서 가장 예민한 부분의 추상체의 개수는 약 337,000개 이다. 

이러한 원시분해능 측면에서 보면 CCD(Charge-Coupled Device) imaging chip의 센서 개수는 중간 정도의 분해능 성능의 경우 5mm x 5mm 크기에서 이 정도가 된다. 디지털 영상 처리를 위한 이미지 센서등은 결국 인간의 시각 장치의 매커니즘을 분석하여 만들어진 것이다. 

 

 

 

 

 

2. 눈에서의 이미지 형성(Image Formation in the Eye)

 

일반적인 카메라의 경우 focal length(렌즈와 Image plane사이의 거리)는 고정되어 있다. 우리가 focusing이라고 부르는 것은 바로 이 Image plane(film 혹은 Digital Camera의 경우 imaging chip)과 렌즈사이의 거리를 맞추는 것이고, 물체와 카메라로부터의 거리에 따라 우리는 이 focus를 맞추어 선명한 물체 영상을 얻는 것이다. 

인간의 눈의 경우엔 정 반대이다. 렌즈와 상이 맺히는 영역(imaging region, retina)은 고정되어 있고, focus를 맞추기 위한 작업은 렌즈의 모양을 변형시켜 맞추게 된다. 이때 모양체(ciliary body)에 있는 섬유질(fibers)이 렌즈의 모양을 평평하게 혹은 두껍게 변형시켜 멀거나 가까운 물체를 잘 볼 수 있도록 한다. 아래 그림은 우리 눈에 사물이 어떻게 투영되는지를 아주 간단하게 나타낸 그림이다.  

 

 

 

위 그림에서 C는 초점이 모아지는 렌즈의 중심점(optical center of the lens)이고, 이 렌즈의 중심점으로부터 상이 맺히는 망막까지의 거리는 대략 14~17mm정도이다. h는 외부의 이미지가 망막에 형성되었을 때 그 크기를 나타낸 것이다. 

 

다음과 같은 가정을 해보자. 어떤 사람이 100m 떨어져 있는 15m크기의 나무를 바라본다고 가정해보자. 이때 눈의 망막에 맺힌 나무의 크기는 얼마가 될 것인가? 결국 h를 알아내는 문제이다. 우리는 이 문제를 비례식을 이용해서 풀 수 있다. 렌즈 중심점 C를 중심으로 이미지가 맺히는 망막까지의 거리(focal length)를 17mm, 사물까지의 거리를 100m, 사물의 크기를 15m라고 하자. 이를 간단히 비례식으로 나타내면 15:100=h:0.017이다. 0.017은 mm를 m단위로 바꾸어 써준 것이다. 계산해보면 h는 2.55mm가 나오는 것을 알 수 있다. 

 

앞서 언급했듯이 이미지는 가장 먼저 와(fovea)에 맺히게 된다. 인지 과정은 빛 수용체의 상대적 전기 자극에 의해 일어나는데, 복사에너지(radiant energy)를 전기적 임펄스 신호로 과정이 먼저 이루어지고 이러한 전기 신호들은 최종적으로 뇌에 전달되어 그 의미를 해석하게 된다.

 

 

 

 

 

3. 밝기 적응과 식별력(Brightness Adaptation and Discrimination)

 

디지털 이미지는 이산적인 밝기 값들로 표현이 되기 때문에, 서로 다른 밝기 값을 구별해내는 눈의 능력은 영상 처리 결과를 표현하는데에 있어 고려할만한 요소이다. 인간이 적응할 수 있는 밝기 변화는 생각보다 엄청난데, 암소시 한계점(scotopic threshold)에서부터 대략 10의 10승 정도의 밝기 범위를 구분이 가능하다. 다시 말하면 가장 어두운 밝기에서 가장 밝은 단계를 부분할 수 있는 범위가 10의 10승이라는 소리다. 

 

실제 실험에 의해 검증된 인간의 시각 시스템에 의해 인지된 밝기, 일명 주관적 밝기(subjective brightness)는 로그 함수로 나타낼 수 있다. 아래 그림은 이에 대한 결과 그래프이며 빛의 실제 세기에 대해 인간이 인지한 주관적인 밝기의 정도(subjective brightness)를 나타낸 것이다. 

 

 

그래프에서 암소시(scotopic) 부분을 보면 로그 함수 그래프와 같은 형태를 보이는 것을 알 수 있다. 즉 실제 밝기 변화가 많이 일어났다고 하더라도 인간은 그것을 실제보다 더 작은 변화로 인지한다는 뜻이다. 다음으로 명소시(photopic)부분을 살펴보자. 명소시 부분만 놓고 봤을 때, 범위는 약 10의 6승 정도이다. 암소시에서 명소시로의 전환은 점차적으로 이루어지는데, 범위는 대략 0.001 ~ 0.1 mililambert(log scale로는 -3 ~ -1 mL이다)이고 두 개의 curve가 겹치는 부분이 이 변환 부분이다. 

 

여기서 한 가지 눈여겨 봐야 하는 것은 인간의 시각 시스템은 이렇게 동적으로 변환되는 범위에서 동시에 작동하지 않는다는 것이다. 오히려 전체 감각을 변화시켜 이러한 큰 변환을 달성한다. 즉 어두운 상황에서 암소시 시스템이 작동하다가 점점 밝아져서 명소시 시스템이 겹쳐서 발생하는 상황이 오면 그때는 명소시 시스템이 작동하게 된다. 이를 밝기 적응(brightness adaptation)이라 한다. 또한 어떤 주어진 조건하에서 시각 시스템의 현재의 감각 단계를 밝기 적응 단계(brightness adaptation level)라 한다.  

 

특정 적응 단계에서 밝기 강도가 변하는 것을 구분하는 눈의 능력 또한 중요한 것 중 하나이다. 이에 대한 전형적인 실험이 있다. 다음을 상상해보자. 피험자가 평평하고 똑같은 밝기로 발광하는 어떤 패널을 바라보는 것이다. 이 영역은 피험자의 시야(field of view)를 전부 커버할 정도로 충분히 크고, 재질은 불투명한 유리로 되어있으며 유리의 뒤쪽에서 밝기$I$의 크기로 빛을 변화시켜가며 비춘다. 여기에 기존 밝기 대비 변화량인 $\Delta I$가 짧은 순간동안 패널의 중심부에 원형 형태로 나타난다. 아래 그림은 이 실험에서 패널 부분을 나타낸 것이다. 

 

 

 

 

$\Delta I$가 작으면 피험자들은 밝기 변화를 인지하지 못하고, $\Delta I$가 커질 수록 피험자들은 밝기 변화를 감지하게 된다. 이렇게 변화를 감지하기 위해선 기존의 밝기 값 $I$로 부터의 변화량 $\Delta I$가 충분히 커야하는데, 이를 weber ratio라고 한다. 쉽게 말해 10cm의 막대가 있는데, 10.01cm로 길이가 늘었을 때 막대의 길이가 변화했다는 것을 알아차리기는 매우 어려울 것이다. 그렇다면 원래 길이 대비 얼마만큼 늘어야 길이 변화가 감지되는지를 알아내는 것이 weber ratio의 목적이다. 

 

 

 

 

${\Delta I \over I}$ 값이 작으면 작은 변화량이 요구되고, 반대로 값이 크면 큰 변화량이 요구되는 것이다. 아래 그림은 밝기 값 $I$에 대한 weber ratio의 그래프를 log scale로 그린 것이다. 어두울수록 weber ratio값이 크고 밝아질수록 그 값이 작다. 이 말은 어두울 땐 밝기 변화를 알아차리기 어렵고 밝을 수록 상대적으로 쉽다는 것이다. 그래프가 두 개인 것은 어두울 때는 rods에 의해(암소시), 밝을 때는 cones에 의해(명소시) 밝기 변화를 인지한다는 것이다. 

 

 

밝기 인지에 대한 약간 다른 얘기를 해보자. 다음의 두 가지 현상은 밝기 인식이 단순히 밝기에 대한 함수가 아님을 증면한다. 첫 번재는 인간의 시각 시스템이 밝기가 다른 경계면 부분에서 undershoot 혹은 overshoot가 일어난다는 것이다. 아래 그림에서 세 번째의 perceived intensity부분에서 보면 이러한 현상이 나타나있다. 경계선 부분의 밝기는 상수이지만 이러한 경계면 부분에서 우리 눈은 이를 좀 더 강력하게 자르는 것을 알 수 있다. 이렇게 외견상으로 잘린 것 같이 보이는 부분을 Mach bands라 한다. 1865년에 Ernst Mach가 처음 정의하였다. 

 

 

 

 

두 번째 현상은 simultaneous contrast라고 불리는 현상인데, 이는 사람이 감지하는 밝기가 단순히 해당 영역의 밝기값으로만 인지되는 것이 아님을 나타낸다. 아래 그림을 보면 모든 사각형의 안쪽 면은 같은 밝기 값을 가지고 있다. 그러나 주변 영역이 어두울수록 안쪽 사각형은 더 밝게 보인다. 

 

 

 

이러한 우리 눈의 착시(optical illusion)현상을 나타내는 그림이 몇 가지 더 있는데, 바로 우리 눈이 존재하지 않는 정보를 만들어 내거나 실제와는 다르게 기하학적 정보를 잘못 인지하는 경우다. 아래 그림에서 (a)는 실제 line은 없지만 중심부에 사각형이 있는 것처럼 보인다. (b)도 역시 가운데에 원이 보이는 것 같은 착각을 일으킨다. (c)에 그려진 두 개의 선은 실제로는 같은 길이지만, 양쪽 끝에 그려진 화살표 모양으로 인해 아래쪽 선이 더 길어보인다. (d)의 경우 모두 45도의 평행한 선이지만 주변에 그려진 작은 선들로 인해 다른 각도처럼 보인다. 

 

 

 

이러한 착시현상은 인간의 시각 시스템의 특성이며 아직 완벽히 이해된 영역은 아니다. 이처럼 인간의 시각 시스템은 아직까지 일부만 알려져 있으며 아직 더 연구해야 할 부분들이 많이 남아있다. 

 

지난 강의에서 행렬 곱셈(Matrix multiplication)에 대해서 다루었다. 이번 강의에서는 행렬 곱셈과 그 규칙에대해 좀 더 알아보고

역행렬과 Gauss-Jordan이 제안한 소거법을 이용해 역행렬을 구하는 방법에 대해 알아보도록 하자. 

 

 

1. 행렬 곱셈(Matrix multiplication)

 

- row*column: 

 

이번 section에선 행렬 곱셈을 총 네 가지 관점에서 살펴볼 것이다. 먼저 살펴볼 것은 row*column의 방법이다. 

아래 두 개의 행렬이 어떻게 곱해지는지를 살펴보자. 행렬 A와 B가 있고 곱해진 결과를 C라고 해보자. 

C에서 c32, 즉 C에서 row3, column2에 존재하는 원소는 어디로부터 어떻게 만들어지는가? 

 

 

 

 

바로 행렬 A의 row3과 행렬 B의 column 2와의 곱으로부터 만들어진다. 이 곱을 우리는 A의 row3와 B의 column2의 벡터의 내적(dot product)이라고 볼 수 있다. 이 dot product 과정을 다시 써보면 식(2)와 같다. 

 

A의 row3의 첫 번째 원소 a31은 B의 column2의 첫 번째 원소 b12와 곱해진다. 이 값은 두 번째 원소들 a32와 b22의 곱의 값에 더해진다. 이렇게 n개의 각 원소까지 곱하고 더하는 과정을 거쳐 c32값이 계산되어진다. 이를 일반적인 형태로 작성하게 되면 식 (2)의 세 번째 줄과 같아진다. 

 

 

그렇다면 C의 모양은 어떻게 될까? 만약 A와 B 둘다 정방행렬(square matrix)인 경우 row와 column의 수가 같기 때문에 결과 행렬인 C도 같은 모양을 취하게 된다. 

그러나 A가 3x4(row3, column4)인 반면 보다시피 B는 4x3로 모양이 다르다. 그런데 C의 모양은 3x3인 정방행렬이다. 어떻게 이러한 결과가 나온 것일까? 

 

식 (1)을 보자. 곱해지는 두 행렬 중 앞쪽에 위치한 행렬은 mn이 되어야 하고 그 다음 행렬은 n x p가 되어야 한다. 이때 곱의 결과 모양은? m (rows of A) x p (columns of B) 가 된다. 결국 행렬 C는 A의 m=3, B의 p=4에 의해 3x4로 된 것이다. 

또한 어떤 행렬 둘을 곱한다고 했을 때, n의 크기는 반드시 같아야 한다. 

 

지금까지 살펴본 내용은 행렬 곱셈을 하는 가장 일반 적인 방법이다. 고등학교때 배웠던 행렬의 연산은 대부분 이 방식을 배웠을 것이다. 똑같은 연산을 좀 더 다른 관점에서 살펴보도록하자. 전체 row혹은 column-wise의 꼴로 행렬 곱셈을 살펴보는 관점에서 말이다. 

AB=C를 다시 한 번 써보자. 

 

 

- column-wise: 

 

 

 

 

A와 B의 곱을 column의 관점에서 살펴보도록 하자. 행렬 A가 B의 각 column 별로 곱해진다고 생각해 봤을 때, 즉 행렬 A 전체와 B의 각 column 벡터와의 곱으로 생각해 봤을 때 이 곱셈의 결과는 C의 column이 된다. 식 (3)에서 행렬 A와 B의 청록색 column을 곱하면 그 결과는 C의 청록색 column이 되고, 행렬 A와 B의 두 번째 column인 녹색 부분을 곱하면 C의 두 번째 column인 녹색이 되는 것이다. 이를 식으로 나타내면 (4)와 같다. 이것이 위 식을 column별로 보는 것이다. 

 

 

이것이 말하는 것이 무엇일까? 이는 바로 C의 column들은 A의 column들의 조합이라는 것이다. (개념이 조금 헷갈리시는 분들은 Lecture2의 식(14)를 참조하면 이해가 갈 것이다!) 이는 C의 각 column의 벡터 길이(=m)가 A의 column의 벡터 길이(=m)와 같음을 봐도 알 수 있다.  

 

 

- row-wise: 

 

 

이번엔 똑같은 행렬을 row의 조합 관점에서 살펴보자. 식 (5)를 살펴보면 C의 row3는 A의 row3와 행렬 B와의 곱으로 나타내어진다. 

이를 마찬가지로 식으로 나타내면 식 (6)과 같다. 

 

 

column-wise와 비교해보면 column일 때는 행렬 A와 B의 column의 곱으로, row-wise일 때는 A의 row와 B와의 곱으로 C의 column과 row가 각각 정의되었다. row-wise를 다시 정의한다면 C의 row들은 B의 row들의 조합이다. 

 

즉 식(5)의 경우에서 a31*B(row1) + a32*B(row2) + ... 와 같은식으로 B의 모든 row마다 A의 row3의 각 원소들이 계수처럼 곱해져서 C의 row3이 만들어지는 것이다. (역시 개념이 헷갈린다면 Lecture2의 식(17)참조!)

 

 

 

- column*row: 

 

네 번째로 살펴볼 것은 column벡터와 row벡터의 곱셈 형태이다. 

맨 처음에 살펴봤던 형태(row*column)와 그 순서가 반대이다. row*column형태에서는 곱셈의 결과가 단 하나의 값(scalar)으로 나왔으며 이는 내적(dot-product)라 하였다. 그렇다면 그 반대는 어떻게 될 것인가? 분명히 row*column의 결과와는 다를 것이다. 다음을 보자. 

 

 

 

위에서 예를 들었던 AB=C에서 A의 column은 어떤 모을 갖는가? 바로 m개의 row원소가 1개의 column을 이루는 모양이다. 

B의 row는 반대로 p개의 column원소가 1개의 row를 이루는 모양이다.  

 

그렇다면 이들의 곱셈 결과는 어떤 모양이 될 것인가? 결론부터 말하자면 하나의 full size의 큰 행렬이 만들어진다. 아래의 예를 가지고 실제로 계산을 해보자. A는 3x1의 column 벡터이고 B는 1x2의 row벡터이다. 결과는 오른쪽과 같이 만들어지는데, 어떻게 이런 결과가 나오는 것인가? 

 

 

 

앞서 배웠던 row-wise와 column-wise를 생각해보면 쉽게 계산할 수 있다. 

 

row-wise인 경우...

a11*B(row1)=[2  12], 

a21*B(row2)=[3  18],

a31*B(row3)=[4  24]

와 같이 계산된다. 

 

column-wise인 경우...

A(col1)*b11=[2    3   4]T, (T는 transpose를 의미)

A(col1)*b12=[12 18 24]T

와 같이 계산된다. 

 

네 번째 방법을 다시 정리하자면..  행렬곱셈 AB는 A의 column * B의 row의 합이다. 

 

좀 더 일반적인 예를 들어보면 두 개의 column과 두 개의 row인 경우를 들 수 있다. 이 경우 A의 col1과 B의 row1, A의 col2와 B의 row2의 합으로 나타낼 수 있다. 두 번째 텀은 0과 곱해지기 때문에 무시하고 결과는 식(8)과 같다. 

 

 

 

여기서 한 가지 짚고 넘어가야 할 부분이 있다. 식 (8)을 다시 보자. 

 

 

위 곱셈의 결과 행렬 C는 굉장히 특별한 행렬이다. 혹시 무엇인가 보이는가? 그 특별한 점은 바로 

C의 모든 row는 B의 row를 따라 같은 line 선상에 존재한다

C의 모든 column은 A의 column를 따라 같은 line 선상에 존재한다.

 

결국 식(8)의 결과 행렬은 rank가 1인 행렬이다. (rank는 이후 포스팅에서 다룰 예정: linearly independent한 row or column의 수)

 

위 행렬이 진짜로 같은 라인에 존재하는지 구현해보자. 아래는 MATLAB으로 해당 row 벡터들을 시각화한 결과이다. 세 벡터들이 같은 선상에 존재하기 때문에 앞에서 그려졌던 벡터들은 이후에 그려진 벡터들에의해 가려져 보이지 않음을 알 수 있다. 

 

 

 

 

아래 결과 사진은 column벡터를 그린 것이다. 역시 처음 그려진 벡터가 겹쳐서 보이지 않음을 알 수 있다. 실제로 코드를 돌려서 돌려보며 확인해 보도록하자. 

 

 

 

 

**결국 어떠한 벡터이던간에 column*row인 경우 위와 같은 특별한 행렬이 만들어지게 된다. 이를 잘 기억해 놓자. 

 

 

아래는 구현 코드이다. 

 

Row 출력 코드

 

Column 출력 코드

 

 

- Block Multiplication: 

 

행렬 곱셈의 형태 중 마지막으로 살펴볼 것은 블록(Block)단위의 행렬 곱셈 방법이다. 예를 들어 20x20크기의 행렬이 있다고 가정했을 때, 이를 10x10 네 개로 분할하여 똑같이 행렬 곱셈을 적용해도 같은 결과가 나온다. 아래 행렬을 보자. 

 

 

 

 

행렬 A는 20x20의 크기를 가지고 있고 이 행렬들을 10x10 크기의 Block으로 나눈다. 이때 각 Block(A1, B1....)을 하나의 원소로 생각하고 행렬 연산을 해주면 기존 행렬 연산과 똑같은 결과가 나오게 된다. 예를 들면 아래와 같은 연산을 참고하면 쉽게 이해할 수 있다. 

 

 

 

 

 

2. 역행렬(Inverse Matrix)

 

- Invertible, nonsingular case:

 

이제 역행렬을 계산하는 법을 살펴보겠다. 우선 정방행렬(square matrices)에 대해 생각해보자. 어떤 정방 행렬 A가 있다고 생각했을 때, 이 행렬의 역행렬이 존재(invertible, nonsingular)한다고 가정하자. (역행렬은 존재할수도, 존재하지 않을 수도 있다)

 

이때의 관계를 아래와 같이 쓸 수 있다. 행렬 A에 역행렬을 곱해주면 그 결과는 단위행렬(identity matrix)이 된다. 또한 이 역행렬을 오른쪽에 곱해줘도 결과는 같다. 

 

 

행렬은 곱셈의 순서에 따라 결과가 달라진다는 것은 이미 알고 있을 것이다. 따라서 역행렬을 앞에 곱하는 결과와 뒤에 곱하는 결과는 당연히 달라질 것이라고 생각하는데, 일반적인 행렬(Rectangular Matrix)인 경우에는 이것이 맞다. 하지만 정방행렬(Square Matrix)인 경우에는 식(12)와 같이 앞에 곱하나 뒤에 곱하나 그 결과가 같다. MATLAB에서 inv() 명령어로 확인해보면 바로 알 수 있다. 

 

 

 

- no inverse, singular case

 

이번엔 역행렬이 존재하지 않는 경우를 살펴보자. 이를 다른 말로 특이행렬(singular matrix)라고도 한다. 아래의 행렬 A를 보자. 아래 행렬 A는 역행렬이 존재하지 않는 특이행렬이다. 그렇다면 왜 역행렬이 존재하지 않는 것일까?

 

 

우리는 위 행렬 A의 역행렬이 존재하지 않는 다양한 이유를 찾을 수 있다. 어떤 것들이 있을까?

 

이후 포스팅에서 따로 다루겠지만, 먼저 행렬 A의 행렬식(determinant)은 0이 된다(1/(ad-bc)). 따라서 역행렬이 존재하지 않는다. 

 

이것 보다는 좀 더 좋은 이유가 필요하다. 또 다른 이유는 뭐가 있을까? 행렬 A의 column picture를 살펴보자. 혹시 무엇이 보이는가? 이전 포스팅을 잘 공부한 분이라면 행렬 A의 각 column들이 같은 line상에 위치한다는 것을 알 수 있다. 즉 두 column은 똑같은 방향을 가르키고 있는 것이다. 

 

A의 rank는 1이며 선형 독립(linearly independent)인 차원의 개수가 A의 차원보다 작기때문에 특이행렬이다. 따라서 행렬 A로는 2차원이 아닌 오직 line만 표현이 가능하다. A의 column 1인 [1 2]T벡터에 상수 3을 곱해주면 바로 column 2인 [3 6]T벡터가 나오는 것을 확인하면 알 수 있다. row도 마찬가지다.

 

이를 확인할 수 있는 또 다른 방법은 각 column을 정규화(normalization)해서 같은지 비교해 보는 것이다. A의 column 벡터들의 2-norm 정규화식 (14)를 실제 계산해서 확인해보기 바란다.

 

 

 

그런데 또 다른 이유가 있다. 이것이 가장 중요한 이유인데, 잘 기억해두도록 하자. 그것은 바로..

 

**만약 를 만족하는 벡터 x를 찾을 수 있다면, 그 행렬은 역행렬이 존재하지 않는다. (이때 A는 정방행렬, x는 0이 아닌 벡터)**

 

다시 말하면, 당신이 어떤 정방행렬 A에 대해서 그 행렬에 어떤 0이 아닌 벡터 x를 곱했을 때 우변이 0벡터가 된다면 그 행렬은 역행렬을 만들 수 없다(not invertible, singular case).  

 

식(13)의 행렬 A는 우변을 영벡터로 만들 수 있는 x가 존재하는가? x=[3 -1]T 를 곱하면 우변이 영벡터가 된다. 

 

자 이를 다시 생각해보자. 

스템 A가 어떤 벡터 x를 0으로 보냈다. 이럴 경우, 이렇게 0으로 보낸 x를 다시 원래의 위치로 돌아오게끔 하는 시스템이 존재하는가?를 생각해보자. 선형대수에서의 연산은 선형 결합, 즉 변수에 어떤 계수들을 곱하고 더해서 계산 되는 것인데, 애초에 변수 자체가 0이 되어버렸으면 어떤 계수들을 곱해도 이를 복원시킬 방법이 없는 것이다. 

 

위 시스템 A의 경우 2차원 상의 벡터인 x를 곱할 경우 이를 1차원 상의 공간으로 보내버린다. 게다가 0으로 만들어버리는 경우도 있는 것이다. 이런 상황에서 원래 지점으로 되돌리는 역행렬이 존재한다는 것이 말이 될 것인가? 선형 시스템을 다루는 선형 대수에서는 어불성설(語不成說)이

 

위의 개념을 잘 이해하기를 바란다.

(※ 정방행렬이 아닌 임의의 직사각 행렬(Rectangular Matrix)은 pseudo inverse라는 방법을 이용해 계산해야 한다. 이와 관련해서는 이후 포스팅에서 다룰 예정)

 

 

 

- Gauss-Jordan idea

 

이제 다시 돌아가서 역행렬이 존재하는 경우를 살펴보자. 행렬 A를 다시 아래와 같이 정의하자.  

 

 

식 (15)의 행렬 A에 대해 위에서 다룬 역행렬이 존재하지 않는 경우에 대한 방법들을 적용해보자. 행렬식(determinant)은 0이 아니고, 각 column들은 서로 다른 방향을 가리키고 있다. 또한 Ax=0를 만족하는 x를 찾을 수 없다.

 

자 이제 A가 역행렬을 가질 수 있음을 알았다. 그럼 이제 실제로 어떻게 역행렬을 구할 수 있을까? 행렬 A에 역행렬을 곱하면 그 결과는 단위행렬 I가 되어야한다. 아래 식을 보자. 

 

 

위 식을 식(13)처럼 두 개의 column-wise 시스템으로 분리해서 생각해보자. A와 첫 번째 column인 [a b]T를 곱하면 I의 첫 번째 column인 [1 0]T이 되어야 한다. 마찬가지로 A*[c d]T = [0 1]T 이다. 이러한 관계를 정리하면 행렬 A와 그 역행렬의 j번째 column을 곱하면 I의 j번째 column이 나온다. 

 

 

식 (16)을 다시 써보면...

 

 

위와 같이 하나의 식을 두 개로 분리해서 생각할 수 있다. (18-1)과 (18-2)를 풀 수 있다면 행렬 A는 역행렬이 존재한다. 이것이 Jordan's idea의 시작이다. 

 

지난 Lecture 2에서 Gauss소거법을 배웠다. 소거법 과정에서 우변의 extra column 벡터를 오른쪽에 붙여서 만든 Augmented Matrix를 기억하는가? 이때 우리는 우변의 extra column 벡터 하나만 붙였다. 하지만 여기에 column을 하나 더 붙여서 아래 형태의 행렬을 만들어보자. 즉 (18-1), (18-2)를 붙여서 한 번에 풀어보자는 것이다. 

 

 

식 (19-1)를 지난 포스팅에서 배운 Gauss소거법을 활용해 소거해보자. 첫 번째 pivot을 설정하고 아래에 있는 원소들을 소거하기 위한 E 행렬을 만들어 곱해주자. 소거할 원소가 A의 row2, col1이므로 E21이다. row1에 -2를 곱해주고 row2에서 빼주면 소거 되므로 식은 아래와 같다. (Elimination matrix를 만들 땐 row-wise로 생각하면 쉽다)

 

 

식 (19-2)의 A의 결과는 상삼각행렬(upper triangular matrix)이 완성되었다. Gauss는 여기서 끝냈다. 하지만 Jordan은 여기서 소거를 더 진행했다. 지금까지 위에서 아래쪽으로 소거를 해 왔다면 이젠 반대로 아래에서 위쪽으로 소거를 진행하는 것이다. 즉 (19-2)에서 두 번째 pivot을 잡았는데 여기서 진행방향을 위쪽으로 잡는 것이다. 이렇게 되면 A의 row1, col2의 원소인 3을 제거한다. 이때 E행렬은 E12가 되며 현재 pivot에 3을 곱하고 row1에서 빼주면된다. 정리하면 아래 식과 같이 된다. 

 

 

 

식 (19-3)의 결과를 보면 원래 A가 있던 곳은 단위행렬로, 원래 단위행렬이 있던 곳은 어떤 행렬이 되었다. 이 어떤 행렬은 바로 A의 역행렬이다. 검증을 위해 여기에 A를 곱해보면 단위행렬이 나오는 것을 확인할 수 있다. 

 

어떤 행렬을 소거 하기 위해선 단계별로 제거 행렬(Elimination matrix)을 곱해줘야 한다. 위 예에선 E21과 E12가 그 예인데, 이 둘을 곱해주면 최종적인 E 행렬이 완성된다. 어떤 결과가 나오는지 살펴보자.

 

 

E행렬을 원래의 A 행렬에 곱해보자. 어떤 결과가 나오는가?

 

 

결국 E행렬은 A의 역행렬이다

 

 

 

 

3. 마치며...

 

이번 포스팅에선 행렬 곱셈(Matrix multiplication)과 역행렬(Inverse matrix)을 계산하는 방법을 배웠다. 행렬 곱셈에선 row*column, column-wise, row-wise, column*row의 네 가지 연산 방법을 살펴보았으며 각각의 특성과 그 의미를 파악하였다. 

역행렬에선 역행렬이 존재하는 경우와 존재하지 않는 경우를 살펴보았고 Gauss-Jordan의 소거법을 통해 실제로 역행렬을 계산하는 방법을 배웠다. 

 

이상으로 Lecture 3를 마칩니다.

 

오늘날 디지털 영상처리 기술은 굉장히 다양한 분야에 활용되고 있다. 이번 포스팅에서는 다양한 분야에 활용되는 예시를 살펴볼 것이다. 


영상을 분류할 때 영상이 얻어지는 근원(source)에 따라 분류할 수 있다. 일반적인 핸드폰이나 디지털 카메라를 이용해 얻는 영상 이외에도 우리는 굉장히 다양한 경로로 디지털 영상을 얻을 수 있다. X-ray도 하나의 예가 될 수 있다. 


이 근원을 이야기 하기 위해서 약간 어려운 얘기를 해보자. 오늘날 사용되고 있는 이미지에 대한 주요에너지원은 전자기 에너지 스펙트럼(Electromagnetic energy spectrum)이다. 다른 주요 에너지원으로는 음향에너지(acoustic energy), 초음파(ultrasonic) 그리고 전자현미경 등에 쓰이는 전자 에너지(electronic energy)가 있다. 이러한 근원을 바탕으로 컴퓨터가 이미지 형태로 합성하고 사람들에게 시각화를 해서 식별할 수 있도록 만드는 것이다. 그렇다면 어떻게 이러한 다양한 에너지들로부터 이미지가 만들어지고 또한 응용되는지 살펴보자. 영상을 디지털 형태로 변환하는 것은 이후 포스팅에서 다루도록 하고 이번엔 간단하게 개념적인 이야기들만 하도록 하자. 



전자기 스펙트럼, 즉 EM(Electromagnetic spectrum)을 기반으로한 영상이 우리에겐 가장 친숙한 형태인데, X-Ray와 가시광선 영역의 이미지들이 특히 그렇다. EM은 전자기 파동(Electromagnetic waves)으로부터 측정되는데, 이는 다양한 파장(wavelength)의 사인파(sinusoidal waves)를 전파하는 것으로 생각할 수 있다. 또는 질량이 없는 입자들의 흐름(stream)으로 간주할 수 있는데, 이때 이 흐름은 파동(wave)의 형태로 빛의 속도로 이동하는 것으로 생각할 수 있다. 여기서 각 무질량 입자들은 얼마의 에너지를 가지고 있고, 각 에너지 덩어리를 광자(photon)라고 부른다. 

스펙트럼 띠(spectral band)를 광자에 따른 에너지로 그룹을 나눈다면, 우리는 아래 그림과 같은 스펙트럼(spectrum)을 얻는다. 범위는 감마선(gamma rays)부터 전파(radio wave)까지 분포하며, 감마선으로 갈 수록 에너지는 높고 파장은 짧다. 


우리 눈에 보이는 영역은 Visible이라고 표시된 아주 일부분의 영역이며 빨주노초파남보로 표현되어있다. 느껴지는 것 과는 다르게 빨간색 부분이 에너지가 더 낮다. 







전자기 에너지 스펙트럼의 각 구간에 따라 여러 형태의 이미지를 만들어낼 수 있으며 각 이미지의 응용도 제각기 다르다. 

감마선 이미지, X-ray 이미지, 자외선 이미지, 가시광선 이미지(핸드폰 등으로 찍어 내는 영상), 마이크로파 이미지, 라디오파 이미지 등이 존재한다. 


1. 감마선 이미징(Gamma-Ray Imaging)

핵의학(nuclear medicine)이나 천체 관측(astronomical observations)에 주로 응용되며, 에너지가 높아 사람의 피부 등은 그대로 통과하기 때문에 인체의 뼈를 스캔하거나 멀리 있는 별의 관측 등에 응용된다. 


2. X-Ray 이미징

X-Ray는 우리가 병원에서 쉽게 접할 수 있는 형태의 이미지이다. 역시 뼈 사진을 본다거나, 혈관 등 인체의 장기 사진을 살펴보거나 할 때 사용된다. 이러한 의료 영상뿐만 아니라 산업현장에서 제품의 결함 등을 검사하는데 사용되기도 한다. 


3. 자외선 이미징(Ultraviolet Band)

자외선 빛은 형광현미경(Fluorescence microscopy)에 사용된다. 이 외에도 리소그래피(lithography), 산업용 검사 장비, 현미경 등에 사용된다. 


4. 가시광선과 적외선 이미징(Visible and Infrared Bands)

가시광선 이미지는 우리 눈에 보이는 파장을 이용해 생성한 사진이다. 즉 핸드폰, 카메라 등을 이용해서 찍은 이미지들을 의미한다. 

적외선 이미지는 종종 가시광선 이미징과 함께 사용된다. 응용분야는 광학현미경부터 산업현장, 우주산업, 법률 집행 등 무수히 다양한 분야에 응용된다. 


5. 마이크로파 이미징(Microwave Band)

마이크로파 이미징의 주된 응용처는 바로 Radar이다. Radar가 가지고 있는 고유한 특성이 조명이나 날씨 등에 상관없이 데이터를 수집할 수 있다. 


6. 라디오파 이미징(Radio Band)

라디오파의 주된 응용처는 의료와 천문학이다. 의료에서는 대표적으로 MRI(Magnetic Resonance Imaging)가 있다. 



각 영상들의 샘플들은 구글에 검색하면 쉽게 볼 수 있다. 


+ Recent posts