Я пытаюсь определить большие желтые и красные круги (не маленькие внизу) с помощью scikit.Кажется, он очень точен для красных кругов (после фильтрации по большим радиусам), но он не может обнаружить желтые круги.
То, что я пробовал, на основе это .Меня интересуют только массивы x, y и radius, поэтому коду не нужно изображение с наложением кругов.
Я попробовал три метода в примере scikit, но нашелdoh (определитель Гессиана) работал лучше всего, по крайней мере, для определения красных кружков, так как другие 2 метода не работали для них.
Я также пытался использовать scikit круги Хафа из здесь , но та же проблема существует, когда он не обнаруживает желтые кружки.
from skimage import data, io
from skimage.feature import blob_doh
from skimage.color import rgb2gray
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
image = io.imread("2-9.jpg")
image_gray = rgb2gray(image)
blobs_doh = blob_doh(image_gray, max_sigma=30, threshold=.01)
df_doh = pd.DataFrame(blobs_doh[:, :], columns=["y", "x", "radius"])
df_doh.to_csv('doh.csv')
Затем я импортировал данные в виде csv и нанес на график, используя R (чтобы показать точность)
df <- fread('doh.csv')
library(imager)
im <- load.image("2-9.jpg")
plot(im)
points(df$x, df$y)
df_filtered <- filter(df, radius >= 4.22) #radius of any less gives too many points
plot(im)
points(df_filtered$x, df_filtered$y)