วิธีที่ถูกต้องที่สุดในการกำหนดสีของวัตถุคืออะไร?


33

ฉันเขียนโปรแกรมคอมพิวเตอร์ที่สามารถตรวจจับเหรียญในรูปภาพนิ่ง (.jpeg, .png ฯลฯ ) โดยใช้เทคนิคมาตรฐานสำหรับการมองเห็นคอมพิวเตอร์ (Gaussian Blur, thresholding, Hough-Transform เป็นต้น) ด้วยการใช้อัตราส่วนของเหรียญที่หยิบขึ้นมาจากภาพที่กำหนดฉันสามารถสร้างด้วยความมั่นใจที่ดีว่าเหรียญใด อย่างไรก็ตามฉันต้องการเพิ่มระดับความมั่นใจของฉันและกำหนดด้วยว่าเหรียญที่ฉันอนุมานว่าเป็นประเภท A (จากอัตราส่วนรัศมี) ก็เป็นของ colo ที่ถูกต้องเช่นกัน ปัญหาคือว่าสำหรับเหรียญอังกฤษและคณะ (ทองแดง, เงิน, ทองคำ) สีที่เกี่ยวข้อง (โดยเฉพาะทองแดงกับทอง) มีความคล้ายคลึงกันมาก

ฉันมีงานประจำที่แยกสีค่าเฉลี่ยของเหรียญที่กำหนดในรูปของ 'color-space' RedGreenBlue (RGB) และรูทีนการแปลงสีนี้เป็น HueSaturationBrightness (HSB หรือ HSV) 'color-space'

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 (Summery of Outcome)

ขอบคุณสำหรับคำตอบ การวิจัยเพิ่มเติมของฉันเอง (รวมถึงคำตอบและความคิดเห็นของคุณ) ได้เน้นว่าปัญหานี้ยากเพียงใดที่จะจัดการกับในกรณีทั่วไปของแสงตามอำเภอใจ, กล้องโดยพลการ (อุปกรณ์เคลื่อนที่), ความผันผวนของสีเหรียญ (แม้แต่ชนิด / ชนิดเดียวกัน) ฯลฯ ฉันแรกดูที่การรับรู้สีผิว (เขตการวิจัยที่ใช้งานมาก) เป็นจุดเริ่มต้นและยังคงมีปัญหามากมายแม้จะมีการรับรู้ของสีผิวสำหรับคนผิวขาวคนเดียว (ดูบทความนี้เพื่อทบทวนเทคนิคในปัจจุบัน) และความจริงที่ว่าปัญหานี้มีวัตถุสีที่แตกต่างกันสามแบบซึ่งทั้งหมดสามารถมีสีที่ต่อเนื่องและแตกต่างกันทำให้หัวข้อของการมองเห็นคอมพิวเตอร์นี้เป็นเรื่องยากมากที่จะจำแนกและจัดการกับมัน (ในความเป็นจริงคุณสามารถทำปริญญาเอก !)

ฉันตรวจสอบวิธีการ จำกัด ขอบเขตจากโพสต์ DW ที่เป็นประโยชน์มากด้านล่าง นี่เป็นครั้งแรกที่มีแนวโน้มว่าจะเป็นขั้นตอนก่อนการประมวลผลเพื่อแปลงภาพและวัตถุเหรียญแยกเป็นสีที่เป็นอิสระจากสภาพแสง อย่างไรก็ตามถึงกระนั้นเทคนิคนี้ก็ใช้งานไม่ได้อย่างสมบูรณ์ (และเกี่ยวข้องกับไลบรารีของรูปภาพ / ฮิสโตแกรมสำหรับการแมป - ซึ่งฉันไม่ต้องการเข้าไป) และไม่ใช้วิธีการของโครงข่ายประสาทเทียมที่ซับซ้อนมากขึ้น ในความเป็นจริงกระดาษนี้ระบุในนามธรรมที่:

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

ไม่ใช่เพื่อบอกว่าไม่มีเอกสารที่ทันสมัยมากขึ้นในหัวข้อนี้ แต่ฉันหามันไม่พบและดูเหมือนจะไม่เป็นงานวิจัยที่จริงจังมากในเวลานี้

คำตอบโดย AVB ก็ยังเป็นประโยชน์และฉันได้มองเข้าไปใน 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 * ฉันจะละเลยสีเหรียญและมองเพื่อให้แน่ใจว่าอัลกอริทึมการตรวจจับทางเรขาคณิตของฉันในปัจจุบัน

ขอบคุณทุกท่าน และเพื่อเป็นข้อสังเกตสำหรับคำถามนี้นี่คือภาพเดียวกันกับอัลกอริทึมการตรวจจับรูปทรงเรขาคณิตใหม่ซึ่งไม่มีการรับรู้สี:

ป้อนคำอธิบายรูปภาพที่นี่


1
ภาพจะมีพื้นหลังสีเดียวกันหรือไม่ หรือคุณสามารถแนะนำวัตถุ 'มาตรฐานสี' อื่น ๆ ลงในภาพได้ ถ้าเป็นเช่นนั้นคุณมีวิธีการปรับแสงที่แตกต่างกันไป ถ้าไม่อาจจะยาก ..
OneStop

2
มันไม่ใช่แค่แสงสีที่เห็นได้ชัด ฉันค่อนข้างมั่นใจว่าแสงแดดแสงฟลูออเรสเซนต์และแสงจากหลอดไส้มีสีที่แตกต่างกันมากพอที่จะจับคู่การจับคู่สี HSB แม้ว่าดวงตาของเราจะปรับตัวเพื่อให้เราไม่รับรู้สิ่งที่เปลี่ยนสี
Peter Shor

2
(+1) คำถามน่าสนใจและท้าทาย ฉันรู้สึกว่ามันต้องมีการปรับแต่งเพื่อให้มีโอกาสที่ดีที่คำตอบที่ดี ตามที่ระบุไว้ในปัจจุบันมันเส้นขอบในการถูกวางไม่ดี สำหรับวิธีแก้ปัญหาที่ใช้งานได้จริงคุณจะต้องให้รายละเอียดเพิ่มเติมเกี่ยวกับช่วงของสภาพแวดล้อมที่คุณต้องการให้สามารถทำการจำแนกประเภทนี้ได้ พื้นหลังสีอะไรที่เป็นไปได้? จำนวนเหรียญเท่ากันเสมอหรือไม่ คุณจะมีภาพสีเสมอหรือไม่? แสงรอบข้างดีหรือไม่? การรู้ลักษณะต่าง ๆ เหล่านี้สามารถเป็นแนวทางในการแก้ปัญหา
พระคาร์ดินัล

2
ฉันคิดว่าปัญหาที่คุณเผชิญคือ "ความมั่นคงของสี" คำค้นหาอื่น ๆ น่าจะเป็น "การลดความสว่าง" หรือ "การลดพื้นหลัง" มันเป็นปัญหาที่ยังไม่แก้ในวิทยาศาสตร์การมองเห็น
caracal

1
หวังว่าฉันจะ +1 ได้อีกครั้งเพื่อการติดตามที่ดี! สิ่งที่น่าสนใจมาก
Matt Parker

คำตอบ:


6

สองสิ่งสำหรับผู้เริ่มต้น

หนึ่งแน่นอนไม่ทำงานใน RGB ค่าเริ่มต้นของคุณควรเป็นพื้นที่สีของ Lab (aka CIE L * a * b *) Lยกเลิก จากภาพของคุณดูเหมือนว่าaพิกัดให้ข้อมูลมากที่สุด แต่คุณควรทำการวิเคราะห์องค์ประกอบหลักaและbและทำงานตามองค์ประกอบแรก (สำคัญที่สุด) เพียงเพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น หากวิธีนี้ใช้ไม่ได้คุณสามารถลองเปลี่ยนเป็นรุ่น 2D

เพียงเพื่อให้ได้ความรู้สึกมันaเหรียญสามสีเหลืองมีค่ามาตรฐานต่ำกว่า 6 และค่า 137 ("ทอง"), 154 และ 162 ควรแยกแยะได้

ประการที่สองปัญหาแสง ที่นี่คุณจะต้องกำหนดปัญหาของคุณอย่างรอบคอบ หากคุณต้องการแยกสีที่ใกล้เคียงภายใต้แสงไฟและในบริบทใด ๆ คุณไม่สามารถทำได้เช่นนี้ หากคุณกังวลเกี่ยวกับความแปรปรวนของท้องถิ่นแล็บส่วนใหญ่จะดูแลเรื่องนี้ หากคุณต้องการทำงานทั้งใต้แสงกลางวันและแสงจากหลอดไส้คุณสามารถมั่นใจได้ว่าพื้นหลังสีขาวสม่ำเสมอเหมือนภาพตัวอย่างของคุณหรือไม่? โดยทั่วไปสภาพแสงของคุณคืออะไร?

ภาพของคุณถูกถ่ายด้วยกล้องราคาถูกพอสมควร มันอาจมีคุณสมบัติสมดุลสีขาวอัตโนมัติบางประเภทซึ่งทำให้สีดูแย่ลง - ปิดถ้าคุณทำได้ นอกจากนี้ยังดูเหมือนว่าภาพทั้งสองได้รับการเข้ารหัสใน YCbCr ในบางจุด (เกิดขึ้นมากถ้าเป็นกล้องวิดีโอ) หรือในรูปแบบที่แตกต่างกันของ JPG ข้อมูลสีมีการขยายตัวอย่างน้อยมาก ในกรณีของคุณมันอาจจะดีจริง ๆ - หมายความว่ากล้องได้ทำการ denoising ให้คุณในช่องสี ในทางกลับกันก็อาจหมายความว่าในบางครั้งข้อมูลสีก็ถูกวัดปริมาณได้ดีกว่าความสว่างซึ่งก็ไม่ดีเช่นกัน สิ่งสำคัญที่นี่คือ - เรื่องกล้องและสิ่งที่คุณควรทำขึ้นอยู่กับกล้องที่คุณจะใช้

หากสิ่งใดที่นี่ไม่สมเหตุสมผล - แสดงความคิดเห็น


ขอบคุณสำหรับคำตอบ. ฉันไม่สามารถมั่นใจในสิ่งที่กล่าวมาข้างต้น นี่คือแอปพลิเคชั่นมือถือที่นับเหรียญ (จำนวนเหรียญตามอำเภอใจ) เพียงคลิกปุ่ม (และเร็วมาก!) ดังนั้นแสงสามารถแตกต่างกันอย่างดุเดือดและไม่มีพื้นหลังที่สอดคล้องกันอย่างใดอย่างหนึ่ง ฉันเชื่อว่าการแยกประเภทเหรียญด้วยสีในลักษณะนี้ (ตามที่คุณชี้ให้เห็น) เป็นไปไม่ได้ อย่างไรก็ตามฉันชอบที่คุณตอบว่าใช้ L A B * และเชื่อว่าเป็นคำตอบที่ดีที่สุด ด้วยเหตุนี้คุณจึงมีคำตอบและความกรุณา ขอบคุณอีกครั้ง.
MoonKnight

6

ด้วยจิตวิญญาณของการระดมสมองฉันจะแบ่งปันความคิดที่คุณสามารถลองได้:

  1. ลองเว้มากกว่านี้ไหม? ดูเหมือนว่าเว้จะให้คุณเลือกปฏิบัติที่ดีงามระหว่างเงินและทองแดง / ทองคำแม้ว่าจะไม่ได้อยู่ระหว่างทองแดงกับทองคำอย่างน้อยก็ในตัวอย่างเดียวที่คุณแสดงให้เห็นที่นี่ คุณได้ตรวจสอบโดยใช้ฮิวอย่างละเอียดเพื่อดูว่ามันอาจเป็นคุณสมบัติที่ทำงานได้หรือไม่ในการแยกแยะเงินจากทองแดง / ทองคำ?

    ฉันอาจเริ่มต้นด้วยการรวบรวมรูปภาพตัวอย่างจำนวนมากซึ่งคุณมีป้ายกำกับด้วยตนเองและคำนวณฮิวของเหรียญแต่ละเหรียญในแต่ละภาพ จากนั้นคุณอาจลองใช้ฮิสโตแกรมในการดูว่าฮิวมีลักษณะที่น่าเชื่อถือในการเลือกปฏิบัติหรือไม่ ฉันอาจลองดูค่าเฉลี่ยของแต่ละเหรียญเพื่อดูตัวอย่างหนึ่งตัวอย่างที่คุณนำเสนอที่นี่ คุณอาจลองใช้ความอิ่มตัวด้วยเช่นกันซึ่งอาจดูเหมือนว่ามีประโยชน์เช่นกัน

    หากสิ่งนี้ล้มเหลวคุณอาจต้องการแก้ไขคำถามของคุณเพื่อแสดงสิ่งที่คุณได้ลองและยกตัวอย่างบางส่วนเพื่อให้เข้าใจอย่างชัดเจนว่าทำไมเรื่องนี้ถึงยากหรือที่ใดที่ล้มเหลว

  2. ช่องว่างสีอื่น ๆ ในทำนองเดียวกันคุณอาจลองเปลี่ยนเป็นความเป็นrgแล้วทดลองดูว่าผลลัพธ์นั้นมีประโยชน์ในการแยกแยะเงินจากทองแดง / ทองคำหรือไม่ เป็นไปได้ว่าสิ่งนี้อาจช่วยปรับเปลี่ยนรูปแบบการส่องสว่างดังนั้นจึงควรลอง

  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

    เพื่อความทนทานคุณอาจมีภาพอ้างอิงหลายภาพที่แตกต่างกันสำหรับแต่ละเหรียญ (อันที่จริงแต่ละด้านของแต่ละเหรียญ) และลองรูปภาพอ้างอิงทั้งหมดเพื่อค้นหาสิ่งที่ดีที่สุด

    CR

  5. ff(r)rfCCfRR

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

    f

    fC

    CCf

  6. ดูอัลกอริธึมการมองเห็นเพื่อหาค่าคงที่ของสี ชุมชนการมองเห็นคอมพิวเตอร์ได้ศึกษาความคงตัวของสีปัญหาของการแก้ไขแหล่งกำเนิดแสงที่ไม่รู้จัก เห็นเช่นภาพรวมนี้ คุณอาจสำรวจบางส่วนของอัลกอริทึมที่ได้รับสำหรับปัญหานี้ พวกเขาพยายามที่จะอนุมานแหล่งที่มาของการให้ความสว่างและแก้ไขให้ถูกต้องเพื่อให้ได้มาซึ่งภาพที่คุณจะได้รับหากมีการถ่ายภาพด้วยแหล่งที่มาของการอ้างอิง

  7. CRC

ฉันไม่รู้ว่าสิ่งเหล่านี้มีโอกาสในการทำงานหรือไม่ แต่เป็นแนวคิดที่คุณสามารถลองได้


3

ปัญหาที่น่าสนใจและการทำงานที่ดี

ลองใช้ค่าสีเฉลี่ยมากกว่าค่าเฉลี่ย สิ่งนี้จะแข็งแกร่งกว่าค่าที่ผิดเนื่องจากความสว่างและความอิ่มตัว ลองใช้หนึ่งในองค์ประกอบ RGB แทนทั้งสามอย่าง เลือกส่วนประกอบที่แยกความแตกต่างของสีได้ดีที่สุด คุณสามารถลองพล็อตฮิสโทแกรมของค่าพิกเซล (เช่นหนึ่งในองค์ประกอบ RGB) เพื่อให้ความคิดเกี่ยวกับคุณสมบัติของการกระจายพิกเซล นี่อาจแนะนำวิธีแก้ไขที่ไม่ชัดเจนในทันที ลองทำการวางองค์ประกอบ RGB ในพื้นที่ 3 มิติเพื่อดูว่าพวกมันทำตามรูปแบบใด ๆ หรือไม่ตัวอย่างเช่นพวกมันอาจอยู่ใกล้กับบรรทัดที่ระบุว่าการรวมกันเชิงเส้นของส่วนประกอบ RGB อาจเป็นลักษณนามที่ดีกว่าของแต่ละคน


เสียงโห่ร้องดีกับค่ามัธยฐานในความเป็นจริงฉันได้เข้ารหัสนี้และสิ่งนี้ยังยากจนในแง่ของการสร้างสีที่ถูกต้อง ด้วยวิธีฮิสโตแกรมฉันก็ตระหนักถึงค่าใช้จ่ายในการคำนวณ ทันทีที่ฉันเริ่มวนลูปผ่านพิกเซลใน 2D ฉันจะต้องเสียค่าใช้จ่าย! มันก็คุ้มค่าที่ฉันจะเอาอะไรทำนองนี้ใน (ตามที่คุณชี้) เพื่อสร้างความสัมพันธ์ใด ๆ ฉันผลิตพล็อตทุกประเภทสำหรับส่วนประกอบ RGB และเนื่องจากสภาพแสงที่แตกต่างกัน (เนื่องจากการถ่ายภาพในสถานที่ต่างกัน) ค่า RGB สามารถซ้อนทับกันอย่างหนักสำหรับเหรียญทั้งสามประเภท
MoonKnight

ฉันได้ดูแบบจำลองที่เหมาะสมเพื่อประเมินความน่าจะเป็นด้านหลังของจุดสีที่เป็นของเหรียญบางประเภท ฉันได้ดูแบบจำลองการผสมแบบเกาส์ด้วยเช่นกัน แต่ฉันยังไม่ได้ทำสิ่งนี้มากนัก ฉันยังได้รับแจ้งเกี่ยวกับวิธีการอื่น (โดยพลการ แต่ค่อนข้างง่ายกว่า) และนั่นคือการใช้บางอย่างเช่นการแก้ไขเพื่อนบ้านที่ใกล้ที่สุด ขอบคุณที่สละเวลา.
MoonKnight

1
ในแทร็คที่แตกต่างอย่างสิ้นเชิงความแตกต่างระหว่างเหรียญคือการออกแบบที่ด้านหน้า / หลัง (แม้ว่าบางคนอาจมีการออกแบบที่เหมือนกันในด้านใดด้านหนึ่ง) สิ่งที่เกี่ยวกับการข้ามชุดของรูปแบบการออกแบบกับพิกเซลเหรียญ (หรือใช้ข้อมูลร่วมกัน) เพื่อช่วยกำหนดเหรียญที่คุณกำลังดู ด้วยการผสมผสานระหว่างอัตราส่วนสีพิกเซลและการออกแบบนี้เข้ากันคุณอาจจะสามารถลดอัตราการค้นพบที่ผิดพลาดได้
martino

ฉันเคยคิดถึงเรื่องนี้ - แต่สิ่งนี้กำลังขอซอฟต์แวร์การจดจำในปัจจุบันมากเกินไปและจะเป็นงานที่ยิ่งใหญ่ที่จะเขียนตั้งแต่เริ่มต้น (OCR ??) นอกจากนี้ยังมีการเปลี่ยนแปลงขนาดใหญ่ในกราฟิกบนเหรียญดังกล่าวซึ่งทำให้การดำเนินการดังกล่าวเป็นฝันร้ายการบำรุงรักษา ฉันจะเล่นในภายหลัง - ฉันจะรายงานสิ่งที่ฉันพบ ขอบคุณอีกครั้ง.
MoonKnight

ทำไมต้องลงคะแนน หากมีปัญหากับคำตอบมันจะเป็นประโยชน์ในการชี้ให้เห็น - ฉันไม่เห็นเลย
martino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.