r - 在R中查找svg图像的边缘(即笛卡尔坐标)?
问题描述
可以像这样识别图像的边缘:
library('ggplot2')
library('imager')
plot(boats)
img <- cannyEdges(boats)
plot(img)
但是假设我们想要对svg(下面以长颈鹿为例)做同样的事情,而不是 'boats' 对象,我们如何找到 svg 图像的边缘?
我尝试了明显的:
library(magick)
giraffe <- image_read_svg("http://steveharoz.com/research/isotype/icons/giraffe.svg")
plot(giraffe)
gimg <- cannyEdges(giraffe)
# Error in if (has.col) { : argument is of length zero
笔记
我最终想要做的是自动将 svg 格式的图像(如长颈鹿)转换为一组笛卡尔坐标,以便在 a 中进行散点图geom_point()
,如下所示:
library(datasauRus)
library(ggplot2)
datasaurus_dozen %>%
filter(dataset == "dino") %>%
ggplot(aes(x=x, y=y))+
geom_point()
最终目标是让长颈鹿变成geom_point()
像上面的恐龙一样
解决方案
这是 ImageMagick 命令行中的一种方法。(对不起,我不知道 R 等价物)
创建边缘图像。然后创建一个网格蒙版并将蒙版与边缘图像相乘以留下点。
输入:
convert giraffe.png -alpha extract -morphology edgeout diamond:1 \
\( -size 1x1 xc:black -size 1x1 xc:white +append +write mpr:tile1 +delete \) \
\( -size 1x1 xc:black -size 1x1 xc:white -append +write mpr:tile2 +delete \) \
\( -clone 0 -tile mpr:tile1 -draw "color 0,0 reset" \) \
\( -clone 0 -tile mpr:tile2 -draw "color 0,0 reset" \) \
\( -clone 1 -clone 2 -compose multiply -composite \) \
-delete 1,2 \
-compose multiply -composite -negate giraffe_edge_dots.png
结果:
调整蒙版黑色部分的大小以放置更多间距。
推荐阅读
- swift - 在 UITableView 数据上保存订单
- c# - 使用模型从 cshtml 调用函数到 cshtml.cs
- slider - 如何使用带有缩略图滑块的光滑滑块制作自定义滑块?
- javascript - 如何隐藏表格标题列
- javascript - 在生成表格以划分从 jquery 生成的意外代码时
- java - 事件驱动在 Spring MVC 中继续请求线程执行
- jquery - 如何使用jquery在按钮单击时显示和隐藏div
- java - 替换Java中的正则表达式匹配
- asp.net-core - 使用 grant_type 作为密码在 .net 核心 Web API 中验证并获取 Azure AD 令牌
- meteor - 我应该使用什么“逻辑查询运算符/s”来合并两个单独的查询?