2015-05-11 4 views
4

Я искал долгое время, что может быть неправильно, но я не очень понимаю влияние параметров и предварительную обработку Я не могу опубликовать изображение, но на очень четкой фотографии евро, программа распознает некоторые круги, а не некоторые другие , даже безупречность такая же ясная, как и другие.OpenCV Python, почему Hough Circle Transform не находит все круги?

Вот мой код: «$»

import cv2 
import numpy as np 

filename = r'C:\Users\roseline\Desktop\piecefacile.jpg' 
img = cv2.imread(filename) 
output = img.copy() 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #BGR donnant GRAY 


circles = cv2.HoughCircles(gray, cv2.cv.CV_HOUGH_GRADIENT,1, 70, 200, 100) 


if circles is not None: 
circles = np.round(circles[0,:]).astype("int") #convertit en entier les données 

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

cv2.imshow("2015_TIPE_LE_DEM", np.hstack([img, output])) 

cv2.waitKey(0) 

Извините за неприятности, я хотел бы кто-то может мне помочь и поделиться своими знаниями я лишенное.

+0

отправьте изображение с обнаруженными кругами, отмеченными контурными линиями. Или лучше, разместите свою фотографию где-нибудь, например, picasa – Moritz

+0

Возможно, вы установили минимальное расстояние слишком высоко. Кроме того, вы можете снизить порог. Правильно ли вы установили минимальный и максимальный радиусы? Если ваше исходное изображение шумно или, например, вы получили данные с помощью микроскопического анализа, я бы попытался улучшить метод сбора. Кроме того, если вы приобретаете много изображений, убедитесь, что они выглядят одинаково, например, аналогичные уровни яркости и т. Д. – Moritz

+0

Спасибо за ваш быстрый ответ! На веб-сайте не было прав на загрузку изображения, но я сделал эту ссылку http://imageshack.com/a/img540/2425/Hy5rB3.jpg –

ответ

0

Похоже, вы устанавливаете минимальный и максимальный радиус своих монет неправильно. Алгоритм не обнаруживает меньшие, потому что он не ищет их, и он находит ложные положительные удары, потому что вы устанавливаете низкую величину и максимальный радиус.

Посмотрите на this Tutorial и the documentation и играйте с параметрами min_radius и max_radius (сделайте оба меньших). Вы можете заранее измерить радиус монет (в пикселях).

Если вы все еще получаете положительные удары, играйте с параметрами param1 и param2. Если вы хотите автоматизировать это, используйте кросс-корреляцию.

Было бы интересно увидеть ваше изображение в оттенках серого. Если ваши данные в реальном мире просты, как изображение монеты, вам действительно повезло. Во многих случаях самое сложное - избавиться от шума.

Смежные вопросы