Как проецировать каждое изображение 28 × 28 на изображение 7 × 7 путем усреднения серого тона в каждом квадрате 4 × 4 в данных MNIST (R)? - PullRequest
0 голосов
/ 21 октября 2018

Данные MNIST содержат 785 столбцов, первый - это метка, а остальные - пиксели.

Я хочу уменьшить размеры каждого изображения до 7x7 путем усреднения серого тона в каждом подпространстве 4x4 вimage.

Как мне этого добиться?

Пример данных:

label v1 v2 v3....v784
1     0  0  13    100
3     9  0  200   0

Ответы [ 2 ]

0 голосов
/ 22 октября 2018
##img_dataset is MNIST rowmajor like image dataset
##nrow and ncol of images should be dividable by "windowsize"
apply_mean_filter <- function(img_dataset,image_x_y_size=28,windowsize=4,mc.cores=1){
require(parallel)
mclapply(1:nrow(img_dataset),function(img_idx){temp_data_mat <- matrix(img_dataset[img_idx,],ncol=image_x_y_size,nrow=image_x_y_size);return(sapply(0:((image_x_y_size/windowsize)-1), function(x) sapply(0:((image_x_y_size/windowsize)-1), function(y) mean(temp_data_mat[(x*windowsize+1):((x+1)*windowsize),(y*windowsize+1):((y+1)*windowsize)]))))},mc.cores=mc.cores)
}


MNIST <- as.matrix(train$x)#MNIST without labels
 mean_MNIST_list <- 
apply_mean_filter(MNIST,image_x_y_size=28,windowsize=4,mc.cores=2) ##return list of filtered images
0 голосов
/ 21 октября 2018
library(tensorflow)
datasets <- tf$contrib$learn$datasets
mnist <- datasets$mnist$read_data_sets("MNIST-data", one_hot = TRUE)
img <- matrix(mnist$train$images[1, ], 28, 28)

avg <- function(x) {
  output <- c()
  for (i in 0:(length(x)/4-1)){
    output <- c(output, mean(x[(1 + 4 * i):(4 * i  + 4)]))
  }
  return(output)
}

img <- apply(img, 2, avg)
img <- apply(img, 1, avg)
print(img)

#         [,1]       [,2]        [,3]       [,4]      [,5]       [,6] [,7]
#[1,] 0.000000 0.00000000 0.000000000 0.00000000 0.0000000 0.00000000    0
#[2,] 0.000000 0.00000000 0.023774512 0.08627452 0.0000000 0.00000000    0
#[3,] 0.264951 0.65612750 0.596078470 0.56985298 0.6960785 0.03333334    0
#[4,] 0.000000 0.00000000 0.006127452 0.19632354 0.7279412 0.30784316    0
#[5,] 0.000000 0.19411766 0.595833369 0.49632356 0.6409314 0.31446080    0
#[6,] 0.000000 0.03480392 0.000000000 0.00000000 0.7100491 0.05465687    0
#[7,] 0.000000 0.00000000 0.000000000 0.10318628 0.2573530 0.00000000    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...