Вставьте сложенное изображение в пустую матрицу, используя перекрытие в R - PullRequest
0 голосов
/ 04 мая 2020

У меня есть папка с 299 изображениями размером 128 * 128 пикселей. Я хотел бы собрать эти 299 изображений, чтобы создать большое изображение размером 1536 * 896 пикселей (эта яркость получается из большого изображения). Но я хотел бы собрать с перекрытием разрыва = 64 пикселей, как показано на рисунке. Изображение j + 1 частично стирает изображение j.

enter image description here

Я не знаю, как это сделать, используя изображение, поэтому я хотел бы выполнить его через матрицу , Здесь шаг:

  1. загрузить большое изображение 1536 * 896 пикселей
  2. создать пустую матрицу того же размера (img_matrix)
  3. загрузить 299 изображений размер 128 * 128 пикселей
  4. рассчитать количество итераций для вставки для строки "Number_R" ​​и столбца "Number_ C" в зависимости от зазора (здесь 64 пикселя)
  5. Наконец, в oop загрузить каждое изображение размером 128 * 128 пикселей и вставить его в пустую матрицу (img_matrix)

У меня следующая ошибка:

Error in img_matrix[ROW, COL] <- l : 
  number of items to replace is not a multiple of replacement length

Я думаю, это потому, что тусклый l. Для RGB есть 3 слоя, а моя матрица всего 1.

> dim(l)
[1] 128 128   3

Код:

##############################################################
##############################################################
##clean Global Environment
# rm(list=ls())
gc(reset=TRUE)
plot.new()
memory.size(TRUE)

  ##############################################################
  ##############################################################
  ##############################################################
  ##############################################################
  library(raster)
  #load picture of size 1536*896 pixels
  setwd("C:/Users/Mezeix/Desktop/AI defect/")
  img_path <- "image.jpeg"

  size = 128
  gap <- 64

  raster <- brick(img_path, package="raster")

  #Dim of the empty matrix
  nrow <- dim(raster)[1]
  ncol <- dim(raster)[2]

  #creation of the empty matrix with same dim (1536*896 pixels)
  img_matrix <- matrix(, nrow = nrow, ncol = ncol)

  ##############################################################
  ##############################################################
# loading of the cropped images of size 128 x 128 pixels
  folder <- "C:/Users/Mezeix/Desktop/AI defect/Image"
  jpeg <- list.files(folder, full.names=TRUE) 

  #number of time to paste cropped image
  Number_R <- nrow/gap-1
  Number_C <- ncol/gap-1 
  total <- Number_R * Number_C

  for(idx in gtools::mixedsort(jpeg)){
  l <-stack(idx)

  #i for row
  #j for col
  for (i in (0:(Number_R))) {
    for(j in (0:(Number_C))){
      ROW <- seq((gap*i)+1, (gap*i)+size)
      COL <- seq((gap*j)+1, (gap*j)+size)
      img_matrix[ROW, COL] <- l
    }
  }
}
##############################################################
##############################################################

Как это решить?

Нужно ли создавать 3 матрицы для R, G и B, а затем вставьте сложенное маленькое изображение, l, 3 раза: l [1 ,,]; l [, 1,] и l [,, 1] и, наконец, собрать, используя стек?

...