완벽한 논문을 위한 R 프로그래밍 분석
R 언어로 참 많은 것을 할 수 있는 것 같습니다.
그 중에서 이미지의 화소를 조절하는 기능도 있어, 아래와 같이 실습 과정 공유합니다.
이 기능은 데이터 용량을 줄이는데 가장 최적의 이미지 화소를 선택하게 해줍니다 :)
1. 데이터 확인
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화소만으로도 충분한 효과를 낼 수 있다는 것을 알아냈다.