Câu hỏi Xử lý hình ảnh: Cải tiến thuật toán cho nhận dạng 'Coca-Cola Can'


Một trong những dự án thú vị nhất mà tôi từng làm trong vài năm qua là một dự án về đang xử lý hình ảnh. Mục tiêu là phát triển một hệ thống để có thể nhận ra Coca-Cola 'lon' (lưu ý rằng tôi đang nhấn mạnh từ 'lon', bạn sẽ thấy tại sao trong một phút). Bạn có thể thấy một mẫu bên dưới, có thể được nhận dạng trong hình chữ nhật màu xanh lục với quy mô và luân chuyển.

Template matching

Một số hạn chế đối với dự án:

  • Nền có thể rất ồn ào.
  • Các có thể có thể có bất kỳ tỉ lệ hoặc là Vòng xoay hoặc thậm chí định hướng (trong giới hạn hợp lý).
  • Hình ảnh có thể có một số mức độ mờ (đường nét có thể không hoàn toàn thẳng).
  • Có thể có các chai Coca-Cola trong hình ảnh và thuật toán chỉ nên phát hiện có thể!
  • Độ sáng của hình ảnh có thể thay đổi rất nhiều (vì vậy bạn không thể dựa quá nhiều vào việc phát hiện màu).
  • Các có thể có thể bị che khuất một phần ở hai bên hoặc giữa và có thể ẩn một phần đằng sau một chai.
  • Có thể không có có thể ở tất cả trong hình ảnh, trong trường hợp đó bạn đã không tìm thấy gì và viết một thông điệp nói như vậy.

Vì vậy, bạn có thể kết thúc với những điều phức tạp như thế này (trong trường hợp này có thuật toán của tôi hoàn toàn thất bại):

Total fail

Tôi đã làm dự án này một thời gian trước đây, và đã có rất nhiều niềm vui làm điều đó, và tôi đã có một thực hiện phong nha. Dưới đây là một số chi tiết về việc triển khai của tôi:

Ngôn ngữ: Xong bằng C ++ OpenCV thư viện.

Sơ chế: Đối với hình ảnh được xử lý trước, tức là chuyển hình ảnh thành dạng thô hơn để cung cấp cho thuật toán, tôi đã sử dụng 2 phương pháp:

  1. Thay đổi miền màu từ RGB thành HSV và lọc dựa trên màu sắc "đỏ", độ bão hòa trên ngưỡng nhất định để tránh các màu tương tự như màu cam và lọc giá trị thấp để tránh tông màu tối. Kết quả cuối cùng là một hình ảnh màu đen và trắng nhị phân, trong đó tất cả các pixel trắng sẽ đại diện cho các pixel khớp với ngưỡng này. Rõ ràng vẫn còn rất nhiều crap trong hình ảnh, nhưng điều này làm giảm số lượng kích thước bạn phải làm việc với. Binarized image 
  2. Lọc tiếng ồn bằng cách sử dụng lọc trung bình (lấy giá trị pixel trung bình của tất cả các hàng xóm và thay thế pixel bằng giá trị này) để giảm nhiễu.
  3. Sử dụng Bộ lọc dò tìm Canny Edge để có được các đường nét của tất cả các mục sau 2 bước tiền lệ. Contour detection

Thuật toán: Bản thân thuật toán tôi chọn cho tác vụ này được lấy từ điều này cuốn sách tuyệt vời về tính năng trích xuất và được gọi là Generalized Hough Transform (khá khác với Hough Transform thông thường). Về cơ bản nó nói một vài điều:

  • Bạn có thể mô tả một đối tượng trong không gian mà không biết phương trình phân tích của nó (đó là trường hợp ở đây).
  • Nó có khả năng chống biến dạng hình ảnh như mở rộng quy mô và xoay vòng, vì nó về cơ bản sẽ kiểm tra hình ảnh của bạn cho mọi kết hợp yếu tố tỷ lệ và hệ số xoay vòng.
  • Nó sử dụng một mô hình cơ bản (một mẫu) mà thuật toán sẽ "học".
  • Mỗi điểm ảnh còn lại trong hình ảnh đường viền sẽ bỏ phiếu cho một pixel khác mà được cho là trung tâm (về mặt trọng lực) của đối tượng của bạn, dựa trên những gì nó đã học được từ mô hình.

Cuối cùng, bạn kết thúc với một bản đồ nhiệt của các phiếu bầu, ví dụ ở đây tất cả các điểm ảnh của đường bao sẽ có thể bỏ phiếu cho trung tâm hấp dẫn của nó, vì vậy bạn sẽ có nhiều phiếu bầu trong cùng một pixel tương ứng với trung tâm, và sẽ thấy một đỉnh trong bản đồ nhiệt như sau:

