# 色差信号の解像度を変えて間引く library(imager) # 色差信号の解像度を変える関数(解像度1/f^2倍) reduce <- function(im.rgb, f) { ux <- (width(im.rgb) %/% f) * f uy <- (height(im.rgb) %/% f) * f # 画像サイズをfの整数倍にしてRGBからYCbCrに変換 im.ycbcr <- RGBtoYCbCr(imsub(im.rgb, x <= ux, y <= uy)) # 色差信号の平均化 a <- array(im.ycbcr, dim(im.ycbcr)) for (x in seq(1, ux, f)) { sx <- x : (x + (f - 1)) for (y in seq(1, uy, f)) { sy <- y : (y + (f - 1)) for (cc in c(2, 3)) { # CbCrのみ abar <- mean(a[sx, sy, 1, cc]) a[sx, sy, 1, cc] <- abar } } } # YCbCrからRGBに変換 return(YCbCrtoRGB(as.cimg(a))) } # 元の画像 im <- boats # 色差信号の解像度1/f^2倍 f <- 2 # 間引いた画像 im.new <- reduce(im, f) layout(t(1 : 2)) plot(im, rescale = FALSE, main = "元の画像") plot(im.new, rescale = FALSE, main = "間引いた画像") layout(1)