6

Tôi đã viết mã để chuyển đổi hough và nó hoạt động tốt. Ngoài ra tôi có thể cắt vị trí mắt của một khuôn mặt. Bây giờ tôi muốn phát hiện mống mắt của hình ảnh cây trồng bằng cách áp dụng phép biến đổi Hough (cvHoughCircle). Tuy nhiên khi tôi thử quy trình này, hệ thống không thể tìm thấy bất kỳ vòng tròn nào trên hình ảnh.Biến đổi hough để phát hiện iris trong OpenCV

Có thể, lý do là, có tiếng ồn trong hình ảnh nhưng tôi không nghĩ đó là lý do. Vì vậy, làm thế nào tôi có thể phát hiện mống mắt? Tôi có mã nhị phân có lẽ tôi có thể sử dụng nó, nhưng Tôi không biết phải làm sao?

Nếu có ai giúp tôi thực sự đánh giá cao nó. thx :)

Trả lời

1

Bạn nói rằng với số nhị phân, bạn nhận được mống mắt màu trắng tinh khiết: đó không phải là thứ bạn muốn có. Sử dụng một cái gì đó như cvCanny để có được chỉ là cạnh của mống mắt.

+1

thx nó hoạt động:)) – iva123

0

Bạn có phát hiện các cạnh chính xác không?
Bạn có thể hiển thị hình ảnh nhị phân và nhìn thấy mống mắt rõ ràng không?

biến đổi háng tròn thường có cửa sổ bán kính (nếu không bạn đang tìm kiếm không gian giải pháp 3d) bạn có đặt cửa sổ thành giá trị hợp lý không?

+0

Đối với chuyển đổi hough, tôi có thể phát hiện vòng tròn rất tốt Đối với hình ảnh nhị phân, vâng tôi có thể thấy Iris rất tốt (được hiển thị như một chấm trắng trên khuôn mặt màu đen) nhưng các cạnh của nó là một số méo Đối nhận xét cuối cùng, tôi không hiểu:) Bạn có đề xuất hình ảnh được cắt lớn hơn không? – iva123

+0

Không quen thuộc với cvHoughCircle - nhưng nói chung bạn phải cung cấp cho thuật toán tìm vòng tròn hough một phạm vi (cửa sổ) của bán kính để tìm kiếm. Nếu không, nó phải khám phá một không gian giải pháp 3d x/y/bán kính để tìm ra khả năng. –

+0

Không cần thiết, nếu nó sử dụng thông tin gradient thì bộ đếm 2D là đủ. – WebMonster

-2
void houghcircle() 
{ 
    //cvSmooth(graybin,graybin, CV_GAUSSIAN, 5,5); 
    CvMemStorage* storage = cvCreateMemStorage(0); 

    // smooth it, otherwise a lot of false circles may be detected 
    CvSeq* circles = cvHoughCircles(edge, storage, CV_HOUGH_GRADIENT, 5, edge->height/4,1,1,2,50, 70); 
    int i; 
    for(i = 0; i < circles->total; i++) 
    { 
     float* p = (float*)cvGetSeqElem(circles, i); 
     cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), 2, CV_RGB(0,255,0), -1, 2, 0); 
     cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 1, 2, 0); 
     cvNamedWindow("circles", 1); 
     cvShowImage("circles", img); 
     cvWaitKey(); 
    } 
}