GHT

Một khi bạn có, một heuristic dựa trên ngưỡng đơn giản có thể cung cấp cho bạn vị trí của pixel trung tâm, từ đó bạn có thể lấy được tỷ lệ và xoay và sau đó vẽ hình chữ nhật nhỏ của bạn xung quanh nó (quy mô cuối cùng và hệ số xoay sẽ rõ ràng là tương đối với mẫu gốc). Về lý thuyết ít nhất ...

Các kết quả: Bây giờ, trong khi cách tiếp cận này hoạt động trong các trường hợp cơ bản, nó thiếu nghiêm trọng ở một số khu vực:

  • Nó là cực kỳ chậm! Tôi không nhấn mạnh điều này. Gần như một ngày là cần thiết để xử lý 30 hình ảnh thử nghiệm, rõ ràng là vì tôi có một yếu tố nhân rộng rất cao để xoay và dịch, vì một số lon rất nhỏ.
  • Nó đã hoàn toàn bị mất khi chai trong hình ảnh, và vì lý do nào đó hầu như luôn luôn tìm thấy chai thay vì lon (có lẽ vì chai lớn hơn, do đó có nhiều pixel hơn, do đó có nhiều phiếu hơn)
  • Các hình ảnh mờ cũng không tốt, vì các phiếu bầu đã kết thúc bằng pixel tại các vị trí ngẫu nhiên xung quanh trung tâm, do đó kết thúc bằng một bản đồ nhiệt rất ồn ào.
  • Phương sai trong dịch và xoay đã đạt được, nhưng không theo định hướng, có nghĩa là một cái không thể trực tiếp đối diện với mục tiêu của máy ảnh không được nhận ra.

Bạn có thể giúp tôi cải thiện riêng thuật toán, sử dụng độc quyền OpenCV các tính năng, để giải quyết bốn cụ thể vấn đề được đề cập?

Tôi hy vọng một số người cũng sẽ học được điều gì đó từ nó, sau khi tất cả tôi nghĩ rằng không chỉ những người đặt câu hỏi nên học. :)


1392
2018-04-16 04:23


gốc


Có thể nói rằng câu hỏi này phù hợp hơn tại dsp.stackexchange.com, hoặc stats.stackexchange.com, và bạn chắc chắn cũng nên cân nhắc hỏi lại tại các trang đó. - ely
Điều đầu tiên cần làm ở đây là phân tích tại sao các trường hợp thất bại khác nhau đang xảy ra. Ví dụ: cô lập ví dụ về các địa điểm nơi chai giành được, nơi hình ảnh mờ, v.v ... và thực hiện một số phân tích thống kê để tìm hiểu sự khác biệt giữa các biểu diễn Hough của chúng và những cái bạn muốn nó phát hiện. Một số nơi tuyệt vời để tìm hiểu về các cách tiếp cận thay thế là đây và đây - ely
@stacker làm cho một điểm tốt. Đối với tốc độ bạn muốn để có được tính năng giá rẻ để tính toán, giống như biểu đồ của gradient định hướng. Một cách tiếp cận đầu tiên thực sự ngây thơ sẽ là nhãn thủ công một loạt các hình chữ nhật có thể trong một số hình ảnh đào tạo và sử dụng các ví dụ tiêu cực ngẫu nhiên này để huấn luyện SVM hoặc phân loại cây quyết định. Việc đào tạo sẽ mất nhiều thời gian hơn, nhưng việc thực hiện trên các hình ảnh mới sẽ nhanh hơn nhiều. Tôi đang lập kế hoạch để viết phương pháp này lên khi tôi nhận được nhiều thời gian rảnh hơn để bao gồm các tài liệu tham khảo đúng. - ely
Cách tiếp cận tương tự như reCAPTCHA? ;) - George Duckett
Tại sao điều này lại được chuyển từ dsp.stackexchange.com? Có vẻ như trang web đó sẽ phù hợp hơn so với lưu lượng truy cập stack_flow o_O - BlueRaja - Danny Pflughoeft


Các câu trả lời:


Một cách tiếp cận khác sẽ là trích xuất các tính năng (keypoints) bằng cách sử dụng Quy mô biến đổi Invariant Tính năng (SIFT) hoặc Các tính năng mạnh mẽ được tăng tốc (LƯỚT SÓNG).

Nó được thực hiện trong OpenCV 2.3.1.

Bạn có thể tìm thấy một ví dụ mã đẹp bằng cách sử dụng các tính năng trong Tính năng2D + Homography để tìm một đối tượng đã biết

