复杂矩阵处理

时间:2019-04-12 08:32:07

标签: r image matrix

我的数据看起来像这样,X和Y是缺陷的中心。我要在矩阵中分配缺陷。

defect_ID X Y X_range Y_range
1         2 3  5        0
2         7 12 1        2

我创建了一个只有0的矩阵200 * 200。我想通过以下方式将1放入矩阵:

每个坐标X Y将为1。例如,我们可以看到 ID 1 ,该ID将1分配给我的坐标(2,3)单元格。 ID 2 将允许1进入我的单元格(7,12)。

我已经用代码完成了

img<-matrix(0,200,200)
img[cbind(data[,X],data[,Y])]<-1

现在我想做一些棘手的事情。 我使用了一个definition_ID,并希望使用我的X_range和Y_range值将值1分配给该缺陷周围的所有点。对于1个缺陷,我们取中心(X,Y)并使用X和Y_range进行移动。

伪代码

for defect_ID 1
img[X,Y]<-1
img[X+ 1:X_range,Y]<-1
img[X,Y+1:Y_range]<-1


例如,如果我们查看ID 1,我想为点(2,3),(3,3),(4,3),(5,3),(6,3)分配1, (7,3)

如果我有X_range和Y_range> 1。 X Y将成为中心。然后我只想一次朝一个方向移动。 例如,对于ID 2,我想为我的单元格(7,12),(8,12),(7,13),(7,14)分配1

2 个答案:

答案 0 :(得分:0)

img = matrix(0,20,15)
for (i in 1:nrow(data)){
  sx = data$X[i]:(data$X[i]+data$Y_range[i])
  sy = data$Y[i]:(data$Y[i]+data$X_range[i])

  img[sx,sy] = 1
}

这至少应该在第一部分起作用。我对第二个不太清楚。如果范围是奇数怎么办?我应该选择哪个方向?

答案 1 :(得分:0)

这里是一种选择:

data <- tibble(defect_ID=c(1,2),X=c(2,7),Y=c(3,12),X_range=c(5,1),Y_range=c(0,2))

输入数据:

> data
# A tibble: 2 x 5
  defect_ID     X     Y X_range Y_range
      <dbl> <dbl> <dbl>   <dbl>   <dbl>
1         1     2     3       5       0
2         2     7    12       1       2

创建矩阵:

data_mat <- matrix(0,200,200)

分配:

for (i in 1:2) { # Change this to the length of your dataset
  data_mat[data[[i,'X']]:data[[i,'X']]+data[[i,'X_range']],data[[i,'Y']]] <- 1
  data_mat[data[[i,'X']],data[[i,'Y']]:data[[i,'Y']]+data[[i,'Y_range']]] <- 1
}

输出:

> data_mat[1:10,1:14]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
 [1,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
 [2,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [3,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [4,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [5,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [6,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [7,]    0    0    1    0    0    0    0    0    0     0     0     1     1     1
 [8,]    0    0    0    0    0    0    0    0    0     0     0     1     0     0
 [9,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
[10,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0