Я пытаюсь извлечь координаты центра свернувшихся камней после того, как они были брошены ( Пример 1 и Пример 2 ), предпочтительно сохраненный как .csv.
Я использую R, так как мне удобнее, но решение на Python было бы замечательно, если бы оно работало лучше.
Мой код в основном основан на этих ресурсах ( это и это ), но он не работает идеально с точки зрения определения координат.Я хочу только большие красные / желтые круги (а не те, которые сгруппированы сверху или снизу).Я бы предпочел не обрезать там, где маленькие камни, так как мне нужны точные координаты изображения на будущее.
Текущий код группирует некоторые большие камни, которые расположены близко друг к другу, как в примере 2, показанном здесь , что делает центры неправильными, как здесь .Так что, хотя он обычно находит камни, он не получает их точно, и поэтому дает мне неправильные координаты.
Я также поставил свой код, но я не вкладывался в код - я хорошс любым решением работает, на любом языке!
library(dplyr)
library(imager)
library(ggplot2)
im <- load.image("https://i.stack.imgur.com/3tDtR.png")
d <- as.data.frame(im)
m <- sample_n(d,1e4) %>% lm(value ~ x*y,data=.)
im.c <- im-predict(m,d)
out <- threshold(im.c)
plot(out)
df <- as.data.frame(out)
out <- clean(out,3) %>% imager::fill(7)
plot(im)
highlight(out)
df <- (out %>% label) %>%
as.data.frame()
get.centers <- function(dt)
{
dt %>% subset(value>0) %>% dplyr::group_by(value) %>% dplyr::summarise(mx=mean(x),my=mean(y))
}
centers <- get.centers(df)
plot(im)
points(centers$mx,centers$my)