필자는 본인의 전공 분야에 관한 좋은 원서를 읽고 책 내용을 번역 해서 개인 블로그에 포스팅 하고 있었다. 



  • 번역해서 포스팅을 하는 과정에서 훨씬 정리도 잘 되고 
  • 나중에 다시 찾아보기도 좋고
  • 그리고 영어에 고통 받는 많은 학생들에게 조금이나마 도움이 되고자 시작한 일이었다. 




그런데 포스팅을 하면서 뭔가 항상 마음 한구석이 찜찜했는데..

이거 혹시 불법 아니야? 

원작자의 허락도 없이 마음대로 이래도 되는 건가? 

이런 불안감이 문득 문득 엄습하곤 했다. 


결국 불안감을 떨치지 못하고 관련 내용에 대한 구글링을 착수





결과는...



저자의 허락 없이 원서를 번역하여 포스팅(posting) 하는 것은 역시나 불법이었다!! 





그런데 비영리 블로그면 괜찮지 않을까? 

광고 같은거 안 달아서 수익 발생하지 않으면 괜찮지 않을까? 

번역한 내용을 출판한다거나, 판매한다거나 하지 않으면 괜찮지 않을까? 



와 같은 생각이 들 수도 있다. 

그러나 위의 물음도 전부 괜찮지않다.!




재미있게도 필자와 똑같은 생각을 가지고 쿼라(Quora)에 다음과 같은 질문을 올린 중국인으로 추정되는 사람이 있었다. 


원서를 번역해서 온라인에 올리는 것은 불법인가요? 

Is it illegal to translate a book and post the translation online?



아래는 관련 질문의 링크이다. 

https://www.quora.com/Intellectual-Property-Is-it-illegal-to-translate-a-book-and-post-the-translation-online



아래는 질문의 내용 캡쳐 화면





요약하자면

내가 좋은 원서(English)를 봤는데, 아직 중국어로 번역된 것이 없는 것 같다. 그래서 이 좋은 책의 내용을 중국어로 번역해서 나의 개인 블로그에 올리고 싶다. 난 이 번역한 내용을 출판하지도 않을 거고, 어디에 팔지도 않을거며 내 개인 블로그에는 광고도 달지 않고 어떠한 이익도 취하지 않을거다. 그래도 이게 불법인가? 저자가 날 고소하려나? 




이에 대한 답변이 10개 정도 달렸는데.. 그 중에 Best 답변은 이렇다. 






당연히 당신과 같은 행동은 미국 저작권법에 위배 되는 행동이다. 

미 저작권법 title 17, chapter 1, section 106에 의하면 원서를 번역하는 행동은 파생작(derivative work)을 만드는 행동인데, 이러한 파생작을 만들기 위한 권리는 원작자에 독점권(exclusive right)이 있다. 라고 되어있다. 


만약 책이 저작권(copyright registration)에 등록되어 있다면, 저작권을 가진 사람은 당신에게 법정손해배상(statutory damages)을 청구할 권리가 있다. 법정 재량에 따라 $750~$150,000(한화로 약 90만원 ~ 1억 8천)의 손해배상금을 청구할 수 있다.

흠....




그래서 제가 미국 저작권법을 실제로 찾아 봤습니다. 답변 내용이 맞는 것 같긴 하네요. 아래는 링크 주소..


https://www.copyright.gov/title17/92chap1.html#106







포스팅 잘못 했다가 재산 탕진 할 수도 있겠군요;;



그러나 답변 말미엔 실질적인 내용을 언급했는데

대부분의 경우는 번역 포스팅에 대한 피해 정도가 그리 심각하지 않고, 원저자가 이러한 사항들을 일일이 확인할 수 없기에 법정까지 가는 상황은 거의 없다고 합니다. 그러나 어디까지나 "아마도"라고...

원저자가 고소 하고 싶으면 고소 하는 거고.. 



어쨋든 결론은 

원서 번역해서 포스팅하고 싶으면


  • 저작권이 없는 책이거나 
  • 저작권이 만료된 책이거나(일반적으로 저자 사후(死後


    ) 70년 이후 만료)
  • 저작권자의 허락을 받거나
  • 번역해서 혼자만 볼 수 있게끔 비공개로 하던가
  • 아니면 배짱 부리고 안들키길 기도하던가




저작권법을 찾아 공부한 후에, 원래 보던 원서의 앞 페이지를 다시 보니.. 평소엔 절대로 보이지 않을 것 같은 다음의 글귀가 보이네요.



All rights reserved. No part of this book may be reproduced, in any form, or by any means, without permission in writing from the publisher. 




포스팅에 대한 인식을 좀 바꿔야 겠습니다 ^^


'이것 저것' 카테고리의 다른 글

어떤 프로그래밍 언어가 가장 널리 사용될까?  (0) 2017.04.16

앞선 포스팅에서 우리는 이미지를 획득하는 다양한 방법에 대해 배웠다. 그러나 이렇게 다양한 이미지 획득 방법들의 최종 목적은 같다. 바로 센싱된 데이터들로부터 디지털 이미지를 만들어내는 것이다. 

대부분의 센서 데이터들은 센싱된 장면(scene)에 관련된 연속적인 전압의 파형(continuous voltage waveform)이며, 해당 장면의 특성은 파형의 진폭(amplitude)의 패턴으로 표현된다. 센싱된 전압 파형으로부터 디지털 이미지를 만들어내기 위해선 이러한 연속된 파형을 디지털 형식으로 바꿔야 한다. 연속된 파형을 얻는 과정, 디지털 형식으로 바꾸는 과정을 각각 샘플링(sampling)양자화(quantization)라 한다. 이번 포스팅에선 샘플링과 양자화에 대해 알아보도록 하겠다. 

 

 

 

1. 샘플링(sampling)과 양자화(quantization)의 기본 개념

 

- 샘플링(sampling)의 기본 개념 

 

샘플링(sampling)이라는 것은 기본적으로 수 많은(무한한) 데이터들 가운데 유한한 개수의 데이터를 뽑아내는 것이다. 

가령 속이 보이지 않는 어떤 상자에 10,000개의 공을 넣어 놓고 상자속 공의 색깔에 대한 분포를 추정한다고 생각해보자. 모든 공을 전부 뽑아서 조사하면 가장 정확하겠지만 시간과 비용이 너무 많이 든다. 따라서 10,000개의 공 중에 1000개만 뽑아낸다고 했을 때, 공을 뽑아내는 행위 자체를 샘플링이라고 한다. 

 

즉 어떤 모집단 전체의 데이터를 전부 사용하면 가장 정확하겠지만 시간과 비용이 많이 소모되기 때문에 적당한 개수의 데이터만 뽑아서 전체의 패턴을 추정하기 위한 데이터 수집 행위라고 할 수 있다. 

 

상자속 공의 샘플링말고 실제 1차원 신호를 예로 들어보자. 

 

녹음기 하나를 떠올리고, 이 녹음기에 어떤 대화를 녹음하는 것을 상상해보자. 이때 우리가 말하는 내용은 음성 신호(voice signal)로써 특정 파형(waveform)의 형태를 보일 것이다. 아래 그림을 실제 아날로그 음성 신호라고 가정해보자. 

 

 

 

 

 

가로축은 시간(time), 세로축은 진폭(amplitude)를 나타낸다. 

여기서 샘플링이라는 것은 어떤 것을 의미할까? 바로 일정한 간격의 주기로 신호의 강도를 수집하는 것을 의미한다. 이때 중요한 것은 어느 위치, 혹은 어느 시간에 진폭값이 얼마인지를 알아내는 것이다. 여기에 추가로 샘플링 주파수(sampling frequency)도 굉장히 중요하다. 원래 신호 모양을 온전히 복원하기 위해선 나이퀴스트 샘플링 주파수(Nyquist Sampling frequency) 규칙을 따라야한다. 이에 대한 내용은 본 포스팅 범위를 벗어나므로 패스하겠다. 구글에 검색하면 관련된 많은 자료가 있으니 참고하기 바란다. 

 

 

자 이제 위의 신호를 샘플링 해보자. 아래 그림에서 빨간 줄이 샘플링 지점(sampling point)라고 생각하면 된다. 즉 시간의 단위를 초(second)라고 했을 때 1초 때의 신호의 강도를 수집하여 저장하고 2초때 신호 강도를 수집해 저장하는 식으로 신호를 수집하는 것이다. 아래 그림은 위 신호의 샘플링 과정을 나타낸 모습이다. 

 

위의 점들을 직선으로 이어보자. 원래의 신호와 비교 했을 때 비슷한가? 아닐 것이다. 좀 더 촘촘하게(짧은 주기, 높은 주파수로) 샘플링을 할 수록 원래 신호에 가까워진다. 

 

 

 

샘플링 과정을 보면 매 샘플링 주기 T(여기선 1초로 가정)마다 신호의 강도(amplitude)를 측정하여 그 값을 저장한다. 위 그림의 아래는 샘플링 결과를 나타낸다. 

 