Cả hai thuật toán là bất biến để mở rộng quy mô và xoay vòng. Vì chúng hoạt động với các tính năng, bạn cũng có thể xử lý bế tắc (miễn là đủ các điểm quan trọng được hiển thị).

Enter image description here

Nguồn hình ảnh: ví dụ hướng dẫn

Quá trình xử lý mất vài trăm ms cho SIFT, SURF nhanh hơn một chút, nhưng nó không thích hợp cho các ứng dụng thời gian thực. ORB sử dụng FAST yếu hơn về sự bất biến luân phiên.

Các giấy tờ gốc


563
2018-04-16 05:17



Tôi đồng ý với @stacker - SIFT là một lựa chọn tuyệt vời. Nó rất mạnh mẽ chống lại các hoạt động quy mô và xoay. Đó là một chút mạnh mẽ chống lại biến dạng quan điểm (điều này có thể được cải thiện theo đề xuất của stacker: một cơ sở dữ liệu mẫu với quan điểm khác nhau của đối tượng mong muốn). Gót chân Achilles của nó trong kinh nghiệm của tôi sẽ là các biến thể ánh sáng mạnh mẽ và tính toán rất tốn kém. Tôi không biết về bất kỳ triển khai Java nào. Tôi biết về triển khai OpenCV và đã sử dụng GPU c ++ / Windows (SiftGPU) triển khai phù hợp với hiệu suất thời gian thực.
Một lưu ý cảnh báo: nhiều như tôi yêu SIFT / SURF và những gì họ đã làm cho tôi, họ là bằng sáng chế encumbered. Điều này có thể là một vấn đề, tùy thuộc vào một số điều kiện bao gồm vị trí địa lý AFAIK. - Agos
Vì vậy, hãy thử ORB của OpenCV hoặc FREAK không có vấn đề về bằng sáng chế. ORB nhanh hơn nhiều so với SIFT. ORB hơi nghèo với các biến thể về quy mô và ánh sáng trong trải nghiệm của tôi nhưng tự kiểm tra nó. - Rui Marques
Làm thế nào bạn có thể chấp nhận điều này như là một câu trả lời ... Không ai trong số các mô tả tính năng có thể phân biệt chai từ một lon .. Tất cả họ chỉ xem mô tả mô hình địa phương bất biến. Tôi đồng ý rằng SIFT, SURF, ORB, FREAK, v.v. có thể giúp bạn trong kết hợp tính năng nhưng .. Còn về các phần khác của câu hỏi như vùi, Chai so với Có thể, v.v. Tôi hy vọng đây không phải là giải pháp hoàn chỉnh nếu bạn có GOOGLED vấn đề của bạn có lẽ kết quả đầu tiên sẽ là câu trả lời này chỉ. - G453
@ G453 bạn hoàn toàn đúng! Có lẽ anh đã bị cuốn hút bởi hiệu suất của SHIFT và quên rằng tính năng trích xuất và kết hợp KHÔNG PHẢI LÀ VẤN ĐỀ ... - sepdek


Để tăng tốc mọi thứ, tôi sẽ tận dụng lợi thế của thực tế là bạn không được yêu cầu tìm một hình ảnh / đối tượng tùy ý, nhưng đặc biệt là hình ảnh với logo Coca-Cola. Điều này là quan trọng bởi vì logo này rất đặc biệt, và nó phải có một chữ ký đặc trưng, ​​biến đổi quy mô đặc trưng trong miền tần số, đặc biệt là trong kênh màu đỏ của RGB. Đó là để nói, các mô hình xen kẽ của đỏ-to-trắng-to-đỏ gặp phải bởi một dòng quét ngang (được đào tạo trên một biểu tượng theo chiều ngang) sẽ có một "nhịp điệu" đặc biệt khi nó đi qua trục trung tâm của logo. Nhịp điệu đó sẽ "tăng tốc" hoặc "chậm lại" ở các quy mô và định hướng khác nhau, nhưng sẽ vẫn tương đương tỷ lệ. Bạn có thể xác định / xác định một vài chục đường quét như vậy, cả chiều ngang và chiều dọc thông qua biểu trưng và một số đường chéo khác, theo kiểu starburst. Gọi đây là "dòng quét chữ ký".

Signature scan line

Tìm kiếm chữ ký này trong ảnh đích là một vấn đề đơn giản khi quét hình ảnh theo các dải ngang. Tìm tần số cao trong kênh màu đỏ (cho biết di chuyển từ vùng màu đỏ sang vùng màu trắng), và một khi đã tìm thấy, xem liệu nó có được theo sau bởi một trong những nhịp điệu được xác định trong phiên đào tạo hay không. Sau khi tìm thấy kết quả phù hợp, bạn sẽ ngay lập tức biết định hướng và vị trí của đường quét trong biểu trưng (nếu bạn theo dõi những điều đó trong quá trình đào tạo), vì vậy việc xác định ranh giới của biểu trưng từ đó là tầm thường.

Tôi sẽ ngạc nhiên nếu đây không phải là một thuật toán hiệu quả tuyến tính, hoặc gần như vậy. Nó rõ ràng không giải quyết sự phân biệt đối xử có thể chai của bạn, nhưng ít nhất bạn sẽ có logo của bạn.

(Cập nhật: cho nhận dạng chai tôi sẽ tìm kiếm than cốc (chất lỏng màu nâu) liền kề với logo - đó là, phía trong cái chai. Hoặc, trong trường hợp của một chai rỗng, tôi sẽ tìm một mũ lưỡi trai sẽ luôn có cùng hình dạng, kích thước và khoảng cách cơ bản từ biểu tượng và thường sẽ có màu trắng hoặc đỏ. Tìm kiếm một hình dạng eliptical màu rắn, nơi một nắp Nên được, liên quan đến logo. Dĩ nhiên là không dễ dàng, nhưng mục tiêu của bạn ở đây là tìm dễ dàng những người Nhanh.)

(Đã một vài năm kể từ ngày xử lý hình ảnh của tôi, vì vậy tôi đã giữ đề xuất này ở mức độ cao và khái niệm. Tôi nghĩ nó có thể gần đúng một cách mà mắt người có thể hoạt động - hoặc ít nhất là bộ não của tôi làm thế nào!)


331
2018-04-17 21:06



Đó là một gợi ý tuyệt vời, tôi đặc biệt thích thực tế là thuật toán này nên được khá nhanh, ngay cả khi nó có thể sẽ có nhiều âm tính giả. Một trong những mục tiêu tiềm ẩn của tôi là sử dụng phát hiện này trong thời gian thực cho robot, vì vậy đó có thể là một sự thỏa hiệp tốt! - Charles Menguy
Có, nó thường bị lãng quên (trong một lĩnh vực đặc trưng bởi độ chính xác) mà xấp xỉ các thuật toán là cần thiết cho hầu hết các tác vụ mô hình hóa thời gian thực, thực tế. (Tôi dựa vào của tôi luận văn về khái niệm này.) Lưu các thuật toán đòi hỏi thời gian của bạn cho các vùng hạn chế (để tỉa bớt các kết quả dương tính giả). Và hãy nhớ: trong robot, bạn thường không bị giới hạn bởi một hình ảnh duy nhất. Giả sử một robot di động, một alg nhanh có thể tìm kiếm hàng chục hình ảnh từ các góc khác nhau trong thời gian ít hơn so với các chi tiêu tinh vi dành cho một, giảm đáng kể các âm bản sai. - kmote
Tôi thích ý tưởng sử dụng số tiền cho máy quét mã vạch cho cực nhanh phát hiện logo của Coca-Cola. +1! - Li-aung Yip
Vấn đề tìm kiếm chữ ký trong trường hợp này là nếu chúng ta xoay cái hộp sang phía bên kia, tức là giấu chữ ký, thuật toán sẽ không phát hiện được cái có thể. - karlphillip
@karlphillip: Nếu bạn ẩn chữ ký, tức là biểu tượng, sau đó bất kì phương pháp dựa trên việc tìm kiếm logo sẽ thất bại. - Li-aung Yip


Vấn đề thú vị: khi tôi liếc nhìn hình ảnh chai của bạn, tôi nghĩ đó cũng là một cái lon. Nhưng, như một con người, những gì tôi đã làm để nói sự khác biệt là sau đó tôi nhận thấy nó cũng là một chai ...

Vì vậy, để nói với lon và chai ngoài, làm thế nào về chỉ đơn giản là quét cho chai đầu tiên? Nếu bạn tìm thấy một, hãy che dấu nhãn trước khi tìm kiếm các lon.

Không quá khó để thực hiện nếu bạn đã làm lon. Nhược điểm thực sự là nó tăng gấp đôi thời gian xử lý của bạn. (Nhưng suy nghĩ trước các ứng dụng trong thế giới thực, bạn sẽ kết thúc muốn làm chai anyway ;-)


132
2018-04-16 05:03



Tôi cũng đã nghĩ về điều đó, nhưng không có nhiều thời gian để làm điều đó. Làm thế nào bạn sẽ nhận ra một chai, vì nó là một phần chính sẽ trông giống như một quy mô có thể? Tôi cũng đang nghĩ đến việc tìm phích cắm màu đỏ và xem nó có phù hợp với trung tâm đóng chai không, nhưng điều đó dường như không thực sự mạnh mẽ. - Charles Menguy
Nếu có một nắp đỏ (hoặc vòng) song song với "Coca cola" nó rất có thể là một chai. - Lukasz Madon
@linker Làm thế nào bạn đào tạo thuật toán của bạn cho lon? Bạn có ví dụ về lon? Làm thế nào về đào tạo với các ví dụ về chai? - siamii
Sức mạnh của thuật toán này là bạn chỉ cần một mẫu để đào tạo trên, và sau đó nó áp dụng tất cả các biến đổi để phù hợp với nó với các lon tiềm năng khác. Tôi đã sử dụng phiên bản dựa trên binarized và đường viền của mẫu này để đào tạo, vì vậy sự khác biệt duy nhất giữa lon và chai là phích cắm, nhưng tôi sợ nó sẽ mang lại nhiều mặt tích cực hơn vì trung tâm trọng lực sẽ ở đâu đó trên cạnh hoặc bên ngoài chai. Đó là giá trị cho nó một thử tôi đoán. Nhưng điều đó sẽ tăng gấp đôi thời gian xử lý của tôi và tôi sẽ khóc;) - Charles Menguy
Về cơ bản đây là một hướng đi hợp lý. Tôi muốn cụm từ nó hơi khác nhau: Đầu tiên tìm tất cả các ứng cử viên, và sau đó cho mỗi ứng cử viên xác định cho dù đó là một chai, một lon, hoặc cái gì khác. - MSalters


Không phải là khó khăn ngay cả đối với con người để phân biệt giữa một chai và một lon trong hình ảnh thứ hai (miễn là khu vực trong suốt của chai là ẩn)?

Chúng gần như giống nhau ngoại trừ một khu vực rất nhỏ (có nghĩa là, chiều rộng ở phía trên cùng của lon là một chút nhỏ trong khi các wrapper của chai có cùng chiều rộng trong suốt, nhưng một sự thay đổi nhỏ phải không?)

Điều đầu tiên tôi nghĩ đến là kiểm tra cái chai màu đỏ. Nhưng nó vẫn là một vấn đề, nếu không có đầu cho chai, hoặc nếu nó là một phần ẩn (như đã đề cập ở trên).

Điều thứ hai tôi nghĩ là sự minh bạch của chai. OpenCV có một số công trình tìm kiếm các đối tượng trong suốt trong một hình ảnh. Kiểm tra các liên kết dưới đây.

Đặc biệt nhìn vào điều này để xem chính xác chúng phát hiện ra kính như thế nào:

Xem kết quả cấy ghép của họ:

Enter image description here

Họ nói đó là việc thực hiện bài báo "Một khung đường viền hoạt động trắc địa để tìm kiếm kính" của K. McHenry và J. Ponce, CVPR 2006.

Nó có thể hữu ích trong trường hợp của bạn một chút, nhưng vấn đề lại nảy sinh nếu chai được đổ đầy.

Vì vậy, tôi nghĩ ở đây, bạn có thể tìm kiếm cơ thể trong suốt của các chai đầu tiên hoặc cho một khu vực màu đỏ kết nối với hai đối tượng trong suốt bên mà rõ ràng là chai. (Khi làm việc lý tưởng, một hình ảnh như sau.)

Enter image description here

Bây giờ bạn có thể loại bỏ vùng màu vàng, tức là nhãn của chai và chạy thuật toán của bạn để tìm hộp.

Dù sao, giải pháp này cũng có các vấn đề khác nhau như trong các giải pháp khác.

  1. Nó chỉ hoạt động nếu chai của bạn rỗng. Trong trường hợp đó, bạn sẽ phải tìm kiếm vùng màu đỏ giữa hai màu đen (nếu chất lỏng Coca Cola là màu đen).
  2. Một vấn đề khác nếu phần trong suốt được bao phủ.

Nhưng dù sao, nếu không có vấn đề nào ở trên trong hình ảnh, điều này có vẻ là một cách tốt hơn.


101
2018-04-18 23:02



1 Tôi đã nghĩ về điều này và đang trong quá trình thực hiện phương pháp này. Tuy nhiên, @linker nên chia sẻ bộ hình ảnh của mình để chúng tôi có thể cố gắng thực hiện các phỏng đoán được giáo dục hơn. - karlphillip
vâng .. tôi cũng nghĩ rằng nó tốt nếu có nhiều hình ảnh hơn. - Abid Rahman K
Tôi biết đây là một bài cũ. Các liên kết đến phút dường như đã chết. Có ai có một tham chiếu đến họ? - Xocoatzin
Liên kết lại chết - charlesreid1
@ charlesreid1: họ được phục sinh lại :) - Abid Rahman K


Tôi thật sự thích Darren Cook's và câu trả lời của stacker cho vấn đề này. Tôi đang ở giữa việc ném những suy nghĩ của tôi vào một bình luận về những điều đó, nhưng tôi tin rằng cách tiếp cận của tôi là quá trả lời để không rời khỏi đây.

Tóm lại, bạn đã xác định một thuật toán để xác định rằng một logo Coca-Cola có mặt tại một vị trí cụ thể trong không gian. Bây giờ bạn đang cố gắng xác định, cho các định hướng tùy ý và các yếu tố mở rộng tùy ý, một heuristic thích hợp để phân biệt Coca-Cola lon từ các đối tượng khác, bao gồm: chai, biển quảng cáo, quảng cáoĐồ dùng Coca-Cola tất cả được liên kết với biểu tượng mang tính biểu tượng này. Bạn đã không gọi ra nhiều trường hợp bổ sung trong báo cáo vấn đề của bạn, nhưng tôi cảm thấy chúng quan trọng đối với sự thành công của thuật toán của bạn.

Bí quyết ở đây là xác định những tính năng trực quan nào có thể chứa hoặc, thông qua không gian âm, những tính năng có mặt cho các sản phẩm Coke khác không có trong lon. Để kết thúc, câu trả lời hàng đầu hiện tại phác thảo ra một cách tiếp cận cơ bản để chọn "có thể" nếu và chỉ khi "chai" không được xác định, hoặc bởi sự hiện diện của một nắp chai, chất lỏng, hoặc heuristics hình ảnh tương tự khác.

Vấn đề là điều này bị hỏng. Một chai có thể, ví dụ, trống rỗng và thiếu sự hiện diện của một nắp, dẫn đến một dương tính giả. Hoặc, nó có thể là một chai với các tính năng bổ sung bị cắt xén, dẫn đến phát hiện sai. Không cần phải nói, điều này không thanh lịch, cũng không hiệu quả cho mục đích của chúng tôi.

Để kết thúc này, các tiêu chí lựa chọn chính xác nhất cho các lon có vẻ như sau:

  • Là hình dạng của hình bóng đối tượng, như bạn phác thảo trong câu hỏi của bạn, chính xác? Nếu có, +1.
  • Nếu chúng ta giả định sự hiện diện của ánh sáng tự nhiên hoặc nhân tạo, chúng ta có phát hiện ra một đường viền mạ crom cho chai có nghĩa là nó được làm bằng nhôm không? Nếu có, +1.
  • Chúng tôi có xác định rằng tính chất đặc trưng của đối tượng là chính xác, liên quan đến nguồn sáng của chúng ta (liên kết video minh họa trên phát hiện nguồn sáng)? Nếu có, +1.
  • Chúng ta có thể xác định bất kỳ thuộc tính nào khác về đối tượng xác định nó như là một thể, bao gồm, nhưng không giới hạn, hình ảnh tôpô của logo, hướng của đối tượng, vị trí của đối tượng (ví dụ, trên bề mặt phẳng) giống như một bảng hoặc trong bối cảnh của các lon khác), và sự hiện diện của một tab kéo? Nếu vậy, đối với mỗi, +1.

Phân loại của bạn có thể trông giống như sau:

  • Đối với mỗi trận đấu ứng viên, nếu phát hiện thấy logo Coca Cola, hãy vẽ một đường viền màu xám.
  • Đối với mỗi trận đấu trên +2, vẽ đường viền màu đỏ.

Điều này làm nổi bật trực quan cho người dùng những gì đã được phát hiện, nhấn mạnh những yếu tố tích cực mà có thể, được phát hiện chính xác như các hộp bị xé.

Việc phát hiện mỗi thuộc tính mang một sự phức tạp về không gian và thời gian rất khác nhau, và đối với mỗi phương pháp tiếp cận, một cách nhanh chóng đi qua http://dsp.stackexchange.com là hợp lý hơn để xác định thuật toán chính xác và hiệu quả nhất cho mục đích của bạn. Ý định của tôi ở đây là, hoàn toàn và đơn giản, để nhấn mạnh rằng phát hiện nếu một cái gì đó là một lon bằng cách làm mất hiệu lực một phần nhỏ của không gian phát hiện ứng viên không phải là giải pháp hiệu quả nhất cho vấn đề này và lý tưởng nhất là bạn nên thực hiện các hành động thích hợp cho phù hợp.

Và hey, chúc mừng ngày bài đăng của Hacker News! Nhìn chung, đây là một câu hỏi khá tuyệt vời xứng đáng với sự công khai mà nó nhận được. :)


41
2018-04-22 22:56



Đó là một cách tiếp cận thú vị mà ít nhất đáng để thử, tôi thực sự thích lý do của bạn về vấn đề này - Charles Menguy
Đây là loại suy nghĩ của tôi: không loại trừ những loại dương tính giả. Quy tắc trong nhiều tính năng của những gì làm cho một coke có thể. Nhưng tôi tự hỏi: bạn làm gì với một cái lon bị đánh bại? Tôi có nghĩa là, nếu bạn bước vào một coke có thể nó vẫn là một coke có thể. Nhưng nó sẽ không có hình dạng giống nhau nữa. Hay đó là vấn đề AI-Complete? - Ian


Nhìn vào hình dạng

Hãy ngây người với hình dạng phần màu đỏ của lon / chai. Chú ý cách có thể chạm nhẹ một chút ở trên cùng trong khi nhãn chai thẳng. Bạn có thể phân biệt giữa hai loại này bằng cách so sánh chiều rộng của phần màu đỏ trên chiều dài của nó.

Nhìn vào điểm nổi bật

Một cách để phân biệt giữa chai và lon là vật liệu. Một chai được làm bằng nhựa trong khi một lon có thể được làm bằng kim loại nhôm. Trong các tình huống đủ ánh sáng, nhìn vào sự cụ thể sẽ là một cách để nói một nhãn chai từ một nhãn hiệu có thể.

Theo như tôi có thể nói, đó là cách một con người sẽ nói sự khác biệt giữa hai loại nhãn. Nếu điều kiện ánh sáng yếu, thì chắc chắn có một số sự không chắc chắn trong việc phân biệt hai đường. Trong trường hợp đó, bạn sẽ phải có khả năng phát hiện sự hiện diện của chai trong suốt / mờ.


35
2018-04-16 08:31



Tôi thích ý tưởng này, nhưng có vẻ như bạn cần một số điều kiện ánh sáng thực sự tốt. Trong ví dụ hình ảnh nơi có cả hai có thể và chai ví dụ này có vẻ hơi khó để làm cho sự khác biệt. - Charles Menguy
Trong ví dụ của bạn, hãy chú ý đến độ đặc trưng của nhãn nhựa khuếch tán hơn nhiều so với các điểm rất sáng trên hộp? Đó là cách bạn có thể nói. - tskuzzy
Tôi thấy, loại đại diện không gian màu nào bạn sẽ sử dụng trong trường hợp này để nắm bắt được sự cụ thể trong thuật toán của bạn? Điều này có vẻ khá khó khăn để có được trong RGB hoặc HSV - Charles Menguy
Điều gì sẽ xảy ra nếu nguồn sáng phía sau hộp? Tôi nghĩ bạn sẽ không thấy nổi bật. - Rui Marques


Xin hãy nhìn vào Zdenek Kalal's Predator tracker. Nó đòi hỏi một số đào tạo, nhưng nó có thể tích cực tìm hiểu làm thế nào các đối tượng theo dõi nhìn vào định hướng khác nhau và quy mô và hiện nó trong thời gian thực!

Mã nguồn có sẵn trên trang web của anh ấy. Nó đang ở trong MATLAB, nhưng có lẽ có một thực hiện Java đã được thực hiện bởi một thành viên cộng đồng. Tôi đã thực hiện thành công phần trình theo dõi của TLD trong C #. Nếu tôi nhớ chính xác, TLD đang sử dụng Ferns làm máy dò điểm. Tôi sử dụng SURF hoặc SIFT thay thế (đã được đề xuất bởi @stacker) để phản hồi lại đối tượng nếu nó bị mất bởi trình theo dõi. Phản hồi của trình theo dõi giúp dễ dàng xây dựng với thời gian danh sách động các mẫu sàng lọc / lướt sóng với thời gian cho phép phản hồi đối tượng với độ chính xác rất cao.

Nếu bạn quan tâm đến việc triển khai C # của tôi về trình theo dõi, hãy hỏi.


31
2018-04-17 20:56



Cảm ơn bạn đã liên kết trông thú vị. Về việc đào tạo, kích thước của tập huấn luyện nào là hợp lý để đạt được kết quả hợp lý? Nếu bạn có một thực hiện ngay cả trong c # đó sẽ rất hữu ích là tốt! - Charles Menguy
Trong khi nghiên cứu TLD, tôi thấy một người dùng khác đang tìm kiếm triển khai C # --- có lý do gì để không đưa công việc của bạn lên Github không? stackoverflow.com/questions/29436719/… - spillner
N.B. Nhiều năm sau, liên kết giờ đã chết - G Forty


Nếu bạn không bị giới hạn chỉ là một máy ảnh mà không phải là một trong những khó khăn của bạn có lẽ bạn có thể di chuyển đến bằng cách sử dụng một cảm biến phạm vi như Xbox Kinect. Với điều này bạn có thể thực hiện chiều sâu và màu sắc dựa trên phân đoạn phù hợp của hình ảnh. Điều này cho phép tách các đối tượng trong hình ảnh nhanh hơn. Sau đó, bạn có thể sử dụng kết hợp ICP hoặc các kỹ thuật tương tự để thậm chí phù hợp với hình dạng của hình có thể chỉ sau đường viền hoặc màu của nó và cho rằng hình trụ có thể là tùy chọn hợp lệ cho bất kỳ hướng nào nếu bạn có quét 3D trước đó của mục tiêu. Những kỹ thuật này thường khá nhanh, đặc biệt là khi được sử dụng cho một mục đích cụ thể mà nên giải quyết vấn đề tốc độ của bạn.

Ngoài ra tôi có thể đề nghị, không nhất thiết phải cho độ chính xác hoặc tốc độ nhưng cho vui, bạn có thể sử dụng một mạng thần kinh được đào tạo trên hình ảnh phân đoạn màu sắc của bạn để xác định hình dạng của lon. Chúng rất nhanh và thường có thể lên đến 80/90% chính xác. Đào tạo sẽ là một chút của một quá trình dài mặc dù như bạn sẽ phải tự xác định các lon trong mỗi hình ảnh.


25
2018-04-16 04:54



Trên thực tế tôi đã không giải thích rằng trong bài viết, nhưng cho bài tập này tôi đã được đưa ra một bộ khoảng 30 hình ảnh, và đã phải làm một thuật toán người sẽ phù hợp với họ tất cả trong các tình huống khác nhau như mô tả. Tất nhiên một số hình ảnh đã được tổ chức ra để kiểm tra các thuật toán cuối cùng. Nhưng tôi thích ý tưởng của các cảm biến Kinect, và tôi rất thích đọc thêm về chủ đề này! - Charles Menguy
Điều gì sẽ gần bằng kích thước của tập huấn luyện với mạng thần kinh để có kết quả thỏa mãn? Điều tốt đẹp với phương pháp này cũng là tôi chỉ cần một mẫu để phù hợp với hầu hết mọi thứ. - Charles Menguy
Nếu tập hợp các hình ảnh của bạn được xác định trước và giới hạn, chỉ cần kết quả hoàn hảo bằng lõi cứng trong chương trình của bạn;) - sne11ius
Vâng, nếu tôi đào tạo trên tập dữ liệu, tôi sẽ chạy thuật toán chống lại, chắc chắn tôi sẽ nhận được kết quả hoàn hảo :) Nhưng ví dụ cho bài tập này, chương trình đã được giáo viên kiểm tra cuối cùng trên một tập hợp các hình ảnh được giữ . Tôi muốn làm một cái gì đó mà sẽ được mạnh mẽ và không overfit cho các dữ liệu đào tạo. - Charles Menguy
Câu trả lời này là tốt nhất chỉ là một bình luận ("thử sử dụng một Kinect"). - Fattie


Tôi sẽ phát hiện hình chữ nhật màu đỏ: RGB -> HSV, bộ lọc màu đỏ -> hình ảnh nhị phân, gần (giãn nở sau đó xói mòn, được gọi là imclose trong MATLAB)

Sau đó, nhìn qua các hình chữ nhật từ lớn nhất đến nhỏ nhất. Hình chữ nhật có hình chữ nhật nhỏ hơn ở một vị trí / quy mô đã biết có thể được loại bỏ (giả sử tỷ lệ chai là không đổi, hình chữ nhật nhỏ hơn sẽ là nắp chai).

Điều này sẽ để lại cho bạn với hình chữ nhật màu đỏ, sau đó bạn sẽ cần phải bằng cách nào đó phát hiện các biểu tượng để cho biết nếu họ là một hình chữ nhật màu đỏ hoặc một coke có thể. Giống như OCR, nhưng với một logo đã biết?


20
2018-04-16 06:34



Như thế này đã được thảo luận về DSP trong thời gian ngắn khi nó đã được di chuyển, một số chai có thể không có phích cắm;) hoặc cắm một phần có thể ẩn. - Charles Menguy