Найти ребра (т.е. декартовы координаты) изображения SVG в R? - PullRequest
4 голосов
/ 26 апреля 2020

Можно идентифицировать края изображения примерно так :

enter image description here

library('ggplot2')
library('imager')

plot(boats)
img <- cannyEdges(boats)
plot(img)

Но предположим, что вместо объект 'boats', мы хотим сделать то же самое с svg (жираф как пример ниже), как мы можем найти края изображения svg?

enter image description here

Я попробовал очевидное:

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 (например, жираф) в набор декартовых координат для рассеяния в geom_point(), например:

enter image description here

library(datasauRus)
library(ggplot2)

datasaurus_dozen %>% 
  filter(dataset == "dino") %>% 
  ggplot(aes(x=x, y=y))+
  geom_point()

Конечная цель - получить жирафа в geom_point(), как динозавр выше

1 Ответ

2 голосов
/ 26 апреля 2020

Вот один из способов в командной строке ImageMagick. (Извините, я не знаю эквивалент R)

Создание изображения края. Затем создайте маску сетки и умножьте маску на изображение края, чтобы оставить точки.

Ввод:

enter image description here

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


Результат:

enter image description here

Отрегулируйте размер черных частей маски, чтобы увеличить расстояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...