샘플링 주기가 짧을 수록 원래의 신호를 더 잘 복원할 것이다. 그러나 반대로 샘플링을 위해 더 많은 연산을 해야 하므로 샘플링 비용이 증가하고 이에 따른 부담이 커진다는 단점이 있다. sampled signal의 그림을 보면 매 샘플링 시간 마다 그 시간 위치에서의 진폭값(amplitude)이 빨간색 점으로 표현되어 있다. 이 점들을 차례로 연결시키면 원래의 신호 패턴이 복원될 것이다. 물론 앞서 언급했듯이 샘플링 주기가 짧을 수록, 이말은 곧 샘플링 주파수(sampling frequency)가 높다는 의미이며 샘플링 주파수가 높을 수록 원래의 신호에 더 가깝게 된다. 아래의 식과 같이 주기와 주파수는 역수의 관계임을 잘 생각하자. 

 

 

 

 

- 양자화(quantization)의 기본 개념

 

양자화(quantization)라는 것은 샘플링(sampling)한 아날로그 형태로 되어 있는 신호나 정보를 디지털화(digitizing) 하는 작업을 말한다. 좀 더 쉽게 말하자면 다음과 같다. 

 

0 ~ 1사이의 숫자를 생각해보자. 아날로그 방식으로 생각해보면 0과 1사이엔 실제로 무수히 많은 숫자가 존재한다. 0.1, 0.2479, 0.78001, 0.99999 등 우리가 셀 수 없이 많은 수가 무한대로 존재하는 것이다. 현실적으로 이 무수한 숫자들을 다루기란 불가능하기 때문에 우리는 일정한 범위와 기준값을 정해놓고 어떤 임의의 숫자가 나오면 그와 가장 근접한 기준값으로 만들어 사용하는 것이다. 

 

예를 들어 우리가 어떤 전압 값을 측정한다고 해보자. 이때 우리는 0.1V 단위로만 값을 측정한다고 가정해보자. 실제의 전압 값이 3.4122319800200922212935482...V 라고 했을 때 과연 이 값을 전부 표현하는것이 옳은가? 저렇게까지 정밀하게 측정하기도 어려울 뿐더러 그럴 만한 정밀한 센서도 없고 그럴 필요성도 없다. 이럴때 우리는 뒤에 필요 없는 정보는 생각하지 않고 측정된 값을 가장 근접한 값으로 만들어 사용하는 것이다. 

실제로 센서에 의해 측정된 아날로그 전압값이 3.41223V라고 했을 때 0.1V 단위로 측정한다고 했으니 이때의 양자화 시킨 Voltage값은 3.4V일 것이다. 

 

결국 양자화라는 것은 무한대로 이루어진 셀 수 없는 아날로그 정보를 셀 수 있을 만큼의 간격으로 만들어서 유의미한 정보만을 사용하는 것이다. 이 말은 샘플링에도 유효할 것이다. 

 

위에서 봤던 신호 샘플링의 그림을 다시 보자. 

 

t=2의 진폭 값과 t=4일 때의 진폭값은 눈으로 봤을 때 당연히 다르다. 그러나 0.1V단위로 양자화를 하게 되면 t=2와 t=4는 같은 전압값(0.2V)을 가지게 된다. 적절한 양자화의 Level설정이 필요하다. 

 

 

아까 수집한 전압 값을 0.1V 단위로 양자화 한다고 가정해보자. t=1일 때의 실제 측정된 신호의 진폭은 0.0973V이다. 양자화 과정을 통해 가장 가까운 값인 0.1V로 만들었고 결국 t=1일때의 신호 값은 0.1V가 된다. t=2 일때는 0.2V, t=3일때는 0.3V가 각각 되고 t=7일때는 -0.1V가 되는 것이다. 이렇게 하여 컴퓨터의 메모리에는 [0.1, 0.2, 0.3, 0.2, 0.3, ... ]의 값들이 배열의 형태로 순차적으로 저장된다.

 

그런데 위와 같이 0.1V단위로 양자화를 하게 되면 t=2일 때 0.2V가 되고 t=4일 때도 역시 0.2V가 된다. 눈으로 보기엔 분명 t=2와 t=4의 진폭값은 다르다. 그러나 양자화 결과 같은 값이 되는 것이다. 이때에 양자화 단계를 0.05V로 설정했다면 t=2와 t=4는 다른 진폭값으로 기억될 것이다. 따라서 적절한 양자화(quantization) Level 설정이 중요하다. 

 

 

 

2. 이미지의 샘플링(sampling)과 양자화(quantization)

 

- 이미지 샘플링(sampling)

 

우리는 지금까지 1차원 신호에 대한 샘플링과 양자화에 대한 개념을 공부하였다. 그렇다면 2차원인 이미지의 경우엔 샘플링과 양자화가 어떻게 이루어질까? 간단하다. 2차원 배열(2-D Array)형태의 센서를 이용해 영상 신호를 샘플링하고 양자화 하는 것이다. 2-D Array센서로는 대표적으로 CCD(Charge Coupled Device)와 CMOS(Complementary metal-oxide semiconductor)라는 센서가 있다. 두 센서에 대한 자료는 인터넷에 지나치게 많으니 자세한 설명은 생략하고.. 

 

간단히 얘기해서 빛 에너지를 전기신호로 바꾸는 센서이다. 즉 어떤 장면을 카메라로 촬영한다고 했을 때, 광원(태양 등)으로부터 나온 빛이 어떤 사물이나 환경에 다다른다. 이후 대상 물체에 반사된 빛 에너지들이 카메라 렌즈를 통과해 아래 그림과 같은 2-D Array 센서판에 다다르게 된다. 이때 센서 Array는 촬영한 장면에 대한 빛 에너지의 패턴대로 각 Cell에 일정 전압이 걸리게 되고 각 Cell에 대한 전압값은 양자화 과정을 통해 디지털 값으로 변환되어 메모리에 저장된다. 이 과정이 아래 그림에 나타나있다. 

 

 

 

 

카메라 안쪽에 위치한 2-D Array모습은 아래 그림과 같이 여러 개의 CCD 혹은 CMOS센서들이 촘촘하게 배열되어 있는 모습이다. 이때 빛의 3원색인 빨강, 초록, 파랑의 총 3가지 색깔의 빛 에너지를 흡수하는 센서들이 교차 배치되어 컬러 이미지를 형성하도록 한다. 각 센서는 해당 색깔만 통과시키는 필터가 있어서 해당 색깔 정보만 받아들이며, 이들의 컬러 조합으로 컬러 이미지가 만들어진다. 

 

 

 

