Який найбільш точний спосіб визначення кольору предмета?


33

Я написав комп’ютерну програму, яка може виявляти монети в статичному зображенні (.jpeg, .png тощо), використовуючи деякі стандартні методи комп’ютерного зору (розмиття Гаусса, поріг, Hough-трансформація тощо). Використовуючи співвідношення монет, зібраних із заданого зображення, я можу з впевненістю встановити, які монети є. Однак я хочу додати до рівня моїх впевненостей, а також визначити, чи монета, яку я вважаю, має тип A (від коефіцієнта радіусу), також має правильний колорит [u] r. Проблема полягає в тому, що для британських монет та ін. (мідь, срібло, золото), відповідні кольори (наприклад, з міді до золота) дуже схожі.

У мене є звичайна процедура, яка витягує середній колір даної монети з точки зору «кольорового простору» RedGreenBlue (RGB) і підпрограми для перетворення цього кольору в «кольоровий простір» HueSaturationBrightness (HSB або HSV).

З RGB не дуже приємно працювати, намагаючись розмежувати три кольори монети (див. Приклад [основне] зображення для прикладу). У мене є такі діапазони та типові значення для кольорів різних типів монет:

Примітка: типове значення тут - це таке, яке вибирається за допомогою "пікселя" середнього реального зображення.

**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) 

Я спершу спробував використати "евклідову відстань" між заданим середнім кольором монети (з використанням RGB) та типовими значеннями для кожного типу монети, наведеними вище, трактуючи значення RGB як вектор; для міді у нас було б:

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

де найменше значення різниці ( ) вказує нам, який тип даної монети є найімовірнішим. Цей метод показав себе дуже неточним.D

Я також спробував просто порівняти відтінок монет із типовими значеннями типів, передбачених вище. Хоча теоретично це забезпечує набагато кращий «кольоровий простір» для вирішення різної яскравості та рівня насиченості зображень, це теж було недостатньо точним.

Питання: Який найкращий спосіб визначити тип монети за кольором (зі статичного зображення)?

Дуже дякую за ваш час.

Типові кольори монет

Редагуйте 1

Примітка. Я перепробував усі ідеї, обговорені нижче, і досягнув нічого. Різниця в умовах освітлення (навіть у межах одного зображення) робить цю проблему дуже жорсткою і її слід враховувати.

Редагувати 2 (літній результат)

Дякую за відповіді. Подальше моє власне дослідження (включаючи ваші відповіді та коментарі) підкреслило, наскільки важко вирішити цю проблему у загальному випадку довільного освітлення, довільної камери (мобільний пристрій), коливання кольору монети (навіть для одного виду / типу) і т. д. Я вперше розглядав розпізнавання кольору шкіри (дуже активне поле досліджень) як вихідний пункт, і все ще існує чимало проблем навіть із розпізнаванням кольору шкіри лише для кавказців (див. цей документ для огляду сучасних методик), і той факт, що ця проблема містить три чіткі кольорові об'єкти, всі з яких можуть мати постійну і різну кольорову здатність, робить цю тему комп'ютерного зору дуже важкою для класифікації та вирішення відповідних питань (адже ви могли б зробити хороший доктор наук з цього питання) !).

Я переглянув метод обмеження Gamut з дуже корисного повідомлення від DW нижче. Це на перший погляд було дуже перспективним як крок попередньої обробки для перетворення зображення та окремих предметів монети в кольори, незалежні від умов освітлення. Однак навіть ця методика не працює ідеально (і включає бібліотеку зображень / гістограм для відображень - до яких я не хочу потрапляти), а також не має набагато складніших методологій нейронної мережевої архітектури. Насправді в цьому документі в рефераті зазначено, що:

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

Це не означає, що на цю тему не існує набагато більш сучасних статей, але я не можу їх знайти, і наразі це не дуже активно дослідницька область.

Відповідь на АВБ був також корисним , і я подивився в L 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."

З того, що я прочитав, перетворення в цей кольоровий простір для моїх пристроїв залежних зображень буде складним - але я детально розберуся на це (з метою якоїсь реалізації), коли у мене буде трохи більше часу.

Я не затримую дихання на конкретному вирішенні цієї проблеми, і після спроби з L A B * я нехтую кольором монети і буду шукати свої поточні алгоритми геометричного виявлення (точна еліптична трансформація Hough тощо).

Дякую всім вам І на завершення до цього питання - це одне і те ж зображення з новим алгоритмом геометричного виявлення, яке не має розпізнавання кольорів:

введіть тут опис зображення


1
Чи завжди зображення матимуть однаковий кольоровий фон? Або ви можете ввести в зображення якийсь інший об'єкт "стандартного кольору"? Якщо так, у вас є спосіб регулювання різного освітлення. Якщо ні, то може бути важко ..
onestop

2
Це не просто очевидно кольорове світло. Я майже впевнений, що сонячне світло, люмінесцентне світло і розжарювання мають кольори, які досить різні, щоб зіпсувати відповідність кольорів HSB, навіть якщо очі якось регулюються, щоб ми не сприймали речі, що змінюють колір.
Пітер Шор

2
(+1) Питання цікаве та складне. Я відчуваю, що воно потребує певного вдосконалення, щоб мати хороший шанс на хорошу відповідь. Як зазначено в даний час, це межує з жорстоким становищем. Для практичного рішення вам потрібно буде надати ще кілька деталей щодо діапазону середовищ, у яких ви хочете мати змогу виконувати цю класифікацію. Які кольорові фони можливі? Завжди однакова кількість монет? Чи завжди у вас буде кольорове зображення? Хороше освітлення? Знання подібних характеристик може дати керівництво до рішення.
кардинал

2
Я думаю, що проблема, з якою ви стикаєтеся, полягає в "сталісті кольорів", іншими пошуковими термінами буде "знижка освітлювальної речовини" або "знижка фону". Це невирішена проблема в науці про бачення.
каракал

1
Бажаю, щоб я міг поставити +1 ще раз за гарне спостереження! Дуже цікавий матеріал.
Метт Паркер

Відповіді:


6

Дві речі, для початку.

Один, остаточно не працює в RGB. За замовчуванням має бути простір кольорів у лабораторії (він же CIE L * a * b *). Відмовтеся L. Від вашого образу це виглядає як aкоордината дає найбільш повну інформацію, але ви , ймовірно , слід зробити основний компонент аналізу на aі bі роботи по першій (найважливішою) складової, просто щоб тримати речі простими. Якщо це не працює, ви можете спробувати перейти на 2D-модель.

Тільки для того, щоб відчути це, у aтрьох жовтуватих монетах STD нижче 6, а засоби 137 ("золото"), 154 та 162 - повинні відрізнятися.

По-друге, питання освітлення. Тут вам доведеться ретельно визначити свою проблему. Якщо ви хочете розрізнити близькі кольори під будь-яким освітленням і в будь-якому контексті - ви все одно не можете, не подобається. Якщо вас турбують лише місцеві зміни яскравості, лабораторія здебільшого подбає про це. Якщо ви хочете працювати як при денному світлі, так і при розжарюванні, чи можете ви забезпечити рівномірний білий фон, як у вашому прикладі? Взагалі, які у вас умови освітлення?

Крім того, ваше зображення було зроблене досить дешевою камерою, за зовнішнім виглядом. Напевно, вона має якусь функцію автоматичного балансу білого, яка досить погано псує кольори - вимикайте, якщо можете. Це також виглядає так, що зображення або було зашифровано в YCbCr в якийсь момент (трапляється багато, якщо це відеокамера) або в подібному варіанті JPG; інформація про колір сильно підкреслена. У вашому випадку це насправді може бути добре - це означає, що камера виконала певні позначення для вас у кольорових каналах. З іншого боку, це, мабуть, означає, що в якийсь момент інформація про кольори також була квантована сильніше яскравості - це не так добре. Тут головне - питання камери, і те, що ви робите, має залежати від камери, яку ви будете використовувати.

Якщо щось тут не має сенсу - залиште коментар.


Дякую за вашу відповідь. Я не можу забезпечити жодне з перерахованого. Це для мобільного додатку, який рахує монети (довільну кількість монет) одним натисканням кнопки (і це дуже швидко!). Таким чином, освітлення може дивовижно змінюватися, і немає також послідовного фону. Я вважаю, що класифікувати типи монет за кольором таким чином (як ви вказуєте) неможливо. Однак мені подобається, що ви відповідаєте за використання L A B * і вважаєте, що це найкраща запропонована відповідь. З огляду на це у вас є відповідь і щедрість. Знову дякую.
MoonKnight

6

У дусі мозкового штурму я поділюсь кількома ідеями, які ви могли б спробувати:

  1. Спробуйте Hue більше? Схоже, Хью дав тобі досить хороший дискримінатор між сріблом та міддю / золотом, хоча не між міддю та золотом, принаймні в єдиному прикладі, який ти показав тут. Чи вивчили ви детальніше, використовуючи відтінок, щоб побачити, чи може бути життєздатною особливістю відрізняти срібло від міді / золота?

    Я б почав, зібравши купу прикладних зображень, які ви позначили вручну, та обчисливши відтінок кожної монети в кожному зображенні. Тоді ви можете спробувати їх гістограмувати, щоб побачити, чи схоже Hue як правдоподібний спосіб дискримінації. Я також можу спробувати переглянути середній відтінок кожної монети, для прикладу на зразок того, який ви подали тут. Ви також можете спробувати насичення, оскільки це, схоже, може бути корисним.

    Якщо це не вдається, ви можете відредагувати своє запитання, щоб показати, що ви намагалися, і навести кілька прикладів, щоб коротко проілюструвати, чому це важко або де це не вдається.

  2. Інші кольорові простори? Аналогічно, ви можете спробувати перетворитись на rg chromacity, а потім експериментувати, щоб дізнатись, чи корисний результат у відмежуванні срібла від міді / золота. Цілком можливо, що це може допомогти налаштувати різницю освітленості, тому варто спробувати.

  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θі значення пікселя в ); то використовуйте норму (сума квадратів) або дещо, щоб об'єднати всі значення різниці в одну метрику того, наскільки близькою є відповідність (тобто ). Вам потрібно буде використовувати досить невеликий крок кроку, що піксельна різниця, ймовірно, спрацює. Наприклад, у вашому прикладі зображення однокілограмова монета має радіус близько 127 пікселів; якщо ви змітаєте значення , збільшуючись на градуса на кожному кроці, тоді вам потрібно буде лише спробувати близько 1460 різних значень обертання, а похибка в окружності монети у найближчому наближенні до справжньогоCL2(x,y)D(x,y)2θ0.25θ має становити щонайменше приблизно чверть пікселя, що є достатньо малим, щоб різниця пікселів могла вийти нормально.

    Ви можете поекспериментувати з різними варіантами цієї ідеї. Наприклад, ви можете працювати з версією зображення в градаціях сірого; повний RGB і використовувати норму всіх трьох різниць R, G, B; повний HSB і використовувати норму всіх трьох різниць H, S, B; або працювати лише з площиною відтінку, насичення або яскравості. Крім того, ще одна можливість полягає у тому, щоб спочатку запустити детектор ребер як на і на , а потім узгодити отримане зображення ребер.L2L2RC

    Для надійності у вас може бути кілька різних еталонних зображень для кожної монети (насправді, кожна сторона кожної монети), і спробуйте всі еталонні зображення, щоб знайти найкраще відповідність.

    Якщо зображення монет не взяті безпосередньо вперед, то в якості першого кроку ви можете обчислити еліпс, який представляє периметр монети на зображенні, і зробити висновок про кут, під яким переглядається монета. Це дозволить вам обчислити, як виглядатиме під цим кутом, перш ніж проводити відповідність.CR

  5. Перевірте, як змінюється колір залежно від відстані від центру? Ось можливий проміжний крок між "середнім кольором монети" (єдиним числом, тобто 0-мірним) та "усім зображенням монети" (двовимірне зображення). Для кожної монети можна обчислити одновимірний вектор або функцію , де являє собою середній колір пікселів на відстані приблизно від центру монети. Потім ви можете спробувати співставити вектор для монети у вашому зображенні проти вектора для еталонного зображення цієї монети.f ( r ) r f C C f R Rff(r)rfCCfRR

    Це може допомогти вам виправити відмінності освітлення. Наприклад, ви можете працювати в масштабі сірого або лише в одній біт-площині (наприклад, відтінок, насиченість або яскравість). Або, можливо, вам вдасться спочатку нормалізувати функцію , віднявши середнє: , де - середній колір монети - потім спробуйте відповідати до .g ( r ) = f ( r ) - μ μ g C g Rfg(r)=f(r)μμgCgR

    Приємне в цьому підході полягає в тому, що вам не потрібно робити висновок, наскільки обертається монета: функція є ротаційною-інваріантною.f

    Якщо ви хочете поекспериментувати з цією ідеєю, я б функцію для різноманітних різних зображень та графів їх. Тоді ви повинні мати можливість візуально їх оглянути, щоб побачити, чи функція здається відносно стійкою, незалежно від освітленості. Можливо, вам доведеться спробувати це для декількох різних можливостей (масштаб сірого, кожен з бітових площин HSB тощо).fC

    Якщо монетаfCCf

  6. Подивіться алгоритми зору на сталість кольорів. Спільнота комп'ютерного зору вивчила сталість кольорів , проблему виправлення невідомого джерела освітлення; див., наприклад, цей огляд . Ви можете вивчити деякі алгоритми, отримані для цієї проблеми; вони намагаються зробити висновок про джерело освітлення, а потім виправити його, щоб отримати зображення, яке ви отримали, якби зображення було зроблене з опорним джерелом освітлення.

  7. Подивіться на постійне кольорове індексування кольорів. Як я розумію, основна ідея CCCI полягає в тому, щоб спочатку скасувати невідоме джерело освітлення, замінивши значення R кожного пікселя співвідношенням між його R-значенням та одним із R-значень свого сусіда; і аналогічно для площин G і B. Ідея полягає в тому, що (сподіваємось), ці співвідношення тепер мають здебільшого не залежати від джерела освітлення. Потім, отримавши ці коефіцієнти, ви обчислюєте гістограму співвідношень, присутніх на зображенні, і використовуєте це як підпис зображення. Тепер, якщо ви хочете порівняти зображення монети з еталонним зображенням , ви можете порівняти їхні підписи, щоб побачити, чи вони здаються збігаються. У вашому випадку вам може знадобитися також коригування кута, якщо зображення монетиR CCRC не було прийнято лобово - але, здається, це може допомогти зменшити залежність від джерела освітлення.

Я не знаю, чи є в когось із них шанс працювати, але це кілька ідей, які ви можете спробувати.


3

Цікава проблема та хороша робота.

Спробуйте використовувати середні значення кольору, а не середні. Це буде більш стійким до зовнішніх значень завдяки яскравості та насиченості. Спробуйте використовувати лише один із компонентів RGB замість усіх трьох. Виберіть компонент, який найкраще розрізняє кольори. Ви можете спробувати побудувати гістограми значень пікселів (наприклад, одного з компонентів RGB), щоб дати уявлення про властивості розподілу пікселів. Це може запропонувати рішення, яке не відразу очевидно. Спробуйте скласти RGB-компоненти в 3D-просторі, щоб побачити, чи дотримуються вони будь-якого зразка, наприклад, вони можуть лежати близько до лінії, що вказує на те, що лінійна комбінація компонентів RGB може бути кращим класифікатором, ніж окрема.


Хороший крик з медіаною, адже я також зашифрував це, і це теж погано з точки зору встановлення правильного кольору. Підходячи до гістограми, я знаю обчислювальні витрати; як тільки я почну перебирати пікселі в 2D, я стягуватиму плату! Незважаючи на це, можливо, варто мені поставити щось подібне (як ви вказуєте), щоб встановити будь-які кореляції. Я створив всілякі сюжети для компонентів RGB і завдяки різним умовам освітлення (наслідок фотографування в різних місцях) значення RGB можуть сильно збігатися для всіх трьох типів монет.
MoonKnight

Я також розглядав підходящу модель, щоб оцінити задню ймовірність того, що точка кольорового простору належить певному типу монети. Я також дивився на моделювання суміші Гаусса, але я ще не дуже далеко до цього справи. Мене також поінформували про інший (дещо довільний, але простіший) підхід, і це використовувати щось на зразок інтерполяції найближчих сусідів. Дякую за ваш час.
MoonKnight

1
Зовсім інша доріжка, інша відмінність між монетами - це дизайн спереду / ззаду (хоча деякі можуть мати однаковий дизайн на одній стороні) А як щодо перехресного співвіднесення набору шаблонів дизайну з пікселями монети (або з використанням взаємної інформації) щоб визначити, яку монету ви шукаєте. Завдяки поєднанню співвідношень, кольорів пікселів та відповідності дизайну ви, ймовірно, зможете знизити показник помилкового виявлення.
мартіно

Я подумав про це - але це вимагає занадто багато поточного програмного забезпечення для розпізнавання і було б масовою роботою писати з нуля (OCR ??). Також є величезна різниця у графіці таких монет, що робить таке втілення головним кошмаром. Пізніше я зіграю виставу - доповіду про те, що знайду. Знову дякую.
MoonKnight

Чому потік? Якщо є проблема з відповіддю, було б корисно її вказати - я не можу побачити її
мартіно
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.