我们可以使用
imager::cannyEdges
来获取边缘,然后将坐标放入数据框架中进行绘图。
library('ggplot2')
library('imager')
plot(boats)
![boats](https://istack.dev59.com/pUMOQ.webp)
img <- cannyEdges(boats)
plot(img)
![edges](https://istack.dev59.com/DBIX1.webp)
看起来img
是一个有四个维度的逻辑数组。
dim(img)
我只需要两个维度,因此我将舍弃其中的两个维度。
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)
现在可以绘制它了。
df <- data.frame(x = coords[,1], y = coords[,2])
ggplot(df, aes(x, -y)) +
geom_point()
![enter image description here](https://istack.dev59.com/r39Ju.webp)