Bayer pattern으로 불리는 2-D Array 센서. (이미지 출처: 위키 https://en.wikipedia.org/wiki/Bayer_filter)

 

 

 

그렇다면 2-D Array 센서가 이미지의 형성과 어떤 관계가 있을까? 2-D Array센서는 결과적으로 이미지의 품질(Quality)에 막대한 영향을 미치게된다. 2-D Array센서의 밀도가 높을수록, 즉 단위 면적당 센서의 개수가 많을 수록 이미지의 품질은 높아진다. 

우리는 흔히 디지털 카메라의 스펙을 이야기할 때 화소(picture element)를 이야기한다. 화소는 센서 Array 개개의 cell의 개수를 의미하는데, 예를 들어 1000만 화소라 하면 위 그림과 같은 센서 Array의 각 cell의 개수가 1000만개임을 뜻한다. 당연히 화소가 높을 수록 장면의 디테일한 부분까지 이미지에 표현되기 때문에 이미지의 품질에 큰 영향을 미친다. 카메라의 화소가 높다는 것은 결국 어떤 장면에 대한 빛의 패턴 신호를 높은 주파수(혹은 짧은 주기)로 샘플링 하는 것을 의미한다. 이와 관련하여 아래 그림을 참조 하여 이해를 해보자. 

 

 

 

센서 Array의 밀도에 따른 이미지 Quality. 왼쪽: 저밀도, 오른쪽 고밀도 센서 Array

꽃 이미지 출처: http://ccideas.com/chatter/high-resolution-images-vs-low-resolution-images-a-short-primer-for-beginners/

 

 

위 그림은 이미지 센싱을 위한 센서 Array의 밀도에 따른 이미지 품질을 나타낸 것이다. 왼쪽은 센서 Array의 밀도가 낮은 경우, 오른쪽은 고밀도 센서 Array를 이용해 이미지를 생성한 결과를 보여준다. 센서 밀도가 낮다는 것은 단위 면적당 각 Cell의 개수가 적은 것이고 그 만큼 촬영 대상 환경의 빛 에너지 패턴의 샘플링 주파수가 낮음을 의미한다. 

반대로 센서의 밀도가 높은 경우엔 단위 면적당 각 Cell의 개수가 많은 것이고 샘플링 주파수가 높기 때문에 원래의 이미지를 더 잘 복원하게 된다. 이때 한 cell에서 다음 cell까지의 거리를 샘플링 주기라고 생각하면 된다. 이러한 샘플링 과정이 x와 y축으로 동시에 존재하는 것이 2-D 센서 Array라고 생각하면 된다. 

 

그림의 아래쪽을 보면 dpi라고 표기된 부분은 dots per inch의 약자이며 1inch당 존재하는 정사각형(square)화소의 개수를 의미한다. 72 dpi는 1inch 길이의 라인에 존재하는 점이나 화소의 개수를 의미한다. 아래의 그림들은 dpi의 개념을 나타낸다. 

 

dpi별 이미지. 출처: http://www.tatge.biz/working-with-images-hi-res-vs-lo-res/

 

 

DPI(dots per inch)는 주로 프린터의 출력 분해능(resolution)을 표현하는데에 많이 사용되고 모니터나 이미지의 분해능(resolution)을 표현할 때는 PPI(pixels per inch)를 주로 사용한다. dpi에 따른 이미지를 잘 살펴보자. 

 

 

- 이미지 양자화(quantization)

 

이번에는 이미지의 양자화(Quantization)에 관해 알아보자. 

이미지 샘플링은 Array형태로 존재하는 이미지 센서를 통해 각 cell에 주사되는 빛 에너지의 양을 전압(voltage)으로 변환하여 저장하는 것을 의미한다. 이미지 양자화는 각 cell에서 변환한 전압값을 일정한 주기의 기준값에서 가장 근접한 디지털 값으로 매칭시키는 과정을 의미한다. 아래 그림을 보자. 

 

 

 

 

 

 

빛 에너지가 이미지 센서 Array에 다다르고, 빛의 강도와 파장에 따라 전압 값으로 변환된다. 여기 까지가 샘플링(sampling)단계이다. 이제 빛 에너지로부터 변환된 아날로그 전압값을 일정한 간격으로 나뉜 기준값들중 가장 가까운 값으로 matching이 이루어진다. 위의 양자화의 기본 개념 부분을 참고해보자. 결국 아날로그 전압값으로부터 적정 디지털 값으로 연결시키는 작업이 양자화(quantization) 단계이다. 이러한 기본적인 양자화 단계가 각 cell에 걸쳐 전반적으로 이루어지게 되고, 이를 통해 우리는 각 cell, 즉 이미지의 각 pixel에 대한 강도 값(intensity)을 얻을 수 있다. 

 

샘플링에서부터 양자화를 거쳐 최종적인 이미지를 얻기 까지는 굉장히 복잡한 단계를 거치게 된다. 이번 포스팅에서는 이 복잡한 과정중 샘플링과 양자화의 관점에서만 설명한 것이지 이면에는 굉장히 복잡한 과정들이 숨어있다. 

 

디지털 이미지의 양자화는 다양한 Level로 구성할 수 있다. 즉 전압값을 양자화할 때 몇 개의 간격으로 잘라서 디지털 값으로 매칭을 시킬지를 결정하는 것이다. 필자가 개인적으로 좋아하는 League of Legend의 베인 캐릭터 그림을 이용해 양자화 Level에 따른 결과이미지를 출력해 보았다. 쉬운 이해를 위해 흑백 이미지를 이용하여 구현하였다. 

 

 

L은 양자화의 Level을 의미하며 검은색으로부터 흰색에 이르는 밝기의 변화를 몇 단계로 자를지를 결정하는 것이다. L=4일 경우 4단계로 쪼개서 밝기 값을 표현하는 것이다. 흑백(gray-scale)영상에서 L은 2의 거듭제곱으로 표현되며 최대값은 256이다. 이는

을 의미하며 0~255까지의 밝기 값을 표현한다. 따라서 이미지의 한 pixel당 1Byte로 밝기 값을 표현한다. 

 

L=2인 이미지를 바이너리 이미지(binary image)라 부른다. 흑과 백 단 두 가지 밝기 값만을 이용해 이미지를 표현한 것이다. 이러한 바이너리 이미지는 영상처리에서 segmentation, 모폴로지 연산 등 특수한 상황에 사용되는 이미지이다. 

 

결과적으로 양자화 Level이 높을 수록(더 세밀하게 잘라서 밝기값 혹은 컬러값을 표현할수록) 원래의 영상(장면)에 가깝게 이미지가 표현되는것을 볼 수 있다. 

 

아래는 이미지 양자화의 단계별 영상을 출력하는 MATLAB 코드이다. 

 

 

이번 포스팅에서는 Column SpaceNull Space에 대해 설명할 것이다. 컬럼 공간, 영공간으로 각각 한글화 시킬 순 있지만 뭔가 어색하기 때문에 그냥 컬럼 스페이스, 널 스페이스로 읽도록 하겠다. Column space는 지난 포스팅에서 잠깐 배우긴 했지만, 이번에 좀 더 자세히 다뤄 보도록 하자. 

 

우선 지난 포스팅(Lecture 5)에서 우리는 벡터 공간(Vector Space)과 부분 공간(Subspace)에 대해 배웠다. 이번 포스팅에서 배울 내용의 이해를 돕기 위해 잠시 복습하는 시간을 가져보도록 하자. 

 

 

0. 벡터 공간(Vector Spaces) Review

 

 

벡터 공간(Vector Space)은 벡터의 집합이다. 단순한 집합이 아니라 똑같은 개수의 컴포넌트(x, y, ...)로 정의할 수 있는 무수히 많은 벡터들의 집합인데, 벡터의 공간임을 인정받기 위해선 다음의 규칙을 반드시 따라야 한다. 

 

1. 벡터 공간 내에 존재하는 임의의 벡터 v와 w는 그 둘을 더해도 (v+w) 그 결과가 반드시 같은 벡터 공간에 존재해야 한다. 
2. 벡터 공간 내에 존재하는 임의의 벡터 v에 임의의 상수 c를 곱해도 (cv) 그 결과가 반드시 같은 벡터 공간에 존재해야 한다. 
3. 벡터 공간 내에 존재하는 임의의 벡터 vw와 임의의 상수 c, d에 대해 모든 경우의 cv+dw 조합(각 벡터에 임의의 상수를 곱한 뒤 더하는, 즉 선형 결합(Linear Combination))결과가 반드시 같은 벡터 공간에 존재해야 한다.  

 

 

예를 들어 3차원 공간 R3를 생각해보자. R3의 임의의 벡터 v=[1 7 -26]T와 w=[-999 7982 -32988]T가 있다고 가정해보자(T는 Transpose). 이때 임의의 상수 c=-33992와 d=93을 각각의 벡터에 곱한 다음 더해서 선형 결합 연산은 수행했다고 해보자. 결과는 아래와 같을 것이다. 

 

 

 

약간 큰 숫자로 예를 들었지만 어쨋든 결과 벡터도 여전히 3차원 공간상에 존재한다. 따라서 R3는 벡터 공간이라고 말할 수 있다. R1, R2, R4, R5, ... RN에 대해서도 마찬가지로 모두 벡터 공간이라고 할 수 있다. 

 

이런 것이 벡터 공간이라면 굳이 저렇게 어렵게 정의하지 않아도 직관적으로 알 수 있지 않나요? 라고 누군가 물어볼지도 모르겠다. 위와 같은 일반적인 공간을 정의하기 위해서 저렇게 복잡한 정의를 내리는 것이 수학자가 아닌 이상 무슨 필요가 있나요? 라고 묻는 사람도 있을 것이다. 그러나 이러한 일반적인 공간 말고도 부분 공간(Subspace)이라는 것이 있고, 이를 완벽하게 정의하기 위해선 위와 같은 조건이 반드시 필요하다. 

 

부분 공간(subspace)이라는 것은 말 그대로 어떤 공간 안에 존재하는 작은 공간(영역)이다. 3차원 공간 R3를 예를 들면 임의의 평면(Plane) 혹은 직선(Line)이 될 수 있겠다. 아래 그림을 보자. 

 

 

 

[x, y, z]의 3개의 컴포넌트로 구성된 3차원 공간 R3가 있다. 여기서 부분 공간이라 함은 어떤 임의의 평면 P나 임의의 직선 L이 될 수 있는데, 이때 반드시 만족시켜야 하는 조건이 한 가지 있다. 바로 모든 부분 공간은 반드시 원점(origin), 즉 [0 0 0]T을 지나야 한다. 

위 그림에서 부분 공간 P와 L도 원점을 지나간다.(왜 그래야만 하는지는 Lecture 5-(2)참조..) 평면 P에 존재하는 임의의 벡터인 녹색 벡터나 주황색 벡터는 어떠한 임의의 수를 곱하고 서로 더해도 여전히 이 평면 위에 존재한다. 라인 L도 마찬가지로 임의의 벡터인 빨간색, 파란색 벡터의 어떠한 선형 조합도 이 라인 L위에 존재할 수밖에 없다. 

 

자 여기까지는 지난 포스팅에서 배웠던 내용이다. 우리는 여기서 한 가지 궁금한 점이 더 생겼다. 

가령 우리가 어떤 부분 공간 2개를 얻었다고 가정해보자. 여기서 2개를 위의 PL로 생각해보자. 이때 우리가 PL을 한 번에 같이 놓는다면, 즉 P 부분 공간과 L부분 공간을 하나의 덩어리로 생각해 본다면 ,이 PL은 각각 혹은 둘 다가 하나의 부분 공간이 될 수 있을까? 수식으로 나타내면 P와 U의 합집합으로 생각하면 편할 것이다. 

 

 

이 경우 위의 PL합집합은 부분 공간이라고 할 수 있을까? 정답은 부분 집합이 아니다

왜 부분 집합이 아닐까? 바로 앞서 말했던 선형 결합의 규칙이 성립하지 않기 때문이다. 부분 집합이 되려면 집합 내의 원소들 끼리 임의의 상수를 곱하거나 공간 내 원소끼리 더해도 같은 공간에 존재해야 한다고 했다. 그러나 위의 평면 P의 주황색 벡터와 라인 L의 파란색 벡터를 더하면 어떻게 될까? 그 결과는 평면도, 라인도 아닌 R3어딘가로 향하게 될 것이다. 즉 PL의 합집합은 부분 공간이 될 수 없다. 

 

P와 L의 합집합은 부분 공간이 아님을 알았다. 그러면 이번엔 교집합은 어떠할까? P와 L의 교집합, 즉 겹쳐지는 부분은 어떠한가? 

 

 

결론적으로 PL교집합부분 집합이다. 위의 그림에서 PL의 교집합, 즉 교점은 원점이다. PL의 유일한 교점이다. 우리는 지난 포스팅(Lecture 5)에서 원점 그 자체도 하나의 부분 공간이 됨을 배웠다. 따라서 위의 경우는 부분 집합이 된다. 

위의 예 뿐만 아니라 어떠한 부분 집합들의 교집합은 모두 부분 공간이다. 왜냐하면 각각이 모두 부분 공간이기 때문에 겹쳐지는 공간은 반드시 부분 공간이 될 수밖에 없다. 

위 그림에서 라인 L이 평면 P에 겹쳐져 있다고 상상해보자. 이 경우 둘의 교집합은 라인 L이 된다. L은 당연히 부분 공간이다. 

 

정리하면

 

어떤 부분 공간들의 합집합은 부분 공간(subspace)이 아니다

어떤 부분 공간들의 교집합은 부분 공간(subspace)이다

 

 

 

1. Column Space

 

지난 강의에서 Column Space를 살짝 다루었다. 좀 더 자세히 알아보도록 하자. 지난 포스팅에서 예를 들었던 행렬 A를 다시 꺼내 보자. 

 

 

행렬 A는 3개의 column을 가진 행렬이다. 각 column은 4개의 원소로 이루어져 있고 4차원 공간 R4의 부분 공간이다. 이 column space를 C(A)라 표기한다. 그렇다면 행렬 A의 column 공간, 즉 부분 공간(subspace)을 어떻게 알아낼 수 있을까? 전체 공간 R4에서 A의 column이 나타내는 부분 공간을 어떻게 채워넣을 수 있을까? 바로 선형 결합(Linear Combination)을 이용하면 된다. 행렬 A의 3개의 column을 활용해 모든 선형 결합의 조합을 찾으면 A가 정의하는 column 부분 공간을 채울 수 있다. 

 

 

 

 

그렇다면 행렬 A가 정의하는 공간이 어떠한 공간일지가 궁금해진다. 이 공간은 얼마나 클까? 4차원 공간 R4 전체를 뒤덮는 부분 공간인가? 아니면 평면(Plane)이나 직선(Line)과 같이 일부분의 공간을 나타낼까? 

A의 부분 공간을 정의하기 위해선 A의 column의 선형 결합(Linear Combination)을 이용하면 된다고 배웠다. 그렇다면 A의 3개의 column의 선형 결합을 통해 R4 전체를 채울 수 있을까? 이에 대한 답은 No다. 왜 R4 공간 전체를 채울 수 없을까? 이를 위해 A의 부분 공간(subspace)인 column space가 얼마만큼의 크기인지 알아보자. 그 전에 우선 선형방정식(Linear Equation)에 대해 알아보자. 이는 column의 선형 결합과 밀접하게 연관되어 있기 때문에 먼저 알아보는 것이 좋다. 그럼 다음의 질문을 생각해보자. 

 

Ax=b는 모든 b에 대해서 해를 가지고 있을까? 

 

정답은 No다. 왜 그런지 살펴보자. 위의 식 Ax=b에서 A는 4개의 방정식(Equation)과 3개의 미지수(Unknown)를 가지고 있다. 

 

 

4개의 방정식은 A의 4개의 row vector를 계수로 하는 식들을 의미한다. 즉

 

 

3개의 Unknown은 x=[x1, x2, x3]를 의미한다. 우리가 찾아야 할 값은 위 식을 만족시키는 해 x=[x1, x2, x3]를 찾는 것이다. 

 

필자는 앞서 선형방정식이 A의 column의 선형 결합과 밀접하게 연관되어 있다고 했다. 위 식 (4)를 Lecture 1에서 배웠던 column picture의 형태로 다시 쓰면 아래와 같이 쓸 수 있다. 

 

 

 

식 (6)에서 우측의 형태는 A의 column의 선형 결합과 형태가 같다. 

 

자 다시 메인 질문으로 돌아가서 우리는 앞서 A의 column의 선형 결합이 R4전체를 채울 수 없다고 했다. 이 말은 식(6)의 모든 b 벡터에 대해서 해를 구할 수 없다는 말이다. 그렇다면 b가 어떤 값을 가져야 해를 구할 수 있을까? 이 질문에 대한 일반적인(General) 답을 구하기 전에 생각할 수 있는 해(solution) 몇개를 직접 구해보자.

 

가장 쉽게 생각할 수 있는 답은 b 벡터가 모두 0인 경우, 즉 b=[0 0 0 0]T일 때이다. 이 경우 x=[0 0 0]T이 됨을 쉽게 유추할 수 있다. 또 다른 경우는 b=[1 2 3 4]T일 때 x=[1 0 0]이 된다. 이때의 b는 A의 col1과 같다. col2, col3에 대해서도 각각 정리하면 해는 아래와 같다. 

 

 

자 이제 감이 조금 오는가? 아까의 질문에 대한 일반적인 답을 생각해보자. 

 

우리는 선형 방정식 Ax=b에 대해 b 벡터가 A의 column space에 존재할 때에만 해를 구할 수 있다. 즉 b 벡터가 A의 column의 선형 결합(Linear Combination)으로 표현이 가능할 때 Ax=b에 대한 해를 구할 수 있다.
결국 b가 행렬 A의 column space에 존재해야만 해를 구할 수 있는 것이다. 

 

위의 말을 다시 생각해보면 A의 column의 선형 결합은 선형방정식 A그 자체이다. A의 column space는 모든 Ax를 포함하고 있다는 말이다. 따라서 b 벡터가 A의 column space에 존재하지 않으면 해 x도 존재할 수 없다. 

 

결국 해(solution)를 구할 수 있는 b들은 A의 column의 선형 결합으로 표현된 b들이다. 

 

 

그렇다면 A의 column space는 얼마만큼의 크기를 갖는가? A의 column들은 서로에게 독립적(Independent)인가? 각 column은 하나의 새로운 차원을 만드는데에 기여하는가? 

A의 첫 번째, 두 번째 column 벡터는 상호 독립적(Independent)이다. 그러나 3 번째 column은 기존 두 개의 column에 종속적(Dependent)이다. 이는 앞의 두 개의 column의 합을 통해 col3를 정의할 수 있기 때문이다. 즉

 

 

col1과 col2를 pivot column이라 한다. col1이 4차원에서 하나의 line을 정의하고, col2가 또 다른 독립적인 line을 정의하는데 이 둘의 조합을 통해 하나의 평면(Plane)을 정의할 수 있다. 이때 col3는 이 평면위에 존재하기 때문에 새로운 차원을 정의하는데에 있어 아무런 기여를 하지 못한다. 따라서 A의 부분 공간(subspace)인 column space는 4차원 공간에서 2차원 공간인 평면을 정의하는데 그친다. 

 

우리는 column space를 정의하는데 있어 col3를 제외시킬 수 있다. 혹은 col1을 제외시키는 것도 가능하다. col3-col2=col1이기 때문이다. 4차원이기 때문에 그래프로 표현하긴 어렵지만 위의 내용을 잘 상상해보자. 

 

 

 

 

2. Null Space

 

이제 새로운 공간에 대해 알아보자. 바로 영공간(Null space)이다. (보통 널스페이라 발음한다. 앞으로는 영문 표기법을 따르겠다.)

 

이 Null space는 column space와는 완전히 다른 부분 공간(subspace)이다. 앞서 이용했던 행렬 A를 그대로 활용해 Null Space를 정의해 보겠다. A의 Null space의 정의는 다음과 같다. 

 

 

Null space:
선형 방정식 Ax=b에서 b가 zero vector(=Null vector, =0벡터)일때 식을 만족시키는 모든 가능한 해 x에 대한 집합이다. 다시 말하면 선형방정식 Ax=0의 해(Solutions)들이 이루는 공간, Null Space를 의미한다. 

 

식(4)를 Null Space를 위한 식으로 다시 써보자. 

 

 

위 식에 대해 바로 생각할 수 있는 해(solution)은 무엇일까? 바로 0벡터 x=[0 0 0]T이다. 어떤 Null space든지 반드시 0벡터(zero vector)는 포함된다. 0벡터를 반드시 포함하기 때문에 우리는 벡터 공간(vector space)을 정의할 수 있는 기회를 갖는다. 

 

0벡터를 제외한 다른 해를 좀 더 정의해보자. A의 col1과 col2를 더하고 col3에 -1을 곱하여 더해주면 그 결과가 0벡터가 될 것이다. 즉 x=[1 1 -1]T이다. 또 다른 해는 없을까? 사실 방금 구한 해(solution)에 임의의 스케일 상수 c를 곱해주면 모두 해가 될 것이다. 즉 

 

 

 

이를 통해 A의 Null space를 정의할 수 있다. 이 Null space는 3차원 공간 R3의 부분 공간(subspace)이다. 3차원 공간에서 이 Null space가 어떻게 표현될까? 바로 직선(Line)의 형태로 표현된다. 아래 그림과 같이 zero vector(origin)와 x=[1 1 -1]T를 지나는 검은색 Line으로 정의 된다. 이것이 R3의 부분 공간인 A의 Null space이다. 

 

 

 

 

그렇다면 Null space가 벡터 공간인지 아닌지를 어떻게 확인할 수 있을까? Null space는 공간(space)이라고 정의하기 위한 조건들을 만족하는가? Ax=0의 해들은 언제나 부분 공간(subspace)을 이루는가? 이를 확인하기 위해선 다음을 확인해보면 된다. 

 

Ax=0의 어떤 해를 v라 하고, 도 다른 어떤 해를 w라 하자. Av=0, Aw=0이라고 할 때 vw가 하나의 공간에 존재한다면, A(v+w)=0이 성립해야 한다. 즉 아래의 조건이 만족하는지를 확인하면 Ax=0의 해들이 공간을 이루는지를 확인할 수 있다. 

 

 

여기서 A(v+w)=0은 분배 법칙(distributive law)에 의해 Av+Aw=0와 같이 쓸 수 있다. 이렇게 보면 사실 식(12)는 당연할 수밖에 없다. 또 한가지 확인해야 할 사항은 A(cx)=0인데, 여기서 상수 c는 앞으로 뺄 수 있으므로 당연히 성립하게 된다. 

 

 

여기서 한 가지 의문이 생긴다. 그렇다면 b=zero vector일때의 Null space 말고도 b가 임의의 값을 가질 때에도 해(solutions)에 대한 벡터 공간이 존재하는가? 아래의 예를 보자. 

 

 

위의 식 (13)은 b가 0이 아닌 임의의 값을 가지는 경우다. 여기서 해는 x=[1 0 0]T, 혹은 x=[0 -1 1]T 이다. 이에 대한 해들은 벡터 공간(vector space)를 이루는가? 정답은 당연히 No다. 왜냐하면 해 중에 zero vector는 없기 때문이다. 즉 원점을 지나지 않기 때문이다. b가 0이 아닌 임의의 벡터일 때 어떤 해(solution)들에 대한 평면(plane), 또는 직선(Line)이 있을 수 있지만 이들은 원점을 지나지 않는다. 따라서 0이 아닌 임의의 벡터 b에 대한 해의 벡터 공간은 존재하지 않는다. 

 

 

 

아래는 위의 Null space를 그리기 위한 MATLAB 코드이다. 

참고로 MATLAB에서 Null space를 구하기 위한 커맨드는 "null(A)" 이다. A는 임의의 rectangular 행렬이다. 

이때 계산되는 Null space는 Normalize가 된 null space가 나온다. 즉 위의 A의 Null space는 x=[1 1 -1]T인데 이 xx의 norm으로 나눠준 결과, 즉 x의 크기가 1이 되도록 만들어진 결과가 나온다. 아래 코드를 실제로 돌려서 확인해보자. 

 

 

 

 

 

3. 마치며

 

우리는 이번 포스팅에서 벡터 공간(vector space)과 부분 공간(subspace)에 대해 공부하였다. 이들 공간을 정의하는 법에 대해 배웠으며 임의의 행렬 A에 대한 부분 공간인 column space를 정의하는 법을 배웠다. column space를 정의하기 위해선 각 column들의 선형 결합(Linear Combination)을 통해 정의할 수 있으며, column간 독립성(Independency)의 확인을 통해 전체 공간에서 column space의 형태를 파악할 수 있었다. 

우리는 또한 임의의 선형 방정식(Linear Equation) Ax=b 에서 b=zero vector일 때, 즉 Ax=0의 해 집합인 Null space에 대해서 공부하였다. Null space는 column space와는 완전히 다른 공간이며 Ax=0을 만족시키는 모든 해들이 이루는 부분 공간(subspace)임을 배웠다. 다음 포스팅에서는 Ax=0에 대한 Null space를 계산하는 알고리즘에 대해 공부해 보도록 하겠다. 

 

 

1. 이미지 센싱과 획득(Image Sensing and Acquisition)

 

우리가 흔히 접하는 대부분의 이미지는 광원(illumination source)이 어떤 사물에 주사되고, 사물에 반사된 빛 에너지를 센서를 통해 흡수하여 이미지를 만들게 된다. 일반적으로 생각하면 광원은 햇빛, 촬영할때 사용하는 조명 등이 있을 수 있다. 

 

우리가 흔히 볼 수 있는 대부분의 이미지는 "광원"과 그 광원 에너지가 도달한 환경에 대해 흡수되거나 반사된 에너지의 센싱의 조합으로 만들어진다. 여기서 중요한 것 두 가지가 바로 광원(illumination source)장면(scene)이다. 광원으로는 일반적으로 햇빛이나 형광등, LED조명과 같은 눈에 보이는 광원도 있지만, 좀 더 넓게 보면 전자기 에너지(Electromagnetic Energy Source), Radar, 적외선(infrared), X-Ray 등이 있고 심지어는 초음파(ultrasonic waves)나 컴퓨터로 생성한 패턴 광원이 될 수도 있다. 

 

장면(scene)의 경우에도 우리 주변에서 흔히 볼 수 있는 책상, 컵 등의 물건이 될 수도 있지만, 마찬가지로 좀 더 넓게 보면 분자(molecule), 암반층(buried rock formations), 심지어는 인간의 뇌도 하나의 대상이 될 수 있다. 

 

광원은 그 특성에 따라 광 에너지가 대상 물체에 반사(reflection)될 수도, 혹은 대상 물체를 통과(pass through)할 수도 있다. 전자의 예는 가시광선(햇빛)이 물체에 반사되어 우리 눈에 들어옴으로써 사물을 인지할 수 있는 것이고, 후자의 예는 X-Ray가 인체를 투과하면서 인체 장기의 구조나 형상에 대한 이미지를 만들어 내는 것이다. 전자현미경(Electron microscopy)이나 감마 이미징(Gamma Imaging)이 이러한 예가 되겠다. 

 

 

 

 

- 단일 센서(single sensor)를 활용한 이미지 획득: 

 

아래 그림은 단일 센서의 구조를 보여준다. 아마 이 세상에서 가장 익숙한 형태는 포토다이오드(photo diode)일 것이다. 포토다이오드는 실리콘 물질로 만들어져 있고 출력 voltage 파형은 빛의 크기에 비례한다. 즉 더 많은 양(더 센)의 빛이 들어올수록 더 높은 출력 voltage가 나온다. 

센서 앞에 있는 filter는 빛을 band별로 걸러서 선택적으로 빛 압력을 받게끔 한다. 예를 들면 Green filter가 위치할 경우 이 filter에 의해 Green band영역의 빛만 대부분 들어오고 나머지 band(red, blue, ...)의 빛은 대부분 걸러진다. 결과적으로 이 센서의 출력은 가시광선 스펙트럼에서 다른 영역의 빛 보다 Green 대역의 빛에 더 민감해진다. 

이에 대한 자세한 내용은 다크프로그래머님 블로그에 잘 정리 되어 있으니 참고하시라. 링크: http://darkpgmr.tistory.com/97

 

단일 센서(single sensor)의 구조, 포토다이오드

 

 

 

이러한 단일 센서만 가지고도 이미지를 얻을 수 있다. 하지만 그러기 위해선 특별한 장치가 필요하다. 아래 그림은 단일 센서를 이용해 이미지를 획득하는 장치이다. Drum에 스캔할 필름이 부착되어있고, 이 필름(film)을 리드 스크류(Lead screw)에 부착된 센서가 drum의 축방향(x-direction)으로 스캔을 한다. 한 라인의 스캔이 끝나면 drum이 x축을 중심으로 회전하여 필름을 y축 방향으로 움직여서 다음 줄을 스캔하게 된다. 

 

 

 

센서를 1개만 사용한다는 점에서 저렴할 수는 있으나 속도는 굉장히 느리다. 오히려 센서의 가격이 저렴할 경우 기계 장치로 인해 더 비싸질 수 있다. 이와 비슷하게 drum이 아닌 평평한 bed를 사용해 x, y방향으로 스캔하는 장치도 있다. 이와 같은 장치를 microdensitometers라 한다. 사전의 해석으로는 미소 농도계라고 나와있으나 뭔가 적절한 해석은 아닌 것 같다.

 

 

 

- Sensor strip을 활용한 이미지 획득:

 

단일 센서는 적은 센서로 이미지를 얻을 수 있다는 장점이 있으나 너무 느리다. 이보다 더 잘 쓰이는 방식은 sensor strip을 사용하는 것이다. 이는 아래 그림과 같이 단일 센서 여러 개를 이어 붙여 하나의 Line sensor형태를 띈다. 한 번에 line 전체를 스캔하기 때문에 단일 센서 방식에 비해 훨씬 빠르다. 

 

 

아래 그림은 대부분의 flat bed scanner에 사용되는 sensor strip의 형태이다. 

 

 

 

이러한 In-line sensor strip방식은 항공 사진에 응용되기도 한다. Line sensor를 붙인 항공기가 일정한 고도에서 일정한 속도로 움직이며 특정 지역을 스캔한다. 한 번에 한 line의 이미지를 스캔하고, 스캔한 line을 합쳐 2차원 이미지를 완성시키는 방식이다. 

 

Sensor strip방식은 또한 의료분야나 산업현장에서 3차원 물체의 단면(cross-sectional)을 얻기 위해 사용되기도 한다. Ring 구조의 안쪽 벽면에 X-Ray와 같은 광원이 부착되고 반대 벽면을 포함한 나머지 면에 센서들이 부착되어 있는 구조다. 아래 그림은 이러한 장치의 구조를 나타낸다. 

 

 

 

Ring의 한쪽 벽면에 장착된 X-Ray source에서 X-Ray를 방출하고, 물체를 통과하여 반대편 센서에 다다른다. 이는 의료나 산업현장에서 사용되는 CAR(Computerized Axial Tomography)의 기본적인 형태이다. 이렇게 하나의 단면을 획득한 후 물체를 Ring의 축 방향으로 한 step 이동시킨 후 다음 단면 이미지를 얻는다. 이렇게 3차원 물체의 단면 스캔을 마친 후 이미지들을 정합하여 하나의 3D volume이미지를 얻기도 한다. 광원(illumination source)이나 센서의 타입은 다르지만 MRI(Magnetic Resonance Imaging), PET(Position Emission Tomography)과 같은 장치도 기본적인 매커니즘은 매우 비슷하다. 

 

 

 

- Sensor 배열을 활용한 이미지 획득:

 

아래 그림은 단일 센서 여러 개를 붙여 센서 배열을 만든 모습이다. 

 

 

다수의 전자기(Electromagnetic) 혹은 초음파(ultrasonic waves) 센싱 장치들이 이 구조를 사용한다. 대표적인 예가 디지털 카메라에 사용된 CCD(Charge-Coupled Device)센서 Array인데 보통 가로 세로 각각 4000개 이상의 센서들로 구성된다. 2-D Array 방식의 가장 큰 장점은 에너지 패턴 자체를 센서 Array에 집속시켜 이미지를 한 번에 획득하기 때문에 센서의 Motion을 위한 장치가 따로 필요 없다는 것이다. 아래 그림은 Array 센서를 활용해 이미지를 획득하는 모습을 나타낸 것이다. 

 

 

 

 

먼저 광원으로부터 빛 에너지(Illumination source)가 방출되어 나온다. 방출된 빛 에너지는 어떤 물체(Scene element)에 다다르게 되고 반사된다(앞서 언급했듯 물체의 특성, 혹은 광 에너지의 특성에 따라 일부는 물체를 투과하기도 한다). 반사된 빛이 Imaging system에 도달한다. Imaging system은 입사되는 에너지들을 모아 image plane에 집중시킨다. 

 

입사되는 에너지가 빛의 형태라면, 가장 먼저 마주하는 대상은 렌즈(lens)다. 렌즈(볼록 렌즈)에 다다른 빛은 한 점으로 모이게 되는데, 이 점을 focal point라 한다. 이 focal point를 지나면 image plane(focal plane)이 있고 여기에 상이 맺히게 된다. 여기 상이 맺히는 부분에 바로 CCD센서 Array가 있다. 이 CCD센서를 통해 대상 물체에 반사된 빛 에너지는 전기 신호(voltage)로 변환 되고 양자화(Quantization)과정을 거쳐 디지털 이미지(Digitized Image)가 생성되는 것이다. 

 

위에서는 간단히 설명했지만 실세계 장면을 디지털 이미지로 만드는 과정은 매우 복잡한 단계를 거쳐서 생성된다. 이를 위해선 핀홀 카메라 모델(pin-hole camera model)을 통한 World to Pixel coordinate의 변환 과정, 양자화(Quantization) 과정 등 보다 자세한 설명이 필요하다. pin-hole camera model을 통한 이미지 좌표 변환 과정은 향후 multiple view geometry책에 대한 포스팅을 할 때 좀 더 자세히 설명하도록 하고, 양자화에 관한 내용은 다음 포스팅에서 언급하도록 하겠다. 

 

 

 

2. 간단한 이미지 형성 모델(A Simple Image Formation Model)

 

앞서 실세계 장면을 디지털 이미지로 만드는 과정은 매우 복잡하다고 언급하였다. 이번 포스팅에서는 광원과 이미지 획득에 대한 내용을 다루고 있으므로 그 복잡하고 수많은 과정 중에서 에너지 관점에서 간단한 이미지 형성 모델을 이야기 할까 한다. 

 

우리는 지난 포스팅에서 아래와 같이 이미지를 x와 y좌표로 표현할 수 있는 2차원 함수로 정의 하였다. 

 

 

이 함수가 의미하는 f는 (x, y)좌표에 있는 어떤 값, 혹은 진폭(amplitude)이라 할 수 있는데, 항상 양수이고 이미지의 형성 과정에서 결정된다. 이 값은 이미지 형성 과정의 물리적 단계, 즉 광원에서 나온 빛이 물체에 반사 되고, 반사된 빛이 렌즈를 거쳐 센서에 도달 하여 전압(voltage)값이 출력 될 때 계산된다. 이때 이 전압 값은 센서로 방사되는 에너지(ex. electromagnetic waves)의 크기에 비례한다. 따라서 이 f값은 반드시 0보다 커야 하며 유한하다. 

 

 

 

함수 f(x, y)는 조명 성분반사 성분의 두 가지 컴포넌트들로 구성된다. 

조명 성분(illumination)은 카메라에 보이는 장면에 주사되는 광원의 총량을 의미한다. 

반사 성분(reflectance)은 카메라에 보이는 장면에 있는 물체에 반사되는 빛의 총량을 의미한다. 

이들 조명 성분과 반사 성분은 각각 i(x, y), r(x, y)로 표기하며, 함수 f(x, y)는 두 함수의 곱으로 표현한다. 

 

 

반사 성분 r(x, y)의 범위는 0 ~ 1 사이로 한정되는데, 0의 경우엔 대상 물체가 주사된 광원을 전부 흡수한 경우이고, 1의 경우엔 광원을 전부 반사한 경우이다. 조명 성분 i(x, y)는 광원(illumination source)에 의해 결정되고, 반사 성분 r(x, y)는 대상 물체의 특성에 따라 결정된다. 즉 조명을 강하게 할 수록 조명 성분 값이 커질 것이고, 대상 물체가 유리나 거울과 같이 빛을 많이 반사하는 물질인 경우 반사 성분 값이 커질 것이다. 

 

좀 더 실질적으로 설명하자면 디지털 이미지의 각 픽셀(pixel)의 밝기 강도는 조명 성분과 반사 성분으로 구성되어 있다고 말할 수 있다. 

이러한 법칙은 광원이 물체를 반사하는 것이 아닌 X-Ray와 같이 광원이 물체를 투과(transmission)하는 경우에도 동일하게 적용될 수 있다. 이때는 이미지 형성 모델을 물체의 반사율(reflectivity)이 아닌 투과율(transmissivity)을 본다. 즉 r(x, y)이 반사율이 아닌 투과율을 의미하게 된다. 값의 범위는 0~1사이로 같다. 

 

 

- Examples of illumination and reflectance values:

 

조명 성분과 반사 성분에 대한 예를 들어보겠다.  모든 값들은 절대적이지 않으며 평균적인 값들이다. 

먼저 조명 성분에 내한 예이며, 단위는 lumen이다. 

 

Situations  Value 
 
 날씨가 좋은 날 낮에 태양의 지구 표면에 대한 빛의 강도  
 날씨가 흐린 날 낮에 태양의 지구 표면에 대한 빛의 강도  
 날씨가 좋은 날 에 이 산출하는 지구 표면에 대한 빛의 강도  
 일반적인 사무실 내의 빛(조명)의 강도  

 

 

 

다음은 반사 성분 r(x, y)에 대한 예이다. 범위는 0~1사이의 값이며 1에 가까울 수록 반사율이 높다. 

 

 Material Name Reflectivity
 검은 벨벳(black velvet) 0.01 
 스테인리스 스틸(Stainless steel) 0.65 
 흰색 페인트가 칠해진 벽(flat-white wall) 0.80 
 은 도금된 금속(silver plated metal) 0.90 
 눈(snow) 0.93 

 

 

이번에 이야기 할 주제는 벡터 공간(Vector Spaces)이다. 

벡터는 알겠는데(크기와 방향을 가지는 물리량.. 이라고 중,고등학교때 다들 배웠을 것이다) 공간이 붙으니까 뭔가 거창해보인다. 

그렇다면 이 벡터 공간이라는 놈은 어떻게 정의할 수 있을 까? 또 그 공간안에서 우리는 무엇을 할 수 있을까?

미리 이야기 하자면, 이전 포스팅(Lecture 1 참고)에서 언급했던 선형 결합(Linear Combination)을 미리 숙지하면 이번 포스팅을 이해하기 좋다.

지금부터 벡터 공간에 대해 알아보자. 

 

 

 

1. 벡터 공간(Vector Spaces)

 

 

- 2-dimensional vector space: 

 

벡터 공간에서 공간(Spaces)이란 단어에 대해 생각해보자. 공간이란 무엇인가? 

 

다수의 벡터가 있고, 이 벡터들이 모여 하나의 공간을 형성하는 것이다. 그러나 아무 벡터나 허용 되는 것은 아니다. 이 공간상에 존재하는 벡터들은 서로가 서로에게 더해질 수 있고, 임의의 숫자가 각각에 곱해져서 각 벡터의 길이가 늘어날 수도 있다. 즉 

선형결합(Linear Combination)연산이 같은 공간상에 존재하는 벡터들 사이에 가능해야 한다. 

 

예를 들어서 설명을 해보자. x축과 y축으로 이루어진 2차원의 벡터 공간을 생각해보자. 이를 아래와 같이 정의할 수 있을 것이다. 

 

 

R의 지수 부분의 숫자는 차원을 의미한다. 이 2차원 공간상에 존재하는 모든 실수(real number)벡터들의 집합을 의미한다. 여기에 포함되는 벡터들은 무수히 많을 것이다. 그 중에 몇 가지만 나열해보자. 

 

 

[3, 2]는 x축으로 3만큼, y축으로 2만큼 간 한 점을 원점으로부터 가리키고 있는 벡터이다. 

[0, 0]도 하나의 벡터가 될 수 있나? 라고 생각할 수도 있을 것이다. 그러나 어쩌면 벡터 공간을 정의하기 위해 가장 중요한 벡터가 바로 영 벡터이다. 차차 설명하겠다. 

[pi, e]는 그 값이 대략 [3.14, 2.718]가량 된다. 역시 생각할 수 있는 벡터 중 한 가지이다. 이 벡터들을 실제로 공간상에 표현해보자.

 

 

 

 

위에서 언급한 벡터들이 좌표 평면상에 표현되었다. 여기서 영벡터 [0 0]는 실제로 표현되지는 않았지만 분명히 이 평면상에 존재하는 하나의 벡터 원소이다. 

 

우리가 흔히 알고있는 x축과 y축은 2차원을 구성하는 각각 첫 번째 컴포넌트(component)와 두 번째 컴포넌트이다. 
이와 같이 x와 y 두 가지의 컴포넌트들로 구성되는 벡터 공간을 x-y평면(Plane)이라 한다. 이것이 2D벡터 공간(space)이라 불리는 이유는 x와 y 두 가지 컴포넌트들로 구성된 모든 벡터들이 이 공간상에 존재할 수 있기 때문이다.
공간(space)이란 말을 쓰기 위해선 하나, 혹은 몇 개의 벡터가 아니라 무수히 많은(무한대의) 벡터들이 공간이라 정의된 영역에 존재할 수 있기 때문이다.

 

 

어쩌면 영벡터[0 0]는 필요 없지 않나요? 라고 생각할 수도 있다. 그러나 영벡터도 공간을 이루기 위해서 반드시 필요하다. 왜냐하면 벡터 공간내에서 존재하는 모든 벡터들은 선형 결합(Linear Combination)을 통해 만들어질 수 있어야 한다. 가령 2차원 공간에서 영벡터를 제외시킨다고 가정해보자. 이때 아래와 같은 선형결합을 할 경우엔 그 식이 성립하지 않게 된다. 

 

 

영벡터가 존재하지 않고선 위의 식이 성립할 수 없게 된다. 이와 같이 모든 차원의 벡터 공간은 반드시 영벡터를 포함해야 한다. 

 

 

- 3, and n-dimensional vector space:

 

3차원 벡터 공간을 살펴보자. 2차원에 비해 벡터의 컴포넌트 한 개가 더 추가된 것일 뿐 기본적인 개념은 똑같다. 3개의 실수(real number) 컴포넌트들로 구성된 벡터들로 이루어진 공간이다. 이를 조금 다르게 표현해보면...

"3 개의 실수 컴포넌트(x, y, z)로 정의할 수 있는 모든 벡터들이 존재할 수 있는 공간"이라 할 수 있겠다. 

물론 실수 뿐만 아니라 허수(imaginary number)로 이루어진 벡터 공간도 있지만 그건 나중에 다루도록 하겠다. 결국 3차원 공간은 아래와같이 정의된다. 

 

 

 

3차원 벡터의 원소는 당연히 아래와 같을 것이다. x, y, z의 3개의 컴포넌트로 구성되어 있다. 

 

 

좀 더 확장해서 생각해보면 벡터는 3차원 벡터 뿐만 아니라 4차원, 5차원, .. n차원 벡터가 있을 수 있다. 물론 시각적으로 표현이 가능한 차원은 3차원이 한계이다. 그러나 이론적으로 3차원 이상의 n차원 벡터는 존재할 수 있으며 2차원 및 3차원 벡터에서 보였던 선형 결합 등등의 관련된 연산도 가능하다. 따라서 우리는 이러한 벡터 공간을 n차원으로 확장하여 정의할 수 있다. 

 

 

 

 

 

 

 

 

 

2. 부분 공간(Subspace)

 

우리는 앞서 같은 공간상에 있는 벡터들은 동일한 공간에 존재하는 다른 벡터들의 선형 결합에 의해 정의될 수 있어야 한다고 했다. 즉 어떤 벡터에 일정 상수값을 곱해 scale(길이)을 늘려주거나, 다른 벡터를 더해주었을 때 그 결과가 같은 공간에 존재해야 한다. 그런데 과연 항상 이러한 경우만 존재할까? 아래의 벡터 공간이 성립하지 않는 경우의 예를 보자. 

 

아래의 2차원 공간에서 1사분면(x축 +방향, y축 +방향)만 취한다고 가정해보자. 

 

 

 

즉 우리는 2차원 공간 전체 중에서 1/4의 영역인 1사분면만 가질 수 있다고 가정해보자. 먼저 이 공간내의 다른 벡터와의 덧셈 연산에 대해서 살펴보자. 1사분면 공간내의 어떠한 벡터끼리 덧셈을 해도 그 결과가 1사분면에 위치하는가? 답은 Yes이다. 아래를 보자. 

 

덧셈 연산에 "닫혀"있다.

 

 

1사분면 내의 임의의 벡터 v1(Red)v2(Green)를 더했다. 결과 벡터(v1+v2)는 여전히 1사분면에 위치해 있다.

여기서 v1과 v2는 1사분면 공간 내의 원소들이기 때문에 무조건 x와 y컴포넌트가 양의 값을 가진다. 따라서 이 공간 내의 어떤 벡터끼리 더해도 그 결과 벡터는 여전히 1사분면에 위치할 수밖에 없다. 이러한 경우 우리는 1사분면의 벡터 공간은 덧셈 연산에 대해 "닫혀있다(closure)"라고 한다. 

 

 

선형 결합이라 함은 벡터끼리의 덧셈과, 각 벡터에 어떤 scale값을 곱해주는 곱셈연산이 있다. 이번엔 곱셈 연산이 성립하는지를 알아보자. 1사분면 벡터들에 대해 임의의 스케일 값을 곱했을 때 그 결과벡터가 여전히 1사분면에 위치해 있는가? 답은 No이다. 역시 아래 예를 보자. 

 

곱셈 연산에 "닫혀있지않다"

 

 

1사분면의 임의의 벡터 v에 임의의 상수 2를 곱해서 벡터의 길이를 늘렸다. 이때 2v는 여전히 1사분면에 위치해 있다. 그러나 문제는 그 스케일의 방향이다. 즉 반대 부호인 -2을 곱했을 경우 이 결과 벡터인 -2v는 1사분면을 벗어나게된다. 따라서 1사분면 공간의 벡터에 대해 곱셈 연산은 "닫혀있지않다(not closure)"

 

이 경우, 우리는 1사분면을 벡터 공간이라고 정의 할 수 없다. 덧셈에는 닫혀있으나, 곱셈에는 닫혀있지않기 때문이다. 

 

 여기서 우리는 한 가지 결론을 얻을 수 있다. 벡터 공간을 정의하기 위해 필요한 규칙이 있다. 바로 벡터 공간내의 벡터들은 서로 더하고 임의의 scale상수를 곱해도 그 결과 벡터가 해당 공간내에 존재해야 한다. 즉 임의의 차원의 벡터 공간이 성립하기 위해선 선형 결합(Linear Combination) 연산에 대해 성립하고 닫혀있어야 한다

 

 

 

 

 

 

 

 

- R2안의 벡터 공간, (Subspace of R2):

 

위의 1사분면의 예를 다시 생각해보자. 1사분면은 분명히 2차원 공간내에 존재한다. 그러나 선형 결합에 대한 규칙이 성립하지 않기 때문에 벡터 공간, 혹은 부분 공간이라고 할 수 없다. 그렇다면 2차원 공간에 포함되면서도 선형 결합 규칙이 성립하는 작은 공간은 없을까? 이를 좀 더 일반적인 시각으로 봤을 때, 임의의 n차원 공간에 포함되면서 n차원 벡터들에 대한 선형 결합 규칙이 성립하는 작은 공간은 없을까? 

 

임의의 n차원 공간에 대해, n차원 공간에 포함되면서 n차원 벡터들에 대해 선형 결합 연산이 성립하는 작은 공간을 우리는 부분 공간(Subspace)라 부른다. 즉 부분 공간 안의 벡터들끼리는 안전하게 선형 결합 연산을 할 수 있어야 한다. 

 

결국 이 부분 공간이라는 것은 크게는 n차원 공간에 포함이 되고, 부분 공간내의 벡터들을 활용해 선형 결합 연산을 수행했을 때 그 결과 벡터가 여전히 부분 공간에 존재할 경우(정확하게는 n차원이 아닌 n차원 안의 부분 공간에 존재해야 함) 성립한다. 

 

글 만으로 이해하기는 좀 어려울 것이다. 아래의 부분 공간에 대한 예를 위에서와 마찬가지로 2차원 공간에서 설명해보자. 아래 그림을 보자. 

 

 

위 그림에서 벡터 v가 2차원 공간의 어떤 부분 공간(subspace)에 위치해 있다고 가정하자. 이 부분 공간이 진짜라면, 위의 벡터 v말고도 다른 벡터들이 부분 공간안에 더 존재해야 한다. 다른 벡터라고 한다면 가령 임의의 상수를 곱한 벡터들이 될 수 있겠다. 2, 3, 혹은 -1/2과 같은 상수들 말이다. 그렇게 임의의 상수들을 더한 것들을 나열해보면 아래와 같이 될 것이다. 

 

 

 

 

즉 이 부분공간에는 빨간색 벡터 v말고도 주황색 벡터 2v, 보라색 벡터 3v, 초록색 벡터 -1/2v 등이 존재한다. 심지어는 0을 곱한 영벡터(zero vector)도 있다. v에 0을 곱한 영벡터의 경우 [0 0]이 되는데 이러한 영벡터도 이 부분 공간의 원소에 포함된다. 이 외에도 수 많은 벡터들이 존재할 수 있다. 이러한 수많은 벡터들을 나열한 것이 바로 직선 l이다. 결국 이 부분 공간은 직선(Line) l 이 된다. 

 

곱셈 연산에 대한 성립은 확인을 했고, 이제 덧셈 연산에 대해 확인해보자. 이 부분 공간인 직선 l에 존재하는 어떠한 벡터들끼리 더해도 같은 공간에 존재하는가? 답은 YES임을 쉽게 유추할 수 있다. 따라서 이 직선은 R2의 부분 공간이 맞다.

 

 

여기서 이러한 의문이 들 수 있다. 그렇다면 R2에 존재하는 모든 직선(line)은 전부 부분 공간(subspace)이 될 수 있을까? 아래 그림을 보자. 아래 그림에서 점섬으로 표현된 직선을 생각해보자. 이 직선은 R2의 부분 공간이 될 수 있을까?

 

 

 

위의 직선을 실제 벡터들로 표현하면 아래 그림과 같이 된다. 

 

 

 

위의 직선 l'은 R2의 부분 공간인가? 정답은 No다. 결론부터 말하자면 R2에 존재하는 직선이 부분 공간이 되기 위해선 반드시 원점인 zero vector를 지나가야 한다. 왜 그런지 한 번 살펴보자. 

부분 공간이 되기 위해선 어떠한 수를 곱하거나, 같은 공간내의 어떠한 벡터들을 더해도 그 결과가 부분 공간내에 존재해야 한다. 위 그림에서 빨간 벡터에 0을 곱했을 때, 그 결과가 점선으로 표현된 직선 l'에 존재하는가? 혹은 주황색 벡터에 보라색 벡터를 더했을 때 그 결과가 직선 l'에 존재하는가? 두 경우 모두 틀리게 된다. 다른 어떠한 상수를 곱해도, 벡터를 더해도 결과는 마찬가지 이다. 따라서 위의 직선은 R2의 부분 공간이 아니다. 

 

 

결국 임의의의 부분 공간(subspace)은 "반드시 zero vector를 포함해야 한다!" 

 

왜냐하면 어떠한 벡터도 영을 곱하면 zero vector가 되기 때문이다. 

 

 

그렇다면 2차원 평면인 R2에서 가능한 부분 공간은 어떠한 것들이 있을까? 한 번 나열해보자. 

 

 

1번은 R2 그 자체가 하나의 부분 공간이 될 수 있다는 말이다. 

2번의 경우 앞에서 언급했듯 임의의 직선(Line)인데, 원점을 반드시 지나는 경우이다. 원점만 지난다면 어떠한 직선도 2차원 평면의 부분 공간이 될 수 있다. 

 

마지막 3번은 전체 평면도, 특정 직선도 아닌 바로 영벡터(zero vector) 그 자체이다. 즉 한 점 공간(point space)이다. 이 zero vector자체가 부분 공간이 성립되는 이유는 부분 공간에 대한 모든 조건을 만족하기 때문이다. 

- 일단 R2에 속해있다. 

- 또한 어떤 상수를 곱해도 zero vector이다. 

- 그리고 zero vector의 원소들인 zero vector들 끼리 더해도 여전히 zero vector이다. 

 

따라서 임의의 Rn공간에서 zero vector 자체는 항상 Rn의 부분 공간이 된다. 

 

 

 

그렇다면 3차원 공간 R3의 부분 공간은 어떠한 것들이 될까? 

 

 

등이 될 것이다. 3차원 공간 그 자체, 원점을 지나는 평면, 원점을 지나는 직선, 그리고 영벡터 그 자체이다. 

 

 

 

 

 

 

 

 

 

3. 행렬의 부분 공간(Subspace of Matrix)

 

이제 실질적인 문제를 살펴보자. 우리는 앞서 어떤 공간에서 부분 공간(subspace)을 정의하는 법을 배웠다. 이러한 부분 공간은 어떤 임의의 행렬(Matrix)에서도 끄집어낼 수 있다. 지난 포스팅(Lecture 5-1)에서 정의했던 행렬을 다시 살펴보자. 

 

 

우리는 위의 행렬 A로 부터 부분 공간을 뽑아낼 수 있다. 바로 column 공간(column space)이다. 이는 매우 중요한 부분 공간이며 행렬로부터 뽑아내는 첫 번째 부분 공간이다. A의 column은 R3에서 정의될 수 있다. A의 부분 공간을 정의하기 위해선 column 요소끼리 더하고, 각 column에 임의의 상수를 곱해서 만들면 된다. 즉 A의 column원소끼리 정의할 수 있는 모든 선형 결합(Linear Combination)을 통해 A의 부분 공간을 정의한다. 

 

임의의 행렬 A에서, 모든 column의 선형 결합(Linear Combination)은 부분 공간(subspace)을 형성한다. 
우리는 이를 column space라 부르고 C(A)로 쓴다. 

 

위의 정의는 이번 포스팅에서 어쩌면 가장 중요한 개념이다. 잘 기억해 두도록 하자. 

 

그럼 실제로 공간상에서 어떻게 표현되는지 구현해보도록 하자. 아래 그림은 위의 행렬의 column에 대한 벡터들을 3차원 공간상에 표현한 것이다. 

 

 

 

 

이제 아래와 같이 두 column 벡터들에 임의의 상수를 곱하고 이를 더해서 선형 결합을 한 결과를 그려보도록 하자. 

 

 

 

우선 10개의 임의의 선형 결합을 한 결과이다. 

 

nVec = 10

 

 

여기 저기 파란색 벡터들이 생겨나긴 했는데, 이것만 가지고는 뭐가 어떻게 되는지 파악하기 힘들 것이다. 이번에는 개수를 100개로 늘려서 그려보기로 하자. 

 

nVec = 100

 

 

뭔가 형상이 보이는가? 약간 평면이 나올 것만 같은데.. 개수를 좀 더 늘려보자. 이번엔 500개다. 

 

 

 

 

nVec = 500

 

 

위의 첫 번째 그림은 아까와 동일한 각도에서 바라본 것이다. 평면 같기는 한데 확인을 위해서 돌려서 봤다. 역시 평면의 형태가 보인다. 평면의 형태는 어떻게 보이는가? 평행사변형 모양이 보이지 않는가? 여기서 무엇을 알 수 있는지 아는 사람은 보일 것이다 ㅎㅎ

 

결론적으로 행렬 A의 column들의 선형 결합을 통해 우리는 R3의 부분 공간이 평면(plane)이라는 것을 눈으로 확인할 수 있었다. 부분 공간을 정의하기 위해선 임의의 행렬 A의 column원소들의 가능한 모든 선형 조합을 생각해보면 된다

 

아래는 위 선형 결합을 구현한 코드이다. 

 

 

 

 

 

4. 마치며..

 

이번 강좌에선 임의의 차원의 공간에서 부분 공간(subspace)을 정의하는 방법을 배웠다. 부분 공간을 정의하기 위해선 특정 조건을 만족해야 한다. 부분 공간내 모든 벡터 원소들 끼리 선형 결합 연산이 성립이 되어야하고, 모든 부분 공간은 반드시 영벡터를 포함해야 한다. 

우리는 또한 어떤 행렬로부터 column space를 정의하는 방법을 배웠다. 어떤 행렬의 부분 공간을 정의하기 위해선 row, 혹은 column원소들의 가능한 모든 선형 결합을 통해 정의할 수 있다. 이것이 이번 포스팅의 핵심 내용이다. 잘 기억하도록 하자. 

 

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

 

+ Recent posts