Я пытаюсь найти монеты на разных изображениях и отметить их местоположение. Монеты всегда идеальные круги (не эллипсы), но они могут касаться или даже перекрываться. 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
Несколько примеров изображений, с обнаруженными краями и кругами:
Я использую осторожное края обнаружения & преобразования Хока, который является наиболее распространенный способ обнаружения кругов. Тем не менее, с теми же параметрами он почти ничего не находит на некоторых фотографиях и находит слишком много кругов на другом.
Можете ли вы дать мне какие-либо указания и предложения о том, как это сделать лучше?
Я лично не знаю, но я однажды увидел этот вопрос: http://stackoverflow.com/questions/22460651/detecting-truck-wheels. Может быть, это может вам помочь? – JoJo
@JoJo изображения в моей коллекции могут иметь неравномерную легкость, поэтому даже не рассматривали пороговое значение (которое используется в ответе). Тем не менее, попробуем (возможно, какую-то адаптивную версию). – aplavin
houghcircles использует canny внутри. пожалуйста, используйте изображение в оттенках серого в качестве входных данных, а не краевое изображение! – Micka