Tôi đang làm việc trên thuật toán nhận dạng iris xử lý these loại hình ảnh thành mã duy nhất cho mục đích nhận dạng và xác thực.Cải tiến biến đổi thông tư
Sau khi lọc, thông minh thresholding, sau đó tìm các cạnh trong hình ảnh, bước tiếp theo rõ ràng là để phù hợp với vòng tròn cho học sinh và mống mắt. Tôi đã nhìn xung quanh các kỹ thuật để sử dụng là chuyển đổi Hough tròn. Đây là mã cho việc triển khai của tôi. Xin lỗi về các tên biến bí ẩn.
print "Populating Accumulator..."
# Loop over image rows
for x in range(w):
# Loop over image columns
for y in range(h):
# Only process black pixels
if inp[x,y] == 0:
# px,py = 0 means pupil, otherwise pupil center
if px == 0:
ra = r_min
rb = r_max
else:
rr = sqrt((px-x)*(px-x)+(py-y)*(py-y))
ra = int(rr-3)
rb = int(rr+3)
# a is the width of the image, b is the height
for _a in range(a):
for _b in range(b):
for _r in range(rb-ra):
s1 = x - (_a + a_min)
s2 = y - (_b + b_min)
r1 = _r + ra
if (s1 * s1 + s2 * s2 == r1 * r1):
new = acc[_a][_b][_r]
if new >= maxVotes:
maxVotes = new
print "Done"
# Average all circles with the most votes
for _a in range(a):
for _b in range(b):
for _r in range(r):
if acc[_a][_b][_r] >= maxVotes-1:
total_a += _a + a_min
total_b += _b + b_min
total_r += _r + r_min
amount += 1
top_a = total_a/amount
top_b = total_b/amount
top_r = total_r/amount
print top_a,top_b,top_r
Điều này được viết bằng python và sử dụng Thư viện hình ảnh Python để xử lý hình ảnh. Như bạn có thể thấy, đây là một phương pháp bạo lực rất ngây thơ của việc tìm kiếm các vòng tròn. Nó hoạt động, nhưng phải mất vài phút. Ý tưởng cơ bản là vẽ các vòng tròn từ rmin đến rmax bất cứ nơi nào có một pixel đen (từ đập và phát hiện cạnh), việc xây dựng một mảng tích lũy số lần vị trí trên hình ảnh được "bình chọn". Cho dù x, y và r có nhiều phiếu bầu nhất là vòng tròn quan tâm. Tôi đã cố gắng sử dụng thực tế là mống mắt và học sinh có cùng một trung tâm (các biến số và rb) để giảm một số độ phức tạp của vòng lặp r, nhưng phát hiện học sinh mất quá lâu đến mức không quan trọng.
Bây giờ, rõ ràng việc triển khai của tôi rất ngây thơ. Nó sử dụng một không gian tham số ba chiều (x, y, và r), mà không may làm cho nó chạy chậm hơn là chấp nhận được. Tôi có thể thực hiện những cải tiến nào? Có cách nào để giảm điều này thành không gian tham số hai chiều không? Có cách nào hiệu quả hơn để truy cập và thiết lập pixel mà tôi không biết?
Lưu ý phụ, có bất kỳ kỹ thuật nào khác để cải thiện thời gian chạy tổng thể của thuật toán này mà tôi không biết? Chẳng hạn như các phương pháp để ước tính bán kính tối đa của học sinh hoặc mống mắt?
Lưu ý: Tôi cũng đã cố gắng sử dụng OpenCV cho điều này, nhưng tôi không thể điều chỉnh các thông số đủ chính xác.
Hãy cho tôi biết nếu có bất kỳ thông tin nào khác mà bạn cần.
LƯU Ý: Một lần nữa tôi hiểu sai mã của riêng mình. Về mặt kỹ thuật là 5 chiều, nhưng vòng lặp 3 chiều x, y, r chỉ hoạt động trên các pixel đen.
Tôi biết rằng bằng cách loại bỏ hoặc đơn giản hóa vòng lặp R, vấn đề sẽ giảm đáng kể. Vấn đề là tôi không biết cách đơn giản hóa vòng lặp. Tôi đã cố gắng đơn giản hóa việc phát hiện mống mắt bằng cách hạn chế trung tâm của nó ở gần trung tâm của học sinh, nhưng điều đó không giúp tôi tìm ra học trò. Nếu có một số cách để ước tính giới hạn và vị trí của học trò (như bạn đã nói), điều đó sẽ giải quyết được một số vấn đề, nhưng vị trí, vị trí và kích thước có thể thay đổi nhiều đến mức tôi không biết mình sẽ làm như thế nào cái đó. –
Có lẽ có giới hạn về kích thước chỉ từ vị trí của máy ảnh và loại ống kính? Nếu học sinh chỉ 3-4 pixel thì bạn có thể sẽ không tìm thấy nó và nó không thể cao hơn một nửa chiều cao của ảnh –