我们可以使用
imager::cannyEdges
要获取边,请将坐标放在数据框中进行绘制。
library('ggplot2')
library('imager')
plot(boats)
img <- cannyEdges(boats)
plot(img)
看起来像
img
是具有4个维度的逻辑阵列。
dim(img)
# [1] 256 384 1 3
我只想要两个维度,所以我将丢弃其中的两个维度。
img <- img[, , 1, 1]
img[1:8, 1:8]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
which
可以将此矩阵转换为坐标列表。
coords <- which(img, arr.ind = T)
head(coords)
# row col
# [1,] 255 1
# [2,] 255 2
# [3,] 255 3
# [4,] 255 4
# [5,] 255 5
# [6,] 255 6
现在可以绘制它了。
df <- data.frame(x = coords[,1], y = coords[,2])
ggplot(df, aes(x, -y)) +
geom_point()