Làm cách nào để sử dụng máy ảnh DSLR của tôi để đo 'độ xanh' của ảnh?


13

Lý lịch

Hình ảnh kỹ thuật số của tôi có thể được đọc vào một chương trình máy tính như Matlab hoặc R dưới dạng ma trận amxnx 3 trong đó mxn là số pixel được quan sát bởi mỗi trong số ba cảm biến (đỏ, lục và lam) và mỗi ô trong ma trận có một số từ 1-255 phản ánh độ sáng quan sát được của cảm biến.

Tôi muốn sử dụng thông tin này để có được số đo màu xanh lá cây khách quan trong một bức ảnh, bởi vì tôi muốn cố gắng tương quan độ xanh với sự phát triển của cây (hãy tưởng tượng một hình ảnh mỗi ngày trên một cánh đồng ngô).

Công việc trước đây theo hướng này đã có một số thành công bằng cách tính toán chỉ số màu xanh lá cây như

  • xanh% = xanh / (xanh + đỏ) hoặc
  • phân kỳ xanh = 2 * xanh - đỏ - xanh

từ hình ảnh webcam cho từng pixel mxn, nhưng không kiểm soát được khẩu độ hoặc bức xạ tới (góc mặt trời).

lưu ý rằng tôi không tìm kiếm một thước đo màu xanh lá cây 'tuyệt đối', quy mô và phân bố số lượng không quan trọng - nó chỉ phải cung cấp một thước đo tương đối nhất quán về độ xanh.

Câu hỏi

Tôi có thể sử dụng máy ảnh DSLR của mình để có được số đo màu xanh lục mạnh mẽ bất biến với bất kỳ hoặc tất cả những điều sau đây:

  • mây che phủ?
  • thời gian trong ngày?
  • ngày nào trong năm? (đây là yêu cầu duy nhất)
  • tỷ lệ của bầu trời / mặt đất trong nền?

Tình trạng hiện tại

Tôi đã đưa ra những ý tưởng sau đây, nhưng tôi không chắc cái nào là cần thiết, hay cái nào sẽ không ảnh hưởng đến tỷ lệ của màu xanh lá cây / (đỏ + xanh)

  1. chụp ảnh một mảnh nhựa trắng và sử dụng hình ảnh này để bình thường hóa các giá trị khác
  2. Sửa khẩu độ
  3. Sửa tốc độ màn trập
  4. đặt cân bằng trắng bằng một mảnh giấy trắng
  5. Chụp tất cả các ảnh từ cùng một góc
  6. Chụp tất cả ảnh vào buổi trưa

1
Bạn có thể xem xét ánh sáng nhân tạo, nó sẽ làm cho thủ tục đơn giản hơn. Một đèn flash phải hoạt động đầy đủ, chỉ cần đảm bảo rằng nó ở cùng một vị trí và nguồn điện.
PearsonArtPhoto

@Pearsonarphoto - ý tưởng thú vị, tôi đã suy nghĩ về việc chụp ảnh vào ban ngày, nhưng có lẽ sẽ có ý nghĩa hơn khi thực hiện chúng vào ban đêm không có mặt trăng.
David LeBauer

1
Nếu bạn đang làm theo lời khuyên của Pearsonartphoto, bạn sẽ muốn cài đặt màn trập, khẩu độ và ISO theo cách thủ công - đặt màn trập của bạn ở tốc độ đồng bộ hóa flash của bạn (thường là 1/200 đến 1/320), và đặt khẩu độ và ISO của bạn ở mức thấp vì họ có thể đi mà không hết năng lượng flash. Điều này sẽ khiến môi trường xung quanh bạn tối nhất có thể - trăng tròn sẽ không có vấn đề gì (mặt trời giữa ngày, mặt khác ...) Trong tình huống này, đèn flash trên trục sẽ là tốt nhất, vì nó sẽ tạo ra ít bóng nhất .
Evan Krall 17/03/2016

2
@Evan Tôi không đồng ý về đèn flash trên trục. Lý do là thế này: photo.stackexchange.com/questions/9531/ Cách Đẻ phản ánh trực tiếp quá nhiều. Ngoại trừ khi sử dụng các bản phân cực, như tôi đã mô tả ở đó - nhưng sau đó người ta cần đảm bảo rằng thiết bị vẫn giữ nguyên và cân bằng trắng được thực hiện chính xác. Phân cực thay đổi cân bằng trắng.
Simon A. Eugster 17/03/2016

2
Chất diệp lục sáng nhất trong vùng hồng ngoại gần: yale.edu/ceo/Documentation/rsvegfaq.html Có các biện pháp tiêu chuẩn về "độ xanh" của cây dựa trên điều này, chẳng hạn như NDVI. Do đó, nếu bạn có thể, hãy lấy một chiếc máy ảnh có thể ghi lại băng tần NIR.
whuber

Câu trả lời:


12

Nếu bạn có thể xử lý các tệp RAW, bạn sẽ có một mảng pixel bayer bao gồm các hàng RGRGRG và GBGBGB (hoặc có thể là các hàng RGBGRGBG.) Bạn có thể bỏ qua tất cả các pixel R và B, tổng hợp các pixel G, lấy căn bậc hai ( vì có gấp đôi số pixel màu xanh lục so với màu đỏ hoặc màu xanh) và chia cho một nửa số pixel G. Điều đó sẽ cung cấp cho bạn mức trung bình có trọng số phù hợp cho "màu xanh lá cây" trong ảnh của bạn. Sau đó, bạn có thể lấy trung bình của màu đỏ và màu xanh lam và tính tỷ lệ phần trăm màu xanh lá cây của bạn từ cả ba mức trung bình.

Để chính xác hơn, bạn có thể muốn tính đến trọng số thích hợp cho các pixel cảm biến màu đỏ, xanh lục và xanh lam, vì các cảm biến CMOS có độ nhạy khác nhau đối với từng bước sóng ánh sáng. Các trọng lượng sẽ phụ thuộc vào cảm biến, nói chung. Đó sẽ là cách tiếp cận đơn giản.

Để tính toán việc tạo màu do thời gian trong ngày, nhiều loại ánh sáng nhân tạo, v.v. thì có thể thích hợp hơn để xử lý trước mỗi ảnh trong một công cụ như Lightroom để điều chỉnh cân bằng trắng trước, sau đó thực hiện tính toán của bạn trên ảnh pixel RGB tiêu chuẩn. Không giống như xử lý dữ liệu cảm biến RAW, bạn sẽ muốn tính trọng số của mình dựa trên pixel "độ tinh khiết xanh", thay vì trung bình toàn bộ thành phần màu xanh lá cây. Pixel càng xanh càng tinh khiết thì trọng lượng của nó so với pixel càng nhiều màu đỏ hoặc xanh càng cao. Bình thường hóa cân bằng trắng trước khi xử lý sẽ loại bỏ mọi nhu cầu phức tạp hóa một tính toán khá đơn giản khác với các tiếp tuyến được thiết kế để tính đến các yếu tố có nhiều như mây che, thời gian trong ngày, mùa, v.v.

Bạn vẫn có thể muốn tính đến các vùng lớn các pixel không sự cố, chẳng hạn như bầu trời. Tôi thực sự không thể giúp bạn nhiều trong lĩnh vực đó mà không biết thêm về chính xác những gì bạn đang cố gắng đạt được. Màu xanh lá cây của một "bức ảnh" tổng thể có thể sẽ được phục vụ tốt nhất bằng cách tính tỷ lệ giữa màu xanh lá cây và màu đỏ và màu xanh lam, bao gồm các pixel "bầu trời".

Đối với quy trình của bạn, không cần phải nói rằng nếu bạn chụp ảnh với cùng cài đặt máy ảnh, dưới cùng một vật phát sáng (cùng cường độ và nhiệt độ màu), được đo theo đường cơ sở chung như thẻ màu xám 18%, rõ ràng sẽ đi một chặng đường dài hướng tới bình thường hóa kết quả của bạn. Với kỹ thuật số, mọi sự khác biệt đều có thể được sửa chữa bằng phần mềm xử lý RAW và công cụ chọn cân bằng trắng cơ bản, vì vậy hãy chắc chắn chụp ở định dạng RAW.


Để cung cấp thêm thông tin chi tiết về tính toán "độ xanh" cho ảnh của bạn. Rõ ràng có những cách đơn giản, chẳng hạn như tính toán trọng lượng của các pixel bayer xanh so với xanh dương và đỏ, hoặc tính độ tinh khiết của màu xanh lá cây liên quan đến độ tinh khiết của màu đỏ / xanh lam của các pixel RGB. Bạn có thể gặp nhiều may mắn hơn nếu bạn chuyển đổi sang không gian màu thích hợp hơn, chẳng hạn như HSV ( Hue / Saturation / Value , đôi khi được gọi là HSB, thay thế Giá trị bằng Độ sáng) và tính toán lượng xanh của bạn bằng cách sử dụng đường cong trong không gian HUE. (LƯU Ý: HSL là một loại không gian màu khác nhau và có lẽ sẽ không lý tưởng để tính toán mức độ "xanh" trong ảnh, vì vậy tôi sẽ sử dụng HSV. Bạn có thể tìm hiểu thêm về các không gian màu này tại đây.) Màu xanh lá cây thuần khiết (bất kể độ bão hòa hoặc giá trị) rơi ở góc màu 120 ° và rơi ra từ đó khi bạn di chuyển về phía màu đỏ (ở 0 °) hoặc hướng về màu xanh (ở 240 °). Trong khoảng 240 ° đến 360 °, sẽ không có lượng màu xanh lá cây nào trong một pixel, bất kể độ bão hòa hay giá trị.

Lô đất Huế - Độ tinh khiết xanh ở độ Huế
Hình 1. Lô đất Huế - Độ tinh khiết xanh ở độ Huế

Bạn có thể điều chỉnh đường cong trọng số thực tế để đáp ứng nhu cầu cụ thể của mình, tuy nhiên một đường cong đơn giản có thể tương tự như sau:

range = 240
period = range * 2 = 240 * 2 = 480
scale = 360/period = 0.75
pureGreen = sin(scale * 120)

Giá trị cho pureGreennên là 1.0 . Một công thức tính toán greennesssau đó có thể được thực hiện như sau:

             sin(scale * hue)   } 0 > hue > 240
greenness = 
             0                  } 240 <= hue <= 360 || hue == 0

Mức hueđộ màu từ giá trị màu HSV của bạn. Một radiusnửa periodtrong đó màu xanh lá cây hiện diện ở một mức độ nào đó. Điều scalechỉnh đường cong tội lỗi theo thời kỳ của chúng ta, sao cho các sin(scale * hue)đỉnh (trả về 1.0) chính xác nơi bạn sẽ có màu xanh lục thuần khiết (bỏ qua cường độ xanh lục đó). Vì số lượng greennesschỉ có giá trị trong nửa đầu của giai đoạn của chúng tôi, phép tính độ xanh chỉ có hiệu lực khi màu sắc lớn hơn 0 ° và nhỏ hơn 240 ° và bằng 0 đối với bất kỳ màu nào khác.

Bạn có thể điều chỉnh trọng số bằng cách điều chỉnh khoảng thời gian, phạm vi mà bạn xác định greencó thể có mặt (thay vì từ 0 đến 240, bạn có thể đặt ràng buộc như 40 > hue > 200thay vào đó) và xác định bất kỳ thứ gì ngoài phạm vi đó có độ xanh là 0 Cần lưu ý rằng điều này sẽ chính xác về mặt toán học, tuy nhiên nó có thể không hoàn toàn chính xác về mặt nhận thức. Tất nhiên, bạn có thể điều chỉnh công thức để điều chỉnh điểm pure greenhướng về màu vàng nhiều hơn (có thể tạo ra kết quả chính xác hơn về mặt nhận thức), tăng biên độ của đường cong lên cao nguyên và mở rộng dải màu lục thuần thành một dải màu, thay vì một màu giá trị màu sắc, v.v ... Để có độ chính xác về nhận thức của con người, một thuật toán phức tạp hơn được xử lý trong CIE XYZCIE L a b *không gian có thể được yêu cầu. (LƯU Ý: Độ phức tạp khi làm việc trong không gian XYZ và Lab tăng đáng kể ngoài những gì tôi đã mô tả ở đây.)

Để tính độ xanh của ảnh, bạn có thể tính độ xanh của từng pixel, sau đó tạo trung bình. Sau đó, bạn có thể lấy thuật toán từ đó và điều chỉnh nó cho các nhu cầu cụ thể của mình.

Bạn có thể tìm thấy các thuật toán để chuyển đổi màu tại EasyRGB , chẳng hạn như thuật toán cho RGB sang 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 cho kỹ thuật xử lý thô. Nguồn dcraw sẽ là điểm khởi đầu tốt cybercom.net/~dcoffin/dcraw/dcraw.c
Vui lòng đọc hồ sơ

1
Xử lý thô sẽ làm cho việc tính toán mức độ xanh dễ dàng hơn, tuy nhiên nó sẽ khiến việc xử lý phân phối màu phức tạp hơn đáng kể.
jrista

3

Dự án GLOBE ?

Không sử dụng một mảnh giấy trắng. Chúng có chứa chất làm sáng quang học chuyển đổi một số tia cực tím thành ánh sáng xanh, gây ra phơi sáng không chính xác. Đây là lý do tại sao thẻ xám thương mại (theo đề xuất của jrista) tồn tại.

Chụp tất cả các bức ảnh từ cùng một nơi chắc chắn là cách tiếp cận chính xác. Về tốc độ màn trập và khẩu độ, những điều này không quan trọng. Tốc độ màn trập hoàn toàn không thay đổi màu sắc, khẩu độ làm mờ hình ảnh, nhưng tôi nghĩ hiệu ứng này sẽ biến mất khi bạn tổng hợp tất cả các giá trị pixel. Tôi thà cố gắng để có được một tiếp xúc liên tục.

Liên quan đến sự khác biệt giữa đám mây và không bị che mờ, bạn có thể chỉ muốn chạy một số thử nghiệm. Nếu lượng màu xanh lá cây thực sự không thay đổi nhanh chóng (tức là từ hôm nay đến ngày mai), thì nó cũng không nên làm như vậy khi kiểm tra các bức ảnh. Có lẽ một cách tiếp cận theo kinh nghiệm có thể giúp ích ở đó (ví dụ: nếu bạn phát hiện ra rằng độ xanh luôn cao hơn 10% khi bị che khuất, bạn có thể bù lại cho điều đó).


nó không phải là một dự án GLOBE, nhưng nó có thể được chuyển thành một; cảm ơn vì đã chỉ ra trang web đó
David LeBauer 17/03/2016

Có thể bạn cũng quan tâm: Hiện tại tôi đang viết một chương trình để phân tích video, ví dụ từ webcam và thống kê đầu ra (chia sẻ màu xanh lá cây, v.v.). Nên được hoàn thành trong những tuần tới. phenocam.granjow.net
Simon A. Eugster

Nghe có vẻ hữu ích. Bạn đã hợp tác với bất kỳ nhà khoa học?
David LeBauer

Không quá nhiều vì các phương pháp đánh giá sẽ là phần cuối cùng (và cũng có thể được thay đổi / thêm dễ dàng). Nhưng nó là một dự án từ ETH Zürich và cũng sẽ được sử dụng ở đó. (Nói chính xác, ban đầu nó sẽ được sử dụng bởi các học sinh trung học cho dự án Quả cầu của họ.)
Simon A. Eugster

1
  1. Tôi sẽ khuyên bạn nên chụp 'RAW' và chuyển đổi sang TIFF 16 bit bằng cách sử dụng cân bằng trắng tự động của máy ảnh nhưng không điều chỉnh gamma (nghĩa là cân bằng màu nhưng đầu ra tuyến tính). 16-bit sẽ cho phép tính toán tỷ lệ và chỉ số tốt hơn trong bóng tối và điểm nổi bật (nghĩa là không cắt). DCRAW có thể làm điều này nhưng máy ảnh của bạn sẽ đi kèm với phần mềm riêng có thể dễ sử dụng hơn.

  2. Nếu bạn muốn các chỉ số thì RGB thực sự là không gian màu hữu ích duy nhất. Bạn đã đề cập đến chỉ số 'phân kỳ xanh' (còn được gọi là Chỉ số xanh dư thừa) - thuật toán này và Thuật toán Lá xanh có liên quan chặt chẽ hoạt động khá tốt. Nếu bạn muốn thực hiện phân loại pixel dựa trên màu (tức là veg so với không veg) thì tôi sẽ xem xét kỹ không gian màu L a b * thay vì HSV / HSI. Thực sự có một bản demo khá hay trên trang web Mathworks minh họa cho L aphân tích b *. Phân loại có thể hình dung được kết hợp với phân tích quang phổ để trả lời các câu hỏi a) có bao nhiêu pixel màu xanh lá cây và b) chúng có màu xanh như thế nào? Điều này có thể hữu ích hơn là chỉ số greeness, cũng sẽ bị ảnh hưởng bởi chất lượng quang phổ nền (đất, rác, v.v.), cũng có thể thay đổi theo thời gian. Bạn đã đề cập đến một vụ mùa ngô vì vậy tôi cho rằng bạn đang hướng máy ảnh xuống, không phải lên?

  3. Nếu bạn có hai máy ảnh thì bạn có thể kết hợp hình ảnh nhìn xuống (đo màu xanh lá cây) với hình ảnh nhìn lên trên để đo độ che phủ của thảm thực vật. Hình ảnh hướng lên sẽ không phù hợp để phân tích quang phổ và phân loại pixel sẽ dựa trên độ tương phản giữa bầu trời / không phải bầu trời, có lẽ chỉ sử dụng kênh màu xanh của hình ảnh RGB.

  4. Nếu bạn đang thu thập thời gian (hàng ngày?) Thì bạn có thể chia hình ảnh hướng xuống thành hình ảnh 'ngày nhiều mây' và hình ảnh 'ngày nắng' và kiểm tra độ lệch. Bạn có thể chơi với cân bằng màu trong quá trình xử lý thô để sửa lỗi cho sai lệch, nếu có hoặc chỉ chỉnh lại một chuỗi để khớp với chuỗi khác (giữ cho đơn giản) giả sử rằng những ngày nắng và mây xen kẽ.

Chúc vui vẻ.


Một ô màu với các ô màu đỏ, lục và lam có thể còn tốt hơn một thẻ màu xám nếu bạn đi trên con đường đó.
mắt cá
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.