เหตุใดเราจึงใช้พื้นที่สี HSV บ่อยครั้งในการมองเห็นและการประมวลผลภาพ


64

ฉันเห็นพื้นที่สี HSV ใช้ทั่วสถานที่: สำหรับการติดตามการตรวจจับของมนุษย์ ฯลฯ ... ฉันสงสัยว่าทำไม มันเกี่ยวกับพื้นที่สีนี้ที่ทำให้ดีกว่าการใช้ RGB?


3
นี่เป็นคำถามที่ดีมาก ในความคิดของฉันมันจะได้ประโยชน์จากการมีรายละเอียดเพิ่มเติมเล็กน้อย: HSV คืออะไร RGB คืออะไร เนื่องจากคำตอบส่วนใหญ่เปรียบเทียบ HSV กับ RGB ชื่ออาจถูกนำมาใช้ใหม่เพื่อเปรียบเทียบช่องว่างสองสีนี้
PhilMacKay

2
อีกคำถามที่ดีอาจเป็น "ทำไม HSV ถูกใช้ทั่วสถานที่แทนที่จะเป็น HSL"
posfan12

คำตอบ:


60

คำตอบง่ายๆคือไม่เหมือนRGB , HSVแยกlumaหรือความเข้มของภาพจากchromaหรือข้อมูลสี สิ่งนี้มีประโยชน์มากในหลาย ๆ แอปพลิเคชัน ตัวอย่างเช่นหากคุณต้องการปรับสมดุลของฮิสโตแกรมของภาพสีคุณอาจต้องการทำเช่นนั้นกับองค์ประกอบความเข้มเท่านั้นและปล่อยให้องค์ประกอบสีอยู่คนเดียว ไม่งั้นคุณจะได้สีที่แปลกมาก

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

อย่างไรก็ตามโปรดทราบว่า HSV เป็นหนึ่งในช่องว่างสีจำนวนมากที่แยกสีจากความเข้ม (ดู YCbCr, Lab, ฯลฯ ) HSV มักจะใช้เพียงเพราะรหัสสำหรับการแปลงระหว่าง RGB และ HSV นั้นมีให้ใช้อย่างกว้างขวางและยังสามารถนำไปใช้งานได้ง่าย ยกตัวอย่างเช่นกล่องเครื่องมือสำหรับการประมวลผลภาพ MATLAB รวมถึงฟังก์ชั่นและrgb2hsvhsv2rgb


42

ข้อมูลสีมักมีเสียงรบกวนมากกว่าข้อมูล HSV

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

คุณมักจะได้รับข้อมูลที่ดีจาก colorspace ให้ฉันลองและยกตัวอย่างประสบการณ์ส่วนตัวอีกครั้งลองจินตนาการว่าคุณมีภาพของระนาบสีเดียวที่มีเงาอยู่ ในพื้นที่สี RGB ส่วนที่เป็นเงาจะมีลักษณะแตกต่างจากส่วนที่ไม่มีเงามากที่สุด ใน HSV colourspace องค์ประกอบสีของแพทช์ทั้งสองมีแนวโน้มที่จะใกล้เคียงกันมากขึ้น: เงาจะมีอิทธิพลต่อค่าหรือองค์ประกอบความอิ่มตัวในขณะที่สีแสดงถึง "สี" หลัก (โดยไม่มีความสว่างและเจือจางตามสีขาว) / black) ไม่ควรเปลี่ยนแปลงมากนัก

หากคำอธิบายนี้ไม่ฟังดูง่ายสำหรับคุณฉันขอแนะนำ:

  • ลองและเข้าใจองค์ประกอบที่ใช้เพื่อแสดงสีใน HSV colourspace และทำความรู้จักกับ RGB ให้ดีขึ้น
  • ลองดูเหตุผลว่าทำไมการแสดงสีแบบนี้ได้รับการพัฒนาขึ้นมา: มันมักจะเป็นไปในทางใดทางหนึ่งตามมุมมองของการตีความสีของมนุษย์

    เช่นเด็กไม่จริงเช่นสูงสี == มูลค่าวัตถุพวกเขาต้องการที่สูงsatuatedวัตถุวัตถุซึ่งเป็นสีที่รุนแรงและไม่เจือจาง

  • หลังจากคุณได้รับสิ่งนี้และพัฒนาสัญชาตญาณคุณควรเล่นกับภาพ: ลองแยกภาพต่าง ๆ ในส่วนประกอบ RGB และ HSV ของพวกเขา

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

  • หากคุณมีรูปแบบเฉพาะที่คุณต้องการเล่นลองแยกย่อยมัน: ใครจะรู้บางที RGB นั้นเหมาะกับความต้องการของคุณมากกว่า HSV :)


1
หากเป็นเงาควรเปลี่ยนเฉพาะความสว่างไม่ใช่ความอิ่มตัว
Andrey Rubshtein

@Andrey อย่างที่ฉันบอกว่าฉันไม่ได้ใช้วิธีการตามสี แต่ฉันสามารถคาดเดาได้ว่าถ้าไม่ได้เป็นเพียงเงา - อาจมีแสงทางอ้อมจากสภาพแวดล้อมหรือสิ่งที่คล้ายกันมีบทบาท
Penelope

1
คุณพูดถูก อย่างไรก็ตามในกรณีของแสงทางอ้อมฮิวอาจเปลี่ยนไปเช่นกัน
Andrey Rubshtein

1
@Andrey ดังนั้นถ้อยคำของฉัน: "มีแนวโน้มมากขึ้น", "คล้ายกัน", "อิทธิพลหลัก", ... หลังจากทั้งหมดฉันไม่ได้อธิบาย HSV เพียงแค่ให้ตัวอย่างและการคาดเดาการศึกษาตามประสบการณ์ และวิธีที่ดีที่สุดในการเลือกที่เหมาะสมที่สุดสีพื้นที่สำหรับการใด ๆการประยุกต์ใช้คือการเล่นรอบกับฐานข้อมูลภาพและสีที่แตกต่างกันช่องว่าง
Penelope

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

8

การใช้เฉพาะองค์ประกอบของเว้ทำให้อัลกอริทึมมีความละเอียดอ่อนน้อยลง

อีกตัวเลือกยอดนิยมคือพื้นที่สี LAB ที่ช่อง AB แสดงระยะทางสีและปริภูมิแบบยุคลิดในพื้นที่ AB ให้ตรงกับการรับรู้สีของมนุษย์มากขึ้น การเพิกเฉยช่อง L (ความส่องสว่าง) อีกครั้งทำให้อัลกอริทึมมีความทนทานต่อความแตกต่างของแสงมากขึ้น


7

คำตอบที่ดีที่สุดที่ฉันสามารถทำได้คือ: RGB ต้องเกี่ยวข้องกับ "รายละเอียดการใช้งาน" เกี่ยวกับวิธีที่ RGB แสดงสีและ HSV เกี่ยวข้องกับส่วนประกอบ "สีจริง" อีกวิธีหนึ่งในการบอกว่านี่คือ RGB คือวิธีที่คอมพิวเตอร์ใช้สีและ HSV พยายามจับองค์ประกอบของวิธีที่เรารับรู้สี

ฉันจะทำอย่างละเอียด:

สีคือการรับรู้ตามคลื่นแม่เหล็กไฟฟ้า คุณสมบัติตามธรรมชาติของคลื่นเหล่านี้ยกตัวอย่างเช่นความเข้มและความถี่ หากเรากวาดความถี่ของคลื่นแสงจากอินฟาเรดถึงอัลตร้าไวโอเลตเราจะเห็นการเปลี่ยนแปลงของสีตามสีรุ้ง สีรุ้งอาจถือได้ว่าเป็น "บริสุทธิ์" เพราะมันเป็นตัวแทนของคลื่นความถี่เดียว

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

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

ตัวอย่างเช่นการดำเนินการเกี่ยวกับคณิตศาสตร์ใด ๆ ดำเนินการช่องสัญญาณที่ชาญฉลาดในพื้นที่ RGB (ตัวอย่างเช่นการสร้างการไล่ระดับสี) ให้ผลลัพธ์ที่หยาบหรือแม้กระทั่งชัดเจนว่า "ผิด" นั่นคือเหตุผลที่แนะนำให้สร้าง colormaps โดยการแปลงสีหยุดจาก RGB ไปเป็นช่องว่างสีอื่น (HLS, Lab, ฯลฯ ) ทำการดำเนินการแก้ไขแล้วแปลงค่าที่ถูกแปลงกลับไปเป็น RGB

หวังว่านี่จะช่วยได้!


2
ฉันไม่เห็นด้วย มีสามโดเมนไม่ใช่สอง: มนุษย์คอมพิวเตอร์และฟิสิกส์ แบบจำลอง RGB นั้นมาจากสายตามนุษย์ซึ่งมีตัวรับสีสามสี
MSalters

@Malters ฉันคิดว่าเรากำลังพูดถึงสิ่งเดียวกัน (แม้ว่าบางทีฉันอาจไม่ได้ทำให้ตัวเองชัดเจน) จอแสดงผล RGB ทำขึ้นเพื่อให้ตรงกับระบบรับรู้สี พวกเขามีคอมพิวเตอร์ส่วนเคาน์เตอร์ (R, G, B) "พิกัด" ตั้งแต่พิกัดเหล่านี้ map ในการดำเนินการค่อนข้างกับคุณสมบัติทางกายภาพ "ธรรมชาติที่แท้จริง" คุณสมบัติของสีที่พวกเขาจะไม่เหมาะกับการดำเนินการประมวลผลทางคณิตศาสตร์บางเช่นเส้นตรง perceptually ลาดแก้ไขการแก้ไขสี, ความสว่างและความอิ่มตัว Ops ฯลฯ
heltonbiker

2

HSV ย่อมาจาก Hue-Saturation-Value จริงๆแล้วมันเป็นประเภทของการแสดงระนาบสี (เช่น RGB, YCbCr เป็นต้น)

มันเป็นรูปแบบการแสดงสีที่เป็นอิสระจากอุปกรณ์: การแสดงสี HSV มีประโยชน์ในการตรวจจับประเภทสีที่เฉพาะเจาะจงเช่น: สีผิวสีไฟ ฯลฯ

Matlabฟังก์ชั่นการแปลงภาพ RGB กับระนาบ HSV rgb2hsv('/inputimage_name')คือ


1

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


1

ไม่มีอะไรที่ฉันรู้ว่าดีกว่าโดยเฉพาะกับ HSV เมื่อเทียบกับ YUV หรือ LAB ที่จะทำให้ดีขึ้นสำหรับการดึงคุณสมบัติและการแปรปรวนของแสงหรือการมองเห็น ฉันคิดว่า HSV เป็นสิ่งที่ใช้บ่อยกว่าเนื่องจากการประชุมและความต่อเนื่อง: ง่ายกว่าในการเปรียบเทียบผลลัพธ์และสื่อสารกันถ้าคุณทั้งคู่ใช้ colorpace เดียวกัน

จากที่กล่าวมา HSV (เมื่อเทียบกับ RGB) ใช้ในการมองเห็นคอมพิวเตอร์ด้วยเหตุผล 2 ประการที่ฉันรู้:

  1. การแสดง เมื่อใดก็ตามที่คุณมีข้อมูลทิศทางอยู่เหนือรูปภาพ HSV จะเป็นพื้นที่สีที่ดีสำหรับการสร้างภาพ แทนที่จะพล็อตเวกเตอร์เล็ก ๆ เหนือรูปภาพ (พวกมันจะเกะกะทุกอย่าง) คุณสามารถพล็อตสีด้วย HSV โดยวางเวกเตอร์ทิศทางลงใน H (มุมเวกเตอร์) และ S (ขนาดเวกเตอร์) สิ่งนี้จะทำให้องค์ประกอบค่าซึ่งสามารถตั้งค่าได้หลายวิธีขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ ดูตัวอย่างด้านล่างจากชุดข้อมูลโฟลว์ออปติคอลมิดเบอรี HSV ใช้เพื่อแสดงทิศทางอย่างหนาแน่น

ตัวอย่างจากฐานข้อมูลขนาดกลางบนโฟลว์ออปติคอล

  1. การสกัดคุณลักษณะและค่าคงที่ความส่องสว่างตามที่อธิบายไว้ในคำตอบอื่น ๆ

0

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

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

มีช่องว่างสีเชิงเส้นมากมายที่ให้การแยกลูม่า - โครมาเหมือนกันในขณะที่รักษาลิเนียริตี้ (YCbCr, YUV) หรือการมองเห็นของมนุษย์ในรูปแบบที่เหมาะสม (LUV, LAB) เมื่อเทียบกับที่คุณสามารถเปรียบเทียบสองสีโดยใช้ Euclidean L2 norm บนสีของพวกเขาส่งผลให้อัลกอริทึมที่แข็งแกร่งยิ่งขึ้นโดยรวม

ทำไมจึงใช้ HSV / HSL บ่อยครั้ง ยากที่จะให้คำตอบที่มีวัตถุประสงค์ จากประสบการณ์ของฉันส่วนใหญ่เกิดจากความไม่รู้และความพร้อมใช้งานของรูทีนการแปลง RGB-> HSV ต้องทำงานกับรหัสที่ผู้เขียนไม่เข้าใจการแก้ไขแกมม่าให้เว้นวรรคสีที่แตกต่างกันเพียงอย่างเดียว รหัสที่เห็นว่าแปลง RGB เป็น HSV จะแบ่งภาพตามเฉดสีโดยไม่คำนึงถึงความจริงที่ว่ามันเป็นปริมาณแบบแยกส่วน ฉันคิดว่าเราสามารถตกลงกันได้ว่าการตัดสินใจที่ไม่ใส่ใจนั้นได้รับการสนับสนุนด้วยเหตุผลใด ๆ


-1

โมเดลสี HSV มีความสัมพันธ์กับวิธีที่มนุษย์มองเห็นวัตถุสีมากกว่าเมื่อเทียบกับ RGB, YUV, แล็บ ฯลฯ

เราเห็นว่าวัตถุมีสีอะไร (ฮิว) มันอิ่มตัวมากแค่ไหน (ความอิ่มตัว) และแสงสีขาวตกลงมาเท่าใด

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