หากคุณสามารถประมวลผลไฟล์ RAW ได้คุณจะมีอาร์เรย์พิกเซลแบบไบเออร์ซึ่งประกอบด้วยแถว RGRGRG และ GBGBGB (หรืออาจเป็นแถว RGBGRGBG) คุณไม่ต้องสนใจพิกเซล R และ B ทั้งหมดรวมพิกเซล G นำรากที่สอง ( เนื่องจากมีพิกเซลสีเขียวจำนวนมากเป็นสองเท่าของที่มีสีแดงหรือสีน้ำเงิน) และหารด้วยจำนวนครึ่งหนึ่งของพิกเซล G ซึ่งควรให้ค่าเฉลี่ยถ่วงน้ำหนักที่เหมาะสมสำหรับ "สีเขียว" ในรูปภาพของคุณ จากนั้นคุณสามารถหาค่าเฉลี่ยของสีแดงและสีน้ำเงินและคำนวณเปอร์เซ็นต์สีเขียวของคุณจากค่าเฉลี่ยทั้งสาม
เพื่อความแม่นยำยิ่งขึ้นคุณอาจต้องคำนึงถึงน้ำหนักที่เหมาะสมสำหรับพิกเซลเซ็นเซอร์สีแดงสีเขียวและสีน้ำเงินเนื่องจากเซ็นเซอร์ CMOS มีความไวแสงที่แตกต่างกันสำหรับความยาวคลื่นแสงแต่ละช่วง น้ำหนักจะขึ้นอยู่กับเซ็นเซอร์โดยทั่วไป นั่นจะเป็นวิธีการที่ง่าย
หากต้องการแสดงสีเนื่องจากเวลาของวันแสงประดิษฐ์ชนิดต่าง ๆ ฯลฯ จากนั้นอาจเหมาะสมกว่าในการประมวลผลแต่ละภาพในเครื่องมือเช่น Lightroom เพื่อแก้ไขสมดุลสีขาวก่อนจากนั้นจึงทำการคำนวณภาพพิกเซล RGB มาตรฐานของคุณ ซึ่งแตกต่างจากการประมวลผลข้อมูลเซ็นเซอร์ RAW คุณต้องการคำนวณน้ำหนักตามพิกเซล "ความบริสุทธิ์สีเขียว" แทนที่จะให้ค่าเฉลี่ยขององค์ประกอบสีเขียวโดยรวม ยิ่งพิกเซลสีเขียวบริสุทธิ์มากเท่าใดน้ำหนักก็จะยิ่งสูงขึ้นเมื่อเทียบกับพิกเซลที่มีสีแดงหรือน้ำเงินมากขึ้น การปรับสมดุลสีขาวให้เป็นปกติก่อนการประมวลผลควรขจัดความยุ่งยากในการคำนวณอย่างง่าย ๆ ด้วยการใช้ tangents ที่ออกแบบมาเพื่อพิจารณาปัจจัยต่าง ๆ เช่นการปกคลุมของเมฆเวลากลางวันฤดูกาล ฯลฯ
คุณอาจยังต้องการบัญชีสำหรับพื้นที่ขนาดใหญ่ของพิกเซลที่ไม่เกิดเหตุการณ์เช่นท้องฟ้า ฉันไม่สามารถช่วยคุณได้มากนักในพื้นที่นั้นโดยไม่ทราบว่าคุณพยายามทำอะไรให้สำเร็จ สีเขียวของภาพ "โดยรวม" น่าจะได้รับการบริการที่ดีที่สุดโดยการคำนวณอัตราส่วนของสีเขียวต่อสีแดงและสีน้ำเงินซึ่งจะรวมถึงพิกเซล "ท้องฟ้า"
สำหรับขั้นตอนของคุณควรไปโดยไม่บอกว่าถ้าคุณถ่ายภาพด้วยการตั้งค่ากล้องเดียวกันภายใต้แสงไฟเดียวกัน (ความเข้มและอุณหภูมิสีเดียวกัน) วัดเทียบกับพื้นฐานทั่วไปเช่นการ์ดสีเทา 18% จะเห็นได้ชัดว่า ทางยาวสู่การทำให้ผลลัพธ์ของคุณกลับสู่ปกติ ด้วยดิจิตอลความคลาดเคลื่อนใด ๆ สามารถแก้ไขได้ด้วยซอฟต์แวร์ประมวลผล RAW และเครื่องมือตัวเลือกสมดุลแสงสีขาวขั้นพื้นฐานดังนั้นอย่าลืมถ่ายภาพใน RAW
เพื่อให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับการคำนวณ "ความเป็นสีเขียว" ของภาพถ่ายของคุณ เห็นได้ชัดว่ามีวิธีง่าย ๆ เช่นการคำนวณน้ำหนักของพิกเซลไบเออร์สีเขียวเทียบกับสีน้ำเงินและสีแดงหรือการคำนวณความบริสุทธิ์สีเขียวที่สัมพันธ์กับความบริสุทธิ์ของสีแดง / สีน้ำเงินของพิกเซล RGB คุณอาจมีโชคมากขึ้นถ้าคุณแปลงเป็นพื้นที่สีที่เหมาะสมกว่าเช่นHSV ( Hue / Saturation / Valueบางครั้งเรียกว่า HSB แทนที่ Value with Brightness) และคำนวณจำนวนสีเขียวของคุณโดยใช้เส้นโค้งในพื้นที่ HUE (หมายเหตุ: HSL เป็นพื้นที่สีประเภทอื่นและอาจไม่เหมาะที่จะคำนวณว่ามี "สีเขียว" ในภาพถ่ายมากแค่ไหนดังนั้นฉันจะใช้ HSV คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับพื้นที่สีเหล่านี้ได้ที่นี่.) สีเขียวบริสุทธิ์ (โดยไม่คำนึงถึงความอิ่มตัวของสีหรือค่า) ตกที่มุมสี 120 °และตกจากที่นั่นเมื่อคุณเลื่อนไปทางสีแดง (ที่ 0 °) หรือไปทางสีฟ้า (ที่ 240 °) ระหว่าง 240 °ถึง 360 °จะมีจำนวนสีเขียวเป็นศูนย์ในพิกเซลโดยไม่คำนึงถึงความอิ่มตัวหรือค่า
รูปที่ 1 พล็อต Hue - ความบริสุทธิ์สีเขียวในองศาเว้
คุณสามารถปรับเส้นโค้งน้ำหนักจริงเพื่อตอบสนองความต้องการเฉพาะของคุณอย่างไรก็ตามเส้นโค้งที่เรียบง่ายอาจคล้ายกับต่อไปนี้:
range = 240
period = range * 2 = 240 * 2 = 480
scale = 360/period = 0.75
pureGreen = sin(scale * 120)
สำหรับมูลค่าpureGreen
ที่ควรจะเป็น1.0 สูตรสำหรับการคำนวณgreenness
สามารถทำได้ดังนี้:
sin(scale * hue) } 0 > hue > 240
greenness =
0 } 240 <= hue <= 360 || hue == 0
นี่hue
คือระดับของสีจากค่าสี HSV ของคุณ radius
เป็นครึ่งหนึ่งของperiod
ที่มีสีเขียวมีอยู่ในระดับหนึ่ง การscale
ปรับเส้นโค้งบาปตามระยะเวลาของเราเช่นsin(scale * hue)
จุดสูงสุด (คืน 1.0) ตรงที่คุณจะมีสีเขียวบริสุทธิ์ (ไม่สนใจความเข้มของสีเขียว) เนื่องจากจำนวนgreenness
จะใช้ได้เฉพาะในช่วงครึ่งแรกของรอบระยะเวลาของเราการคำนวณความเป็นสีเขียวจะใช้ได้เฉพาะเมื่อฮิวมากกว่า 0 °และน้อยกว่า 240 °และศูนย์สำหรับสีอื่น ๆ
คุณสามารถปรับน้ำหนักได้โดยปรับระยะเวลาช่วงที่คุณกำหนดgreen
อาจมีอยู่ (เช่นจาก 0 ถึง 240 คุณอาจตั้งค่าข้อ จำกัด เช่น40 > hue > 200
แทน) และกำหนดสิ่งใดก็ตามที่อยู่นอกช่วงนั้นเพื่อให้มีสีเขียวเป็น 0 ควรสังเกตว่าสิ่งนี้จะมีความถูกต้องทางคณิตศาสตร์ แต่อาจไม่ถูกต้องแม่นยำทั้งหมด แน่นอนว่าคุณสามารถปรับสูตรเพื่อปรับจุดpure green
ให้เป็นสีเหลืองมากขึ้น (ซึ่งอาจให้ผลลัพธ์ที่แม่นยำมากขึ้น) เพิ่มแอมพลิจูดของเส้นโค้งเป็นที่ราบสูงและขยายแถบสีเขียวบริสุทธิ์ไปยังช่วงของสีแทนที่จะเป็นซิงเกิ้ล ค่าสีและอื่น ๆ สำหรับความแม่นยำในการรับรู้ของมนุษย์โดยรวมอัลกอริทึมที่ซับซ้อนยิ่งขึ้นประมวลผลในCIE XYZและCIE L a b *อาจจำเป็นต้องใช้พื้นที่ (หมายเหตุ: ความซับซ้อนของการทำงานใน XYZ และพื้นที่ทดลองเพิ่มขึ้นอย่างมากเกินกว่าที่ฉันได้อธิบายไว้ที่นี่)
ในการคำนวณความเป็นสีเขียวของภาพถ่ายคุณสามารถคำนวณความเป็นสีเขียวของแต่ละพิกเซลจากนั้นสร้างค่าเฉลี่ย จากนั้นคุณสามารถใช้อัลกอริทึมจากที่นั่นและปรับแต่งตามความต้องการเฉพาะของคุณ
คุณสามารถค้นหาอัลกอริทึมสำหรับการแปลงสีได้ที่EasyRGBเช่นหนึ่งสำหรับ RGB เป็น HSV:
var_R = ( R / 255 ) // Red percentage
var_G = ( G / 255 ) // Green percentage
var_B = ( B / 255 ) // Blue percentage
var_Min = min( var_R, var_G, var_B ) //Min. value of RGB
var_Max = max( var_R, var_G, var_B ) //Max. value of RGB
del_Max = var_Max - var_Min //Delta RGB value
V = var_Max //Value (or Brightness)
if ( del_Max == 0 ) //This is a gray, no chroma...
{
H = 0 //Hue (0 - 1.0 means 0° - 360°)
S = 0 //Saturation
}
else //Chromatic data...
{
S = del_Max / var_Max
del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max
if ( var_R == var_Max ) H = del_B - del_G
else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R
if ( H < 0 ) H += 1
if ( H > 1 ) H -= 1
}