Image Compression idea
Basis의 특징
- Basis는 하나의 동일한 subspace에 대하여 여러개 존재할 수 있다. 이때, subspace안의 벡터를 표현할 때 어떤 basis를 사용하여 표현하는지에 따라서 필요한 정보의 양이 달라질 수 있다. [이미지 압축의 아이디어]
- Basis들은 subspace안의 모든 벡터들을 linear combination으로 표현할 수 있다.
→ 이런 basis의 특징들을 이용하여 어떤 벡터나 값을 아주 단순하게 표현하게 하는 basis를 찾을 수 있고, 현재의 복잡한 basis 대신에 단순한 basis를 이용하여 subspace를 표현하는 것이 바로 Change of Basis이다.
Example
R4상에 존재하는 벡터 v의 간단한 표현
- standard basis 표현
v=⎣⎢⎢⎢⎡2−22−2⎦⎥⎥⎥⎤=2⎣⎢⎢⎢⎡1000⎦⎥⎥⎥⎤−2⎣⎢⎢⎢⎡0100⎦⎥⎥⎥⎤+2⎣⎢⎢⎢⎡0010⎦⎥⎥⎥⎤−2⎣⎢⎢⎢⎡0001⎦⎥⎥⎥⎤ → 이렇게 표현하면 컴퓨터는 각 standard vector에 곱해지는 상수값 2, -2, 2, -2 (4개)와 사용하는 basis의 벡터와 그 순사를 모두 저장해야한다.
- 동일한 공간을 나타내는 다른 basis를 사용한 표현
-
basis
⎩⎪⎪⎪⎨⎪⎪⎪⎧⎣⎢⎢⎢⎡1111⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡1−1−11⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡11−1−1⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡1−11−1⎦⎥⎥⎥⎤⎭⎪⎪⎪⎬⎪⎪⎪⎫
-
표현
v=0⎣⎢⎢⎢⎡1111⎦⎥⎥⎥⎤+0⎣⎢⎢⎢⎡1−1−11⎦⎥⎥⎥⎤+0⎣⎢⎢⎢⎡11−1−1⎦⎥⎥⎥⎤+2⎣⎢⎢⎢⎡1−11−1⎦⎥⎥⎥⎤
→ 이렇게 표현하면 사용하는 벡터가 1개 뿐이므로, 사용되는 벡터와 거기에 곱해지는 상수값 2만 저장하면 된다.
⇒ standard basis를 이용하여 표현 했던 것보다 훨씬 간단하게(=저장용량을 적게 사용하도록) 표현할 수 있다!
Image Compression Idea
1024×1024 pixel의 gray image(255)를 나타내는 벡터 x∈R10242. 이때 벡터 x의 각각의 픽셀 xi는 0−255 사이의 값(=1byte로 표현가능)을 가진다.
- 각각의 픽셀 값을 모두 저장하려면 10242개의 픽셀 값을 저장하기 위한 공간이 필요하다. → 10242 byte 필요
- Image Compression
- 각각의 픽셀이 모두 검은색인 어떤 imgae를 저장한다고 가정해보자.
- 아무런 처리과정을 거치지 않고 저장한다면 10242개 픽셀값에 모두 255(=black)값이 저장되어 10242 byte를 이미지 표현에 사용하게된다.
255⎣⎢⎢⎢⎢⎡10⋮0⎦⎥⎥⎥⎥⎤+255⎣⎢⎢⎢⎢⎡01⋮0⎦⎥⎥⎥⎥⎤+⋯+255⎣⎢⎢⎢⎢⎡00⋮1⎦⎥⎥⎥⎥⎤
- 만약, 앞에서 보인 예시처럼 standard basis를 이용하여 이미지를 표현하지 않고 다른 basis를 사용하면 어떻게 될까?
- 벡터[1,1,...,1]T를 가지는 어떤 basis를 사용하여 이미지를 표현하면 다음과 같이 나타낼 수 있다.
255⎣⎢⎢⎢⎢⎡11⋮1⎦⎥⎥⎥⎥⎤+0⎣⎢⎢⎢⎢⎡1−1⋮−1⎦⎥⎥⎥⎥⎤+⋯+0⎣⎢⎢⎢⎢⎡−1−1⋮−1⎦⎥⎥⎥⎥⎤
- 0 이 곱해지는 의미없는 벡터는 무시하고, 의미있는 상수값 255가 곱해지는 벡터만을 컴퓨터가 저장하면 훨씬 작은 저장공간을 사용하면서 같은 이미지를 저장할 수 있게 된다.
→ standard basis의 결합으로 이미지를 표현하지 말고 다른 basis로 표현하면 저장공간을 아낄 수 있다.
*JPEG?
표준 이미지 형식 JPEG는 이미지를 각각의 8×8 block으로 나눈다.
(이미지 전체를 계산하기에는 계산양이 너무 많기 때문에 고안한 방식)
- 아래의 Othogonal basis는 실제로 JPEG2000에서 사용하는 basis이다.
- 영벡터가 아닌 직교벡터 8개는 서로 독립이므로 아래의 벡터들은 R8의 basis이다.
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡11111111⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1111−1−1−1−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡11−1−10000⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡000011−1−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1−1000000⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡001−10000⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡00001−100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡0000001−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
💡 이처럼, orthogonal basis를 basis로 고르는 것이 가장 좋은 방법이다. (why?)
Interpretation of Harar Wavelet Basis
R4으로 생각해보기 - Harar Matrix 이해하기
- R4의 Othogonal basis는 다음과 같다.
⎣⎢⎢⎢⎡1111⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡11−1−1⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡1−100⎦⎥⎥⎥⎤,⎣⎢⎢⎢⎡001−1⎦⎥⎥⎥⎤
- 다음 vector x를 Othogonal basis로 표현 해보자.
x=⎣⎢⎢⎢⎡100100101101⎦⎥⎥⎥⎤ =⎣⎢⎢⎢⎡100100101101⎦⎥⎥⎥⎤=100.5×⎣⎢⎢⎢⎡1111⎦⎥⎥⎥⎤+(−0.5)×⎣⎢⎢⎢⎡11−1−1⎦⎥⎥⎥⎤+0×⎣⎢⎢⎢⎡1−100⎦⎥⎥⎥⎤+0×⎣⎢⎢⎢⎡001−1⎦⎥⎥⎥⎤
-
첫번째 basis 벡터에는 벡터 x 요소들의 평균값을 곱한다.
4∑i=14xi=4(x1+x2+x3+x4)−0
-
두번째 basis 벡터는 x를 반으로 나눴을 때(x1,x2 / x3,x4)위 요소의 합과 아래요소 합의 차이의 평균을 곱한다.
(이때 나누는 기준은 vector의 값이 1 → -1로 변하는 위치이다)
4(x1+x2)−(x3+x4)
-
세번째 basis 벡터는 첫번째 요소와 두번째 요소 차이의 평균을 곱한다.
2x1−x2
-
네번째 basis 벡터는 세번째 요소와 네번째 요소 차이의 평균을 곱한다.
2x3−x4
→ basis 벡터에서 0이 아닌 요소만을 고려했을 때, 값이 음수인 부분과 양수인 부분 각각의 합의 차이의 평균값이 각 basis 벡터에 곱해지는 상수 값이 된다.
0이아닌 요소의 개수양수인 요소들의 합 - 음수인 요소들의 합
- 벡터 x를 압축시킬 수 있는 벡터 c 구하기
-
벡터 c는 x를 압축시키기 위해 basis에 곱해지는 상수값들의 집합
-
W는 wi를 column vector로 갖는 basis를 의미한다.
x=c1w1+...+c4w4=[w1⋯w4]⎣⎢⎢⎡c1⋮c4⎦⎥⎥⎤=Wc
-
따라서 위 수식을 다르게 표현하면 다음과 같이 벡터 c를 나타낼 수 있다.
(W는 서로 independence한 column vector로 이루어져 있기에, 역행렬을 갖는다.)
c=W−1x
-
c의 의미
x를 Wbasis를 이용한 좌표계상의 좌표로 표현한 것이 바로 c이다.
이렇게 표현한 c에서는 데이터를 저장할 때 사용되는 용량을 줄이기 위해서 정보량이 가장 위쪽으로 쏠리도록 구성하는 것이 일반적이다. (0은 저장하지 않기 때문)
loseless압축과 lossy압축
- loseless 손실없는 압축이라는 의미
- lossy
- 0을 제외한 c의 값 중에서 특히 0과 가까운 값은 근사하여 0으로 취급하여 저장한다. → 0으로 근사된 값은 저장하지 않음
- 이렇게 압축을 했다가 복원하면 미세한 색의 차이가 1가지 색으로 뭉뚱그러지기때문에 약간의 손실이 발생한다.
Conditions for Good Basis
좋은 basis 선택의 조건
- 빠른 계산이 가능해야한다. → DWT에서는 역행렬을 W−1=WT로 표현할 수 있기 때문에 빠른 계산이 가능하다.
- 압축시 메모리 공간을 적게 차지하게 하는 basis를 선택해야한다.
응용
이미지는 기본적으로 2-D matrix형태이므로, 행렬에 대해서 압축을 하기 위해서는 Haar matrix가 필요하다.
최초의 DWT 변환 (변환방법의 한 종류임)
Kronecker Product
- m×n 행렬 A와 p×q 행렬 B에 대하여 A의 각각의 요소에 모두 행렬 B를 곱하는 연산자.
- 연산결과는 mp×nq 행렬이 된다.
- A⊗B
A⊗B=⎣⎢⎢⎢⎢⎡a11Ba21B⋮am1Ba12Ba22B⋮am2B⋯⋯⋱⋯a1na2n⋮amnB⎦⎥⎥⎥⎥⎤
- A와 B가 둘다 벡터라면, 이 연산은 외적과 동일하다.
Haar Matrix
n=2t(t=0,1,2,...)인 n×n행렬 Hn은 다음과 같이 정의된다.
(Im은 m×m identity matrix를 의미한다.)
Hn=⎩⎪⎨⎪⎧[Hm⊗[11] Im⊗[1−1]][1]if n=2mif n=1
→ 이렇게 정의된 Haar Matrix에서 각각의 column vector를 column vector의 크기로 나누어 정규화:normalize 해서 사용한다.
Example of Haar Matrix
H2=[111−1]
H4=⎣⎢⎢⎢⎡111111−1−11−100001−1⎦⎥⎥⎥⎤
H8=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡111111111111−1−1−1−111−1−10000000011−1−11−1000000001−1000000001−1000000001−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
-
n×n matrix A가 n×n pixel의 gray image를 나타낸다. (n=2t)
-
Hn이 정규화된 Harr Matrix라고 하자.
- 정규화된 Harr Matrix는 Orthogonomal matrix이다.
- hi 는 Hn의 i번째 column vector
-
HnTHn=In 임을 Orthogonal 행렬의 성질으로부터 알아낼 수 있고 이를 활용하여 나타낼 수 있다.
→ Orthogonal matrix는 역행렬이 전치행렬과 동일하다.
-
이미지 파일을 압축하기 위해서는 original image matrix A의 왼쪽에는 HnT를 오른쪽에는 Hn을 곱해줘서 압축한다.
B=HnTAHn=⎣⎢⎢⎢⎢⎡h1TAh1h2TAh1⋮hnTAh1h1TAh2h2TAh2⋮hnTAh2⋯⋯⋱⋯h1TAhnh2TAhn⋮hnTAhn⎦⎥⎥⎥⎥⎤
-
정보량이 Left-Top으로 모인다. (아래쪽에는 0)
- 전체 pixel의 평균값을 나타내는 성분 h1TAh1이 B11에 위치한다.
- 또한 Bnn으로 갈수록 적은 픽셀간의 차이만 나타내기 때문에 0에 가까운 값을 가지게 된다.
-
이 특징을 이용해서 압축 matrix B에서 데이터가 많이 모여있는 부분만 저장하고 다시 압축을 풀면, 차이는 있겠지만 여전히 A와 비슷한 이미지를 띈다.
A^=HnB^HnT
Orthonomal matrix
Orthogonal + nomalize
Orthonomal matrix
n×n matirx Q=[q1, q2,⋯, qn] 에서 각 column 벡터가 다음 성질을 만족하면 Orthonomal matrix이다.
qiTqj={10(i=j)(i=j)
- i=j 일 때, 1 → 각 열벡터들의 자기자신의 내적이 1이므로 이는 column vector가 길이가 1인 nomal vector라는 것을 의미한다.
- i=j 일 때, 0 → 각 열벡터들간의 내적이 0이므로 서로 직교(Orthogonal)관계라는 것을 의미한다.
💡 따라서 행렬 Q는 각 열벡터의 길이가 1이고 서로 직교인 열벡터들로 이루어져 있다.
Orthogonomal 행렬의 역행렬이 전치행렬과 같은 이유
Orthogonomal matrix Q에 대하여,
QTQ를 계산하면 Orthogonomal 행렬의 정의에 의해 항등행렬이 결과로 나타나게 된다.
qiTqj={10(i=j)(i=j)
QTQ=⎣⎢⎢⎡q1T⋮qnT⎦⎥⎥⎤[q1⋯qn] =⎣⎢⎢⎢⎢⎡q1TAq1q2Tq1⋮qnTq1q1Tq2q2Tq2⋮qnTq2⋯⋯⋱⋯q1Tqnq2TAqn⋮qnTqn⎦⎥⎥⎥⎥⎤
→ 따라서 Q−1=QT 이다.