如何创建图像立方体

时间:2018-12-19 15:18:22

标签: arrays r image spectrum

我是R的新手,并希望将其用于数据分析和可视化。

我有一个具有约38575行(像素)和600列的数据框。每列均包含分析物的强度,从而得出每个像素的光谱。 我也有每个像素的x和y坐标来创建数据立方体(数组),在某种意义上,如果我说image_cube [1,1,]给我第一个光谱,如果我说image_cube [,, 1],我得到所有像素的图像,显​​示第一分析物的强度。 并非所有像素都具有光谱,它们也不在数据帧中,而是应该为空像素(黑色)。

编辑

我尝试使用以下代码,其中ROI数据为大数据框,并sample_overview每个像素包含x和y坐标的变量:

ROI_cube <- array(rep(0, 311*381*603), dim=c(311, 381, 603))   
for (i in 1:dim(ROI_data)[1]) {
  ROI_cube[sample_overview[i,2], sample_overview[i,1],] = ROI_data[i,]
}

但是出现以下错误:

Error in ROI_cube[sample_overview[i, 1], sample_overview[i, 2], ] <- ROI_data[i,  : 
  incorrect number of subscripts

1 个答案:

答案 0 :(得分:0)

如果我正确地回答了您的问题,则希望通过已知的x-y坐标将Spectra的2D数据框映射到3D数组。 如果这就是您想要的,那么您就不需要任何包,只需将数据框中的数据映射到Array

  #Simulate some gaussian spectra
  set.seed(1234)
  simSpec <- function()
  {
    x <- 1:400
    y <- stats::dnorm(x,mean=runif(1,min=0,max=400),sd=runif(1,min=2,max=50))
    return(y)
  }

  #build a dataframe
  data <- data.frame(matrix(data=NA,nrow=400,ncol=20))
  for(i in 1:20) data[,i] <- simSpec()

  #assume data is ordered in ascending x/y pixels 
  #=> data[,1] -> x=1, y=1 ; data[,2] -> x=2, y=1; data[,length(x)] -> x=length(x), y=y; 
  #data[,m+(n-1)*length(x)] -> x=m, y=n

  Array <- array(data=t(data),dim=c(5,4,400)) #Build Array of format [X,Y,NSpectralVariables]
                                              #transpose dataframe because default order is to first increase Columnnumber

  plot(Array[1,1,],type="l") # Plot Spectrum at x=1, y=1
  contour(Array[,,1]) #Contour Intensity at first Analyte