2

Я пытаюсь найти монеты на разных изображениях и отметить их местоположение. Монеты всегда идеальные круги (не эллипсы), но они могут касаться или даже перекрываться. Here - это некоторые примеры изображений, а также результаты моих попыток (скрипт Python с использованием skimage и его выходов), но, похоже, он не работает хорошо.Найти монеты на изображении

Сценарий:

def edges(img, t): 
    @adapt_rgb(each_channel) 
    def filter_rgb(image): 
     sigma = 1 
     return feature.canny(image, sigma=sigma, low_threshold=t/sigma/2, high_threshold=t/sigma) 

    edges = color.rgb2hsv(filter_rgb(img)) 
    edges = edges[..., 2] 
    return edges 

images = io.ImageCollection('*.bmp', conserve_memory=True) 

for i, im in enumerate(images): 
    es = edges(im, t=220) 
    output = im.copy() 
    circles = cv2.HoughCircles((es*255).astype(np.uint8), cv2.cv.CV_HOUGH_GRADIENT, dp=1, minDist=50, param2=50, minRadius=0, maxRadius=0) 

    if circles is not None: 
     circles = np.round(circles[0, :]).astype("int") 

     for (x, y, r) in circles: 
      cv2.circle(output, (x, y), r, (0, 255, 0), 4) 
      cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1) 

    # now es is edges 
    # and output is image with marked circles 

Несколько примеров изображений, с обнаруженными краями и кругами:

Я использую осторожное края обнаружения & преобразования Хока, который является наиболее распространенный способ обнаружения кругов. Тем не менее, с теми же параметрами он почти ничего не находит на некоторых фотографиях и находит слишком много кругов на другом.

Можете ли вы дать мне какие-либо указания и предложения о том, как это сделать лучше?

+0

Я лично не знаю, но я однажды увидел этот вопрос: http://stackoverflow.com/questions/22460651/detecting-truck-wheels. Может быть, это может вам помочь? – JoJo

+0

@JoJo изображения в моей коллекции могут иметь неравномерную легкость, поэтому даже не рассматривали пороговое значение (которое используется в ответе). Тем не менее, попробуем (возможно, какую-то адаптивную версию). – aplavin

+1

houghcircles использует canny внутри. пожалуйста, используйте изображение в оттенках серого в качестве входных данных, а не краевое изображение! – Micka

ответ

1

Я закончил с использованием dlib's object detector, и это было очень хорошо. Детектор может быть легко применен для обнаружения любых объектов. Для некоторых связанных обсуждений см. the question topic on reddit.

1

Ммм, я бы сделал некоторые морфологические операции в Осторожные результаты, такие, как открытия и закрытия операций: http://en.wikipedia.org/wiki/Mathematical_morphology

Я также рекомендовал бы вам взглянуть на схему водораздела. Применяется непосредственно в градиент изображения, а затем преобразование Хафа на нем. http://en.wikipedia.org/wiki/Watershed_%28image_processing%29