brunch

You can make anything
by writing

C.S.Lewis

by 쩐시 Aug 10. 2021

R 프로그래밍 - PCA 차원축소(img)

완벽한 논문을 위한 R 프로그래밍 분석

R 언어로 참 많은 것을 할 수 있는 것 같습니다.

그 중에서 이미지의 화소를 조절하는 기능도 있어, 아래와 같이 실습 과정 공유합니다.


이 기능은 데이터 용량을 줄이는데 가장 최적의 이미지 화소를 선택하게 해줍니다 :)




1. 데이터 확인

대상이 될 그림을 JPEG로 저장한다

library (jpeg)

crete <- readJPEG('crete.jpg') # 내가 가장 좋아하는 그림을 구글에서 저장했다

class(crete) "array" # RGB 3차원이라는 의미 3*3

dim(crete)


2. RGB 데이터 분할 및 주성분 분석


r <- crete[,,1] # array에서 r에 해당하는 데이터

g <- crete[,,2]

b <- crete[,,3]


crete.r.pca <- prcomp(r, center = F) # r 데이터 주성분분석

crete.g.pca <- prcomp(g, center = F)

crete.b.pca <- prcomp(b, center = F)


rgb.pca <- list(crete.r.pca, crete.g.pca, crete.b.pca) # 분석 결과 rgb로 합침


3. 차원축소하여 JPG로 저장


pc <- c(2, 10, 50, 100, 300) # 총 5개의 이미지 파일이 저장된다


for (i in pc) {

 pca.image <- sapply(rgb.pca, function(j){

   compressed.img <- j$x[, 1:i] %*% t(j$rotation[, 1:i]) 

 }, simplify = 'array')

 writeJPEG(pca.image, paste('crete_pca_',i, '.jpeg', sep = ''))

}


4. 결과 # 2, 10, 50, 100, 300

: 50화소만으로도 충분한 효과를 낼 수 있다는 것을 알아냈다.



작가의 이전글 R프로그래밍 - 머신러닝 프로세스 정리
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari