Circle Detection

computer-vision

#1

Chào mọi người, Em đang gặp khó khăn nhận diện hình tròn trong bộ dữ liệu như hình dưới, mọi người cho em xin kinh nghiệm, cách xử lí vấn đề này với ạ. Mục tiêu là nhận diện được hình tròn như hình thứ 2 ạ. Em cảm ơn.

Capture Capture1


#2

Cái này sử dụng thuần xử lí ảnh có thể lấy được ra hình tròn như bạn muốn nha. Hướng dẫn sau nhằm mục đích đưa ra giải pháp cho bạn. Code viết vội nên sida chưa tối ưu nhé.

Đầu tiên bạn sử dụng threshold trong opencv để làm rõ hơn phần cần nhận dạng:

image = cv2.imread('image_test/test.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

_, thread_frame = cv2.threshold(gray,70, 150, cv2.THRESH_BINARY)

Kết quả sẽ có dạng kiểu như thế này:

thread_frame

Tiếp theo là sử dụng Canny trong opencv để nhận dạng các đường bao quanh

edged = cv2.Canny(thread_frame, 30, 200)

edged

Tiếp đến là sử dụng dilate và erode.

kernel = np.ones((11,11), np.uint8)

d_im = cv2.dilate(edged, kernel, iterations=1)

edged = cv2.erode(d_im, kernel, iterations=1)

edged_bw

Đến đây thì đã thấy rõ được phần mà bạn muốn nhận dạng. Tuy nhiên nó không còn là hình tròn nữa nên không dùng HoughCircles được. Mình sẽ dùng findContours để làm nốt phần còn lại

for contour in contours:
    (x,y),radius = cv2.minEnclosingCircle(contour)
    center = (int(x),int(y))
    radius = int(radius)

    if  500 < cv2.contourArea(contour) < 2000:
        cv2.circle(image, center, radius, (255, 255, 255), 1)

Kết quả cuối cùng đây:

image


#3

Cảm ơn bạn rất nhiều. Mình đã thử theo cách của bạn, kết quả rất tốt ở những ảnh cuối, nhưng ở những ảnh giữa(khoảng frame từ 291 trở đi) thì kết quả k rõ lắm. Mình thử chỉnh các parameters rồi vẫn chưa thành công. Bạn hướng dẫn mình thêm được không? Phía dưới là bộ dữ liệu của mình Cảm ơn bạn rất nhiều. https://drive.google.com/file/d/1AX0DeWeZyb-Dz31_UAsHSVCN8BgBJm_N/view?usp=sharing


#4

Cái này chắc phải mất thời gian nghiên cứu đó. Vì nhìn bằng mắt thường đã rất khó phân biệt được có hình tròn mà bạn muốn nhận dạng hay chưa. Khả năng cao là phải sử dụng thêm phần dự đoán và AI vào.


#5

Bạn có gợi ý nào hay sử dụng model nào k? Mình mới là beginner nên chưa thành thạo lắm. Thanks


#6

Mình chỉ có thể hỗ trợ được đến đây thôi. Mình cũng là người mới. Nhưng bạn cần nhiều dữ liệu hơn nữa để huấn luyện AI nhé. Với dữ liệu hiện tại thì mình chỉ support bạn xử lí ảnh ở những bức ảnh có sự khác biệt có thể thấy bằng mắt thường thôi.