Я работаю над обнаружением клеток на микроскопических изображениях, как показано ниже. Часто появляются ложные контуры, которые рисуются из-за дефектов на предметных стеклах микроскопа, например, под легендой на рисунке ниже.
В настоящее время я использую это решение , чтобы очистить их,Вот основная идея.
# Create image of background
blank = np.zeros(image.shape[0:2])
background_image = cv2.drawContours(blank.copy(), background_contour, 0, 1, -1)
for i, c in enumerate(contours):
# Create image of contour
contour_image = cv2.drawContours(blank.copy(), contours, i, 1, -1)
# Create image of focal contour + background
total_image = np.where(background_image+contour_image>0, 1, 0)
# Check if contour is outside postive space
if total_image.sum() > background_image.sum():
continue
Это работает, как и ожидалось;если область total_image
больше, чем область background_image
, тогда c
должен находиться за пределами области интереса. Но рисовать все эти контуры невероятно медленно, а проверка тысяч контуров занимает часы. Есть ли более эффективный способ проверить, перекрываются ли контуры и не требует ли рисования контуров?