ฉันจะใช้ SLR กับวิธีวัดความเป็นสีเขียวของภาพถ่ายได้อย่างไร


13

พื้นหลัง

ภาพดิจิทัลของฉันสามารถอ่านได้ในโปรแกรมคอมพิวเตอร์เช่น Matlab หรือ R เป็นเมทริกซ์ amxnx 3 โดยที่ mxn คือจำนวนพิกเซลที่ตรวจพบโดยเซ็นเซอร์ทั้งสาม (แดงเขียวและน้ำเงิน) แต่ละเซลล์ในเมทริกซ์มีจำนวน จาก 1-255 ที่สะท้อนความสว่างที่เซ็นเซอร์ตรวจจับ

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

งานก่อนหน้านี้ในทิศทางนี้ประสบความสำเร็จโดยการคำนวณดัชนีสีเขียวเช่น

  • สีเขียว% = เขียว / (น้ำเงิน + แดง) หรือ
  • ความแตกต่างสีเขียว = 2 * สีเขียว - สีแดง - สีน้ำเงิน

จากภาพเว็บแคมสำหรับแต่ละพิกเซล mxn แต่ไม่มีการควบคุมช่องรับแสงหรือการแผ่รังสีที่ตกกระทบ (มุมแสงอาทิตย์)

โปรดทราบว่าฉันไม่ได้มองหาการวัดสีเขียว 'แบบสัมบูรณ์' ขนาดและการกระจายของตัวเลขไม่สำคัญ - เพียงแค่ต้องให้การวัดความสัมพันธ์ที่เป็นสีเขียวที่สอดคล้องกัน

คำถาม

ฉันสามารถใช้ SLR ของฉันเพื่อวัดค่าความเป็นสีเขียวที่ไม่เปลี่ยนแปลงด้วยสิ่งใดสิ่งหนึ่งหรือทั้งหมดต่อไปนี้:

  • เมฆปกคลุม?
  • เวลาของวัน?
  • วันของปี (นี่เป็นข้อกำหนดเพียงอย่างเดียว)
  • สัดส่วนของท้องฟ้า / พื้นหลังเป็นพื้นหลังหรือไม่

สถานะปัจจุบัน

ฉันได้รับแนวคิดต่อไปนี้ แต่ฉันไม่แน่ใจว่าสิ่งใดที่จำเป็นหรือสิ่งใดที่จะไม่มีผลต่ออัตราส่วนของสีเขียว / (แดง + น้ำเงิน)

  1. ถ่ายภาพพลาสติกสีขาวและใช้ภาพนี้เพื่อทำให้ค่าอื่น ๆ กลับสู่ปกติ
  2. แก้ไขค่ารูรับแสง
  3. แก้ไขความเร็วชัตเตอร์
  4. ตั้งค่าสมดุลสีขาวโดยใช้กระดาษสีขาว
  5. ถ่ายภาพทั้งหมดจากมุมเดียวกัน
  6. ถ่ายรูปตอนเที่ยงวันพลังงานแสงอาทิตย์

1
คุณอาจพิจารณาการให้แสงประดิษฐ์มันทำให้ขั้นตอนง่ายขึ้น แฟลชควรทำอย่างเพียงพอเพียงตรวจสอบให้แน่ใจว่าอยู่ในตำแหน่งเดียวกันและกำลังไฟ
PearsonArtPhoto

@Pearsonarphoto - ความคิดที่น่าสนใจฉันกำลังคิดเกี่ยวกับการถ่ายภาพในระหว่างวัน แต่บางทีมันอาจจะเหมาะสมกว่าที่จะทำในตอนกลางคืนโดยไม่มีดวงจันทร์
David LeBauer

1
หากคุณทำตามคำแนะนำของ Pearsonartphoto คุณจะต้องตั้งค่าชัตเตอร์รูรับแสงและ ISO ด้วยตนเอง - ตั้งค่าชัตเตอร์เป็นความเร็วซิงค์แฟลช (โดยทั่วไปคือ 1/200 ถึง 1/320) และตั้งค่ารูรับแสงและ ISO ให้ต่ำ พวกเขาสามารถไปได้โดยไม่ต้องใช้พลังงานจากแฟลชหมด สิ่งนี้จะทำให้สภาพแวดล้อมของคุณมืดที่สุดเท่าที่จะเป็นไปได้ - พระจันทร์เต็มดวงไม่น่ามีปัญหา (ดวงอาทิตย์กลางดึกในทางกลับกัน ... ) สำหรับสถานการณ์นี้แฟลชบนแกนจะดีที่สุดเนื่องจากจะทำให้เกิดเงาน้อยที่สุด .
Evan Krall

2
@Evan ฉันไม่เห็นด้วยกับแฟลชในแกน เหตุผลที่เป็นเช่นนี้: photo.stackexchange.com/questions/9531/ … — การสะท้อนโดยตรงมากเกินไป ยกเว้นเมื่อใช้โพลาไรเซอร์ดังที่ฉันได้อธิบายไปแล้ว - แต่อย่างใดอย่างหนึ่งจำเป็นต้องตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ในสภาพเดิมและสมดุลสีขาวนั้นทำได้อย่างถูกต้อง โพลาไรเซอร์เปลี่ยนสมดุลสีขาว
Simon A. Eugster

2
คลอโรฟิลล์สว่างที่สุดในช่วงอินฟราเรดใกล้: yale.edu/ceo/Documentation/rsvegfaq.html มีมาตรการมาตรฐานของ "ความเป็นสีเขียว" ของพืชตามนี้เช่น NDVI ดังนั้นถ้าเป็นไปได้ให้เอากล้องที่สามารถบันทึกแถบ NIR
whuber

คำตอบ:


12

หากคุณสามารถประมวลผลไฟล์ 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
}

1
+1 กับเทคนิคการประมวลผลแบบดิบ แหล่ง dcraw จะเป็นจุดเริ่มต้นที่ดีcybercom.net/~dcoffin/dcraw/dcraw.c
โปรดอ่านโปรไฟล์ของฉัน

1
การประมวลผลแบบดิบจะทำให้การคำนวณระดับสีเขียวง่ายขึ้นอย่างไรก็ตามมันจะทำให้การจัดการกับสีที่มีความซับซ้อนมากขึ้น
jrista

3

โครงการ GLOBE ?

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

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

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


ไม่ใช่โครงการ GLOBE แต่สามารถเปลี่ยนเป็นโครงการหนึ่งได้ ขอบคุณสำหรับการชี้ให้เห็นว่าเว็บไซต์
David LeBauer

อาจเป็นที่สนใจของคุณเช่นกันฉันกำลังเขียนโปรแกรมเพื่อวิเคราะห์วิดีโอเช่นจากเว็บแคมและสถิติเอาท์พุท (แชร์สีเขียว ฯลฯ ) ควรเสร็จในไม่กี่สัปดาห์ข้างหน้า phenocam.granjow.net
Simon A. Eugster

ฟังดูมีประโยชน์ คุณได้ร่วมมือกับนักวิทยาศาสตร์คนใดบ้าง?
David LeBauer

ยังไม่มากนักเนื่องจากวิธีการประเมินจะเป็นส่วนสุดท้าย (และยังสามารถเปลี่ยน / เพิ่มได้อย่างง่ายดาย) แต่มันเป็นโครงการจาก ETH Zürichและจะใช้ที่นั่นด้วย (เพื่อความแม่นยำในขั้นต้นมันจะถูกใช้โดยนักเรียนมัธยมสำหรับโครงการลูกโลกของพวกเขา)
Simon A. Eugster

1
  1. ฉันขอแนะนำให้ถ่ายภาพ 'RAW' และแปลงเป็น 16 บิต TIFF โดยใช้สมดุลแสงสีขาวอัตโนมัติของกล้อง แต่ไม่มีการแก้ไขแกมม่า (เช่นสมดุลสีและเอาต์พุตเชิงเส้น) 16 บิตจะช่วยให้การคำนวณอัตราส่วนและดัชนีดีขึ้นในเงามืดและไฮไลท์ที่ดีกว่า (เช่นไม่มีการตัด) DCRAW สามารถทำสิ่งนี้ได้ แต่กล้องของคุณจะมาพร้อมกับซอฟต์แวร์ของตัวเองซึ่งอาจจะใช้งานได้ง่ายกว่า

  2. ถ้าคุณต้องการดัชนีแล้ว RGB เป็นพื้นที่สีที่มีประโยชน์เท่านั้น คุณได้พูดถึงดัชนี 'ความแตกต่างสีเขียว' (หรือที่เรียกว่าดัชนีส่วนเกินสีเขียว) - สิ่งนี้และอัลกอริทึม Green Leaf ที่เกี่ยวข้องอย่างใกล้ชิดทำงานได้ค่อนข้างดี หากคุณต้องการจำแนกพิกเซลตามสี (เช่น veg กับ non-veg) ดังนั้นฉันจะพิจารณาพื้นที่สีL a b * อย่างใกล้ชิดมากกว่า HSV / HSI มีจริงสาธิตที่ดีงามบนเว็บไซต์ Mathworks ที่แสดงให้เห็น Lการวิเคราะห์ b * การจำแนกประเภทอาจรวมกับการวิเคราะห์สเปกตรัมเพื่อตอบคำถาม a) มีพิกเซลสีเขียวกี่อันและข) พวกเขามีสีเขียวกี่พิกเซล? สิ่งนี้อาจมีประโยชน์มากกว่าดัชนี greeness ซึ่งจะได้รับอิทธิพลจากคุณภาพพื้นหลังสเปกตรัม (ดินเศษซากพืช ฯลฯ ) ซึ่งอาจเปลี่ยนแปลงได้ตลอดเวลา คุณพูดถึงการครอบตัดข้าวโพดดังนั้นฉันคิดว่าคุณกำลังเอียงกล้องลงไม่ใช่ใช่ไหม?

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

  4. หากคุณกำลังรวบรวมไทมส์ (ทุกวัน?) คุณสามารถแบ่งภาพลงเป็นภาพ 'วันที่มีเมฆ' และ 'วันที่มีแดด' และตรวจสอบอคติ คุณสามารถเล่นกับความสมดุลของสีในระหว่างการประมวลผลแบบดิบเพื่อแก้ไขความลำเอียงถ้ามีหรือเพียงแค่ขายชุดหนึ่งให้ตรงกับชุดอื่น (ทำให้มันง่าย) สมมติว่าวันที่มีแดดจัดและมีเมฆมากสลับกัน

มีความสุข.


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