로그인   |  회원가입  |  사이트맵  |  Contact Us
  아이디 저장하기
 
홈 > SAS Tech & Tip > SAS Programming 활용하기
[SAS 프로그래밍] SVD를 이용한 이미지 압축(Image compression) 2018.04.04
김효범 965 0
http://www.mysas.co.kr/SAS_tiptech/a_question.asp?b_no=7657&gotopage=1&con=subject&keyword=&cmd=content&bd_no=05&gubun=

 

 

 안녕하세요. 이번시간에는 SVD이미지 압축에 활용되는 과정을 알아보겠습니다. SVD가 활용되는 대표적인 예 중 low-rank approximations(낮은 순위 근사)가 있습니다. 이미지 압축은 이 low-rank approximations를 통해 이루어집니다. 행렬에서 rank가 의미하는 것은 행렬에서 선형적으로 독립인 열의 최대 수입니다. 선형적으로 독립인 열은 행렬이 가지고 있는 차원공간으로 보아도 무방합니다. 따라서 low-rank approximations 은 행렬의 차원공간을 줄여서 데이터를 축소 하는 과정입니다.

 

 

 

Create original image

이미지 압축을 하는데 쓰일 원본 이미지를 만들겠습니다. 0또는 1값을 가지는 행렬을 이용하여 원하는 모양을 만들고 0또는 1이 서로 다른 색을 가지게 하기 CALL HEATMAPCONT문의 여러 옵션을 사용하였습니다. 0에서 1까지의 범위에서 파란색과 빨간색사이의 색을 가지게 옵션을 지정하였습니다.  

 

 

 

Singular Value Decomposition

이제 이미지를 표현하는데 쓰인 행렬을 특이값분해(SVD)해보겠습니다. CALL SVD문을 사용하여 특이값 분해를 하고 이때 만들어지는 대각원소 즉, 기존행렬의 특이값들을 열벡터D의 원소로 저장하겠습니다.


 

CALL SVD문으로 행렬을 특이값분해할 때 생성되는 대각원소들은 행렬의 열개수만큼 생성됩니다. 그 이유는 CALL SVD문이 행렬의 행이 열보다 크다는 가정을 하고 특이값분해를 하기 때문입니다. 하지만 실질적인 특이값들은 행과 열중 더 작은 쪽의 개수만큼 생성됩니다. 예로 쓰인 행렬의 경우 행의 개수가 더 적기 때문에 대각원소들 중 행개수인 8개만을 실제 특이값들로 보면 됩니다. 대각원소들 중 8번째값은 0까지 작아진 것을 확인하였습니다.

 

 

 

특이값들의 순서에 따라 변하는 특이값들의 크기를 CALL SERIES문을 통해 시각화해보겠습니다.

 


 

그래프로 시각화해본 결과 사실상 5번째 특이값부터 크기가 0아래로 떨어졌고 모양도 꺾이는 지점이기 때문에 5개의 특이값만으로도 상당히 기존의 이미지와 비슷한 이미지를 보일 것으로 예상됩니다. 그리고 7번째 특이값은 0과 상당히 가깝기 때문에 8개의 특이값 중 6개만 사용하여도 원본 이미지와 매우 흡사할 것으로 예상이 됩니다.

 

 

 

Image compression

SVDlow-rank approximations을 통해 이미지 압축을 해보겠습니다. 행렬의 Rank7에서 1까지 줄이면 원본 이미지에서 얼마나 달라지는지 알아보겠습니다.


 

Rank7에서 1로 변함에 따라 각각 낮은 순위 근사를 시켜 근사행렬A를 만듭니다. 원본 이미지와 같은 기준에서 이미지를 그리기 위해 근사행렬의 원소들을 0에서 1사이로 정규화 하여 행렬 B를 만들었습니다. 이렇게 정규화까지 완료한 근사행렬을 Call Heatmapcont 문을 이용하여 이미지화 하였습니다.


RANK=6, 7인 경우에는 원본 이미지와 거의 차이가 없었습니다. 그 이유는 6,7번째 특이값의 크기가 이미지에 눈에 띌 별화를 줄 정도로 크지 않았기 때문입니다.

 

 

 

나머지 Rank 5에서 1까지 낮은 순위 근사를 한 결과, 점점 원본 이미지와 차이가 나다가 Rank 3이하부터는 원본 이미지의 가장 큰 특징만 알아볼 정도까지 이미지 압축이 진행되었습니다.

 

 

 

 

마치며

오늘은 SVDlow-rank approximations를 이용하여 이미지 압축을 하는 방법에 대해 알아 보았습니다. low-rank approximations를 통한 이미지를 압축하면 점점 데이터가 가지는 특징만이 남게 되는데 이러한 이점을 활용한다면 이미지 압축 외에도 데이터에 존재하는 노이즈를 제거하는 데에도 효과적일 것 입니다.

 

 

 

 

Reference

https://blogs.sas.com/content/iml/2017/08/30/svd-low-rank-approximation.html#prettyPhoto

 

 
 
 
 
 [Mixed Model 4.2.1] Random Coefficient Models
 [SAS 프로그래밍] SAS/IML 로 시계열 그래프 그려보기 (CALL SERIES statement)