Получить границы из файла png - PullRequest
0 голосов
/ 04 мая 2019

Мне интересно, как получить границы из этого вида изображения.

Например:

Я искал конвертирование некоторого изображения с использованием

image <- as(x, 'SpatialGridDataFrame')

Но это только даетмне специальные тяжелые изображения.

В этом случае, используя эти x_coord и y_coord, я смогу создать простой объект.

 x_coord <- c(16.48438,  17.49512,  24.74609, 22.59277, 16.48438)
 y_coord <- c(59.736328125, 55.1220703125, 55.0341796875, 
 61.142578125, 59.736328125)
 xym <- cbind(x_coord, y_coord)
 xym

 library(sp)
 p = Polygon(xym)
 ps = Polygons(list(p),1)
 sps1 = SpatialPolygons(list(ps))
 plot(sps1)

Я ожидаю получить набор x_coord и y_coord для круга png, добавленного в качестве примера.

1 Ответ

1 голос
/ 06 мая 2019

Вы можете использовать подход pixsets (в пакете imager ), чтобы идентифицировать края окружности на данном изображении следующим образом:

px <- im > 0.6 #Select pixels of the circle (i.e., those with high luminance)
plot(px)

Теперь, когда вы строите график px, вы получаете следующее:

pixels

Чтобы получить координаты пикселей, используйте следующее:

coord <- where(px)
head(coord)

, который дает вам что-то вроде этого:

#  x y cc
#1 1 1  1
#2 2 1  1
#3 3 1  1
#4 4 1  1
#5 5 1  1
#6 6 1  1

Чтобы получить границы, вы используете следующее:

boundaries <- boundary(px)
boundaries.xy <- where(boundaries)
head(boundaries.xy)

, что дает вам следующее:

#    x  y cc
#1 103 64  1
#2 102 65  1
#3 104 65  1
#4 103 66  1
#5 185 71  1
#6 184 72  1

Вы можете даже сохранить пиксели круга следующим образом:

px_image <- as.cimg(px)
save.image(px_image, "px_image.jpg")

Надеюсь, это поможет.

...