Cách chính xác nhất để xác định màu sắc của một đối tượng là gì?


33

Tôi đã viết một chương trình máy tính có thể phát hiện tiền trong một hình ảnh tĩnh (.jpeg, .png, v.v.) bằng cách sử dụng một số kỹ thuật tiêu chuẩn cho thị giác máy tính (Gaussian Blur, ngưỡng, Hough-Transform, v.v.). Sử dụng tỷ lệ của các đồng tiền nhặt được từ một hình ảnh nhất định, tôi có thể xác định chắc chắn đó là đồng tiền nào. Tuy nhiên, tôi muốn thêm vào mức độ tự tin của mình và cũng xác định xem một đồng xu mà tôi suy ra thuộc loại A (từ tỷ số bán kính) cũng có đúng colo [u] r hay không. Vấn đề là đối với đồng tiền của Anh et al. (đồng, bạc, vàng), các màu tương ứng (đặc biệt từ đồng sang vàng) rất giống nhau.

Tôi có một thói quen trích xuất màu trung bình của một đồng tiền nhất định theo 'không gian màu' RedGreenBlue (RGB) và thường xuyên chuyển đổi màu này thành HueSaturationBrightness (HSB hoặc HSV) 'color-space'.

RGB không đẹp lắm khi làm việc trong việc cố gắng phân biệt giữa ba màu đồng xu (xem hình ảnh [cơ bản] đính kèm để biết ví dụ). Tôi có các phạm vi và giá trị tiêu biểu sau cho màu của các loại tiền khác nhau:

Lưu ý: giá trị tiêu biểu ở đây là giá trị được chọn bằng cách sử dụng giá trị trung bình 'pixel-khôn ngoan' của hình ảnh thực.

**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).

**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).

**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86) 

Trước tiên tôi đã thử sử dụng 'Khoảng cách Euclidian' giữa một màu đồng xu trung bình nhất định (sử dụng RGB) và các giá trị tiêu biểu cho từng loại đồng xu được đưa ra ở trên, coi các giá trị RGB là một vectơ; đối với đồng chúng ta sẽ có:

Dcopper=((RtypeRcopper)2+(GtypeGcopper)2+(BtypeBcopper)2)

trong đó giá trị nhỏ nhất của chênh lệch ( D ) sẽ cho chúng ta biết loại tiền nào có khả năng nhất. Phương pháp này đã cho thấy nó rất không chính xác.

Tôi cũng đã thử chỉ so sánh màu sắc của các đồng tiền với các giá trị tiêu biểu của các loại được cung cấp ở trên. Mặc dù về mặt lý thuyết, điều này cung cấp 'không gian màu' tốt hơn nhiều để xử lý các mức độ sáng và độ bão hòa khác nhau của hình ảnh, nhưng nó cũng không đủ chính xác.

Câu hỏi: Phương pháp tốt nhất để xác định loại tiền dựa trên màu sắc (từ hình ảnh tĩnh) là gì?

Cảm ơn rất nhiều vì thời gian của bạn.

Màu sắc tiền xu điển hình

Chỉnh sửa 1

Lưu ý: Tôi đã thử tất cả các ý tưởng được thảo luận dưới đây và đã đạt được bên cạnh không có gì. Phương sai trong điều kiện ánh sáng (ngay cả trong cùng một hình ảnh) làm cho vấn đề này trở nên rất khó khăn và cần được xem xét.

Chỉnh sửa 2 (Summery of Outcome)

Cảm ơn bạn cho câu trả lời của bạn. Nghiên cứu sâu hơn của riêng tôi (bao gồm cả câu trả lời và nhận xét của bạn) đã chỉ ra vấn đề khó giải quyết như thế nào trong trường hợp chung về ánh sáng tùy ý, máy ảnh tùy ý (thiết bị di động), dao động màu đồng xu (ngay cả đối với cùng loại / loại) v.v ... Lần đầu tiên tôi xem nhận dạng màu da (một lĩnh vực nghiên cứu rất tích cực) là điểm khởi đầu và vẫn còn nhiều vấn đề ngay cả khi chỉ nhận biết màu da cho người da trắng (xem bài viết này để xem xét các kỹ thuật hiện tại), và thực tế là vấn đề này chứa ba đối tượng màu riêng biệt, tất cả chúng có thể có các nhiễm sắc thể liên tục và khác nhau làm cho chủ đề về thị giác máy tính trở nên rất khó để phân loại và xử lý theo đó (thực tế bạn có thể làm bằng tiến sĩ tốt về nó !).

Tôi đã xem xét Phương pháp ràng buộc Gamut từ bài đăng rất hữu ích của DW bên dưới. Đây là cái nhìn đầu tiên rất hứa hẹn là một bước xử lý trước để biến đổi hình ảnh và các đối tượng đồng xu riêng biệt thành màu sắc độc lập với điều kiện ánh sáng. Tuy nhiên, ngay cả kỹ thuật này cũng không hoạt động hoàn hảo (và liên quan đến một thư viện hình ảnh / biểu đồ cho ánh xạ - mà tôi không muốn tham gia) và các phương pháp Kiến trúc mạng thần kinh phức tạp hơn nhiều. Trong thực tế , bài viết này nêu trong bản tóm tắt rằng:

"current machine colour constancy algorithms are not good enough for colour-based 
 object recognition.".

Điều đó không có nghĩa là không có nhiều bài báo cập nhật về chủ đề này ngoài kia, nhưng tôi không thể tìm thấy chúng và dường như nó không phải là một lĩnh vực nghiên cứu rất tích cực vào thời điểm này.

Câu trả lời của AVB cũng hữu ích và tôi đã xem xét ngắn gọn về L A B *.

"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative 
perceptual differences between any two colours in L*a*b* can be approximated by 
treating each colour as a point in a three dimensional space."

Từ những gì tôi đã đọc, việc chuyển đổi sang không gian màu này cho các hình ảnh phụ thuộc vào thiết bị của tôi sẽ rất khó khăn - nhưng tôi sẽ xem xét chi tiết điều này (để xem cách thực hiện nào đó) khi tôi có thêm một chút thời gian.

Tôi không nín thở tìm giải pháp cụ thể cho vấn đề này và sau khi thử với L A B *, tôi sẽ bỏ qua màu đồng xu và tìm cách chắc chắn các thuật toán phát hiện hình học hiện tại của mình (Elliptic Hough Transform, v.v.).

Cảm ơn tất cả các bạn. Và như một lưu ý cuối cho câu hỏi này, đây là cùng một hình ảnh với thuật toán phát hiện hình học mới, không có nhận dạng màu:

nhập mô tả hình ảnh ở đây


1
Những hình ảnh sẽ luôn có cùng một nền màu? Hoặc bạn có thể giới thiệu một số đối tượng 'tiêu chuẩn màu' khác vào hình ảnh không? Nếu vậy, bạn có một cách điều chỉnh cho ánh sáng khác nhau. Nếu không, có thể khó khăn ..
onestop

2
Nó không chỉ rõ ràng là ánh sáng màu. Tôi khá chắc chắn rằng ánh sáng mặt trời, ánh sáng huỳnh quang và ánh sáng sợi đốt có màu sắc đủ khác nhau để làm rối màu khớp màu của HSB, mặc dù mắt chúng ta bằng cách nào đó điều chỉnh để chúng ta không cảm nhận được mọi thứ đang thay đổi màu sắc.
Peter Shor

2
(+1) Câu hỏi thú vị và đầy thách thức. Tôi cảm thấy rằng nó cần một số tinh chỉnh để có một cơ hội tốt ở một câu trả lời tốt. Như hiện tại đã nêu nó giáp với bị đặt ra. Đối với một giải pháp thực tế, bạn sẽ cần cung cấp thêm một số chi tiết về phạm vi môi trường mà bạn muốn có thể thực hiện phân loại này. Những màu nền là có thể? Luôn luôn cùng số lượng tiền? Bạn sẽ luôn luôn có một hình ảnh màu? Ánh sáng xung quanh tốt? Biết các loại đặc điểm này có thể cung cấp hướng dẫn về một giải pháp.
Đức hồng y

2
Tôi nghĩ rằng vấn đề bạn đang gặp phải là "sự cố định màu sắc", các thuật ngữ tìm kiếm khác sẽ là "giảm giá chiếu sáng" hoặc "giảm giá nền". Đó là một vấn đề chưa được giải quyết trong khoa học tầm nhìn.
caracal

1
Chúc tôi có thể +1 lần nữa để theo dõi tốt đẹp! Những thứ rất thú vị.
Matt Parker

Câu trả lời:


6

Hai điều, cho người mới bắt đầu.

Một, chắc chắn không hoạt động trong RGB. Mặc định của bạn phải là không gian màu Lab (còn gọi là CIE L * a * b *). Bỏ đi L. Từ hình ảnh của bạn có vẻ như aphối hợp cung cấp cho bạn các thông tin mới nhất, nhưng có lẽ bạn nên làm một phép phân tích thành phần chính trên abvà làm việc cùng (quan trọng nhất) thành phần đầu tiên, chỉ để giữ cho mọi thứ đơn giản. Nếu điều này không hoạt động, bạn có thể thử chuyển sang mô hình 2D.

Chỉ cần cảm nhận về nó, trong aba đồng tiền màu vàng có STD dưới 6 và phương tiện là 137 ("vàng"), 154 và 162 - nên được phân biệt.

Thứ hai, vấn đề ánh sáng. Ở đây bạn sẽ phải xác định cẩn thận vấn đề của bạn. Nếu bạn muốn phân biệt màu sắc gần với bất kỳ ánh sáng nào và trong bất kỳ bối cảnh nào - dù sao thì bạn cũng không thể như thế này. Nếu bạn chỉ lo lắng về sự thay đổi độ sáng cục bộ, Lab sẽ chủ yếu quan tâm đến vấn đề này. Nếu bạn muốn có thể làm việc cả dưới ánh sáng ban ngày và ánh sáng sợi đốt, bạn có thể đảm bảo nền trắng đồng nhất, như trong hình ảnh ví dụ của bạn không? Nói chung, điều kiện ánh sáng của bạn là gì?

Ngoài ra, hình ảnh của bạn được chụp bằng một máy ảnh khá rẻ, bởi vẻ ngoài của nó. Nó có thể có một số tính năng cân bằng trắng tự động, làm rối màu sắc khá tệ - tắt nó đi nếu bạn có thể. Nó cũng trông giống như hình ảnh được mã hóa trong YCbCr tại một số điểm (xảy ra rất nhiều nếu đó là máy quay video) hoặc trong một biến thể tương tự của JPG; thông tin màu sắc bị thiếu trầm trọng. Trong trường hợp của bạn, nó thực sự có thể tốt - điều đó có nghĩa là máy ảnh đã thực hiện một số khử nhiễu cho bạn trong các kênh màu. Mặt khác, điều đó có thể có nghĩa là tại một số điểm, thông tin màu sắc cũng được lượng tử hóa mạnh hơn độ sáng - điều đó không tốt lắm. Vấn đề chính ở đây là - vấn đề máy ảnh, và những gì bạn làm nên phụ thuộc vào máy ảnh bạn sẽ sử dụng.

Nếu bất cứ điều gì ở đây không có ý nghĩa - hãy để lại nhận xét.


Cảm ơn câu trả lời của bạn. Tôi không thể đảm bảo bất kỳ điều nào ở trên. Đây là một ứng dụng di động đếm số xu (một lượng tiền tùy ý) chỉ bằng một nút bấm (và rất nhanh!). Vì vậy, ánh sáng có thể thay đổi dữ dội và cũng không có nền phù hợp. Tôi tin rằng việc phân loại các loại tiền thông qua màu sắc theo cách này (như bạn chỉ ra) là không thể. Tuy nhiên, tôi thích bạn trả lời về việc sử dụng L A B * và tin rằng đó là câu trả lời tốt nhất được cung cấp. Trong ánh sáng này, bạn có câu trả lời và tiền thưởng. Cảm ơn một lần nữa.
MoonKnight

6

Với tinh thần động não, tôi sẽ chia sẻ một số ý tưởng bạn có thể thử:

  1. Thử thêm Huế? Có vẻ như Hue đã cho bạn một sự phân biệt khá tốt giữa bạc và đồng / vàng, mặc dù không phải giữa đồng và vàng, ít nhất là trong ví dụ duy nhất bạn đã trình bày ở đây. Bạn đã kiểm tra bằng cách sử dụng Huế chi tiết hơn, để xem liệu nó có thể là một tính năng khả thi để phân biệt bạc với đồng / vàng không?

    Tôi có thể bắt đầu bằng cách thu thập một loạt các hình ảnh ví dụ mà bạn đã gắn nhãn thủ công và tính toán Hue của từng đồng xu trong mỗi hình ảnh. Sau đó, bạn có thể thử lập biểu đồ cho chúng, để xem liệu Huế có giống như một cách hợp lý để phân biệt đối xử hay không. Tôi cũng có thể thử nhìn vào mức trung bình của mỗi đồng xu, cho một số ví dụ giống như ví dụ bạn đã trình bày ở đây. Bạn cũng có thể thử Saturation, vì có vẻ như nó cũng có thể hữu ích.

    Nếu điều này không thành công, bạn có thể muốn chỉnh sửa câu hỏi của mình để hiển thị những gì bạn đã thử và đưa ra một số ví dụ để minh họa chính xác lý do tại sao điều này khó hoặc ở đâu thất bại.

  2. Không gian màu khác? Tương tự, bạn có thể thử chuyển đổi thành rg chromacity và sau đó thử nghiệm để xem liệu kết quả có hữu ích trong việc phân biệt bạc với đồng / vàng hay không. Có thể điều này có thể giúp điều chỉnh biến thể chiếu sáng, vì vậy nó có thể đáng để thử.

  3. nnn

    npnnonp,oToT(p)oiT(pi)TT(x)=x+c(mod360)c

  4. CRRC

    CθRθRθC(x,y)D(x,y)=Rθ(x,y)C(x,y)RθCL2(x,y)D(x,y)2θ0.25θ

    L2L2RC

    Để mạnh mẽ, bạn có thể có nhiều hình ảnh tham chiếu khác nhau cho mỗi đồng tiền (trên thực tế, mỗi bên của mỗi đồng tiền) và thử tất cả các hình ảnh tham chiếu để tìm ra kết quả phù hợp nhất.

    CR

  5. ff(r)rfCCfRR

    fg(r)=f(r)μμgCgR

    f

    fC

    CCf

  6. Nhìn vào các thuật toán tầm nhìn cho màu sắc không đổi. Cộng đồng thị giác máy tính đã nghiên cứu sự không đổi màu sắc , vấn đề sửa chữa cho một nguồn chiếu sáng không xác định; xem, ví dụ, tổng quan này . Bạn có thể khám phá một số thuật toán xuất phát cho vấn đề này; họ cố gắng suy ra nguồn chiếu sáng và sau đó sửa cho nó, để lấy được hình ảnh mà bạn có được nếu bức ảnh được chụp với nguồn chiếu sáng tham chiếu.

  7. CRC

Tôi không biết liệu có ai trong số này có cơ hội làm việc không, nhưng chúng là một số ý tưởng bạn có thể thử.


3

Vấn đề thú vị và công việc tốt.

Hãy thử sử dụng các giá trị màu trung bình hơn là trung bình. Điều này sẽ mạnh mẽ hơn so với các giá trị ngoại lệ do độ sáng và độ bão hòa. Hãy thử chỉ sử dụng một trong các thành phần RGB thay vì cả ba. Chọn thành phần phân biệt tốt nhất các màu sắc. Bạn có thể thử vẽ biểu đồ cho các giá trị pixel (ví dụ: một trong các thành phần RGB) để cho bạn ý tưởng về các thuộc tính của phân phối pixel. Điều này có thể gợi ý một giải pháp không rõ ràng ngay lập tức. Hãy thử vẽ các thành phần RGB trong không gian 3D để xem liệu chúng có tuân theo bất kỳ mẫu nào không, ví dụ chúng có thể nằm sát một đường chỉ ra rằng sự kết hợp tuyến tính của các thành phần RGB có thể là một phân loại tốt hơn so với từng mẫu riêng lẻ.


Tiếng hét tốt với trung vị, trên thực tế tôi cũng đã mã hóa điều này và điều này cũng kém về mặt thiết lập màu sắc chính xác. Với phương pháp biểu đồ, tôi có ý thức về chi phí tính toán; Ngay khi tôi bắt đầu lặp qua các pixel ở dạng 2D, tôi sẽ phải chịu phí! Chưa bao giờ, nó có thể đáng để tôi đặt một cái gì đó như thế này (như bạn chỉ ra) để thiết lập bất kỳ mối tương quan nào. Tôi đã tạo ra tất cả các loại ô cho các thành phần RGB và do điều kiện ánh sáng khác nhau (hậu quả của việc chụp ảnh ở các vị trí khác nhau), các giá trị RGB có thể chồng lấp rất nhiều cho cả ba loại đồng xu.
MoonKnight

Tôi cũng đã xem xét việc lắp một mô hình để ước tính xác suất sau của điểm không gian màu thuộc về một loại tiền nhất định. Tôi cũng đã xem xét mô hình hỗn hợp Gaussian, nhưng tôi chưa hiểu rõ về điều này. Tôi cũng đã được thông báo về một cách tiếp cận khác (hơi tùy tiện, nhưng đơn giản hơn) và đó là sử dụng một cái gì đó như phép nội suy lân cận gần nhất. Cảm ơn vì đã dành thời gian cho tôi.
MoonKnight

1
Trên một bản nhạc hoàn toàn khác, một sự khác biệt khác giữa các đồng tiền là thiết kế ở mặt trước / mặt sau (mặc dù một số có thể có cùng một thiết kế ở một bên) Điều gì về mối tương quan chéo giữa bộ mẫu thiết kế với các pixel coin (hoặc sử dụng thông tin lẫn nhau) để giúp xác định loại tiền bạn đang xem. Với sự kết hợp của các tỷ lệ, màu pixel và thiết kế phù hợp này, bạn có thể sẽ có thể giảm tỷ lệ phát hiện sai.
martino

Tôi đã nghĩ về điều này - nhưng điều này đòi hỏi quá nhiều phần mềm nhận dạng hiện tại và sẽ là một công việc lớn để viết từ đầu (OCR ??). Ngoài ra, có một sự thay đổi lớn trong đồ họa trên những đồng tiền như vậy khiến cho việc thực hiện như vậy trở thành một cơn ác mộng. Tôi sẽ có một vở kịch sau - tôi sẽ báo cáo những gì tôi tìm thấy. Cảm ơn một lần nữa.
MoonKnight

Tại sao các downvote? Nếu có vấn đề với câu trả lời, thật hữu ích khi chỉ ra - tôi không thể thấy một câu
martino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.