r - 选择点的邻域并将其转换为向量

标签 r image-processing machine-learning

我有一个数据,实际上是 256 x 256 矩阵形式的图像。我想选择点的邻域并将其转换为向量。然后应用一些聚类算法。我是 R 新手,需要一些代码方面的帮助。我创建了一个玩具数据集来展示我想做的事情。

d<- matrix(rbinom(8*8,1,0.5),8,8)
d
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    0    0    1    0    0    0    0    1
[2,]    1    1    1    0    1    1    1    1
[3,]    1    1    1    1    0    1    1    1
[4,]    0    0    1    1    1    1    1    0
[5,]    0    0    1    0    0    1    1    1
[6,]    1    0    0    0    0    0    1    0
[7,]    0    0    1    1    0    1    1    0
[8,]    1    1    0    1    1    0    1    0

从点 d[2,2] 开始,我想选择其周围 8 个点的邻域并将其转换为向量。因此对于 d[2,2] 这些点将是前 3 个 d[1,1],d[1,2],d[1,3],相邻左侧 d[2,1] 相邻右侧 d[2,3 ] 和底部 3 d[3,1]、d[3,2] 和 d[3,3]。如下:

     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    1    1    1
[3,]    1    1    1

现在将其转换为 R^9 中的向量,即 v1=(0,0,1,1,1,1,1,1,1)。然后,我想对不在矩阵边界上的所有点(即第一行和最后一行以及第一列和最后一列)执行此操作。我不知道如何继续,将不胜感激任何帮助。提前致谢。

最佳答案

您可以继续使用嵌套的 for 循环:

ddim <- dim(d) - 1
vect <- list()
for(i in seq(ddim[1])[-1]) {
    for(j in seq(ddim[2])[-1]) {
        vect <- c(vect, list(c(d[(i-1):(i+1), (j-1):(j+1)])))
    }
}

可能有优化的解决方案(嵌套 for 循环很糟糕),但如果您的数据负担不太重,那么这是可行的。

关于r - 选择点的邻域并将其转换为向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416472/

相关文章:

r - 如何将组行 append 到数据框中

r - 如何通过考虑边长在R中绘制图形

c++ - 如何在 C++ 中存储大矩阵

Python/OpenCV - 基于机器学习的 OCR(图像到文本)

python - 在逻辑回归中使用排名数据

r - 结合训练+测试数据并在 R 中运行交叉验证

r - 通过连接分配 data.table 行和列的子集

r - 如何在 R 中整理这个凌乱的数据集

python - 如何使用 scipy 的 affine_transform 对彩色图像进行任意仿射变换?

android - 如何在不模糊的情况下缩放图像?