RAW dosyalarını işleyebiliyorsanız, RGRGRG ve GBGBGB satırlarından (veya muhtemelen RGBGRGBG satırlarından) oluşan bir bayer piksel dizisine sahip olacaksınız. Tüm R ve B piksellerini yoksayabilir, G piksellerini toplayabilir, kare kökünü alabilirsiniz ( çünkü kırmızı veya mavi olanın iki katı yeşil piksel vardır) ve G pikseli sayısının yarısına bölün. Bu, fotoğrafınızdaki "yeşil" için uygun ağırlıklı ortalamayı vermelidir. Daha sonra, kırmızı ve mavi ortalamasını alabilir ve üç yüzdeden de yeşil yüzdenizi hesaplayabilirsiniz.
Daha doğru olmak için, CMOS sensörleri her bir ışık dalga boyunda farklı hassasiyetlere sahip olduğundan, kırmızı, yeşil ve mavi sensör pikselleri için uygun ağırlığı hesaba katmak isteyebilirsiniz. Ağırlıklar genellikle sensöre bağlı olacaktır. Bu basit bir yaklaşım olurdu.
Günün saati, çeşitli yapay aydınlatma türleri, vb.Nedeniyle renk gölgesini hesaba katmak için, önce beyaz dengesini düzeltmek için Lightroom gibi bir araçtaki her fotoğrafı önceden işlemek, ardından hesaplamanızı standart RGB piksel görüntülerde gerçekleştirmek daha uygun olabilir. RAW sensör verilerinin işlenmesinden farklı olarak, hesaplamanızı genel olarak yeşil bileşenin ortalamasından ziyade piksel "yeşil saflığına" göre ağırlıklandırmak istersiniz. Bir piksel ne kadar saf yeşil olursa, ağırlığı o kadar kırmızı veya mavi olan piksellere göre o kadar yüksek olur. İşlemeden önce beyaz dengesini normalleştirmek, bulut örtüsü, günün saati, sezon vb. Gibi on beş faktörü hesaba katmak için tasarlanmış teğetlerle aksi takdirde oldukça basit bir hesaplamayı karmaşıklaştırma ihtiyacını ortadan kaldırmalıdır.
Yine de gökyüzü gibi olay olmayan piksellerin geniş alanlarını hesaba katmak isteyebilirsiniz. Tam olarak neyi başarmaya çalıştığınız hakkında daha fazla bilgi sahibi olmadan o alanda size gerçekten yardımcı olamıyorum. Genel olarak bir "fotoğrafın" yeşilliği, en iyi ihtimalle yeşilin kırmızıya ve maviye oranının hesaplanmasıyla elde edilir ve bu da "gökyüzü" pikselleri içerir.
Prosedürünüze gelince, aynı kamera ayarlarına sahip resimleri aynı aydınlatıcı (aynı yoğunluk ve renk sıcaklığı) altında çekerseniz,% 18 gri kart gibi ortak bir taban çizgisine karşı ölçülen açık bir şekilde sonuçlarınızı normalleştirmek için uzun bir yol. Dijital ile, RAW işleme yazılımı ve temel beyaz dengesi seçici aracıyla herhangi bir tutarsızlık düzeltilebilir, bu nedenle RAW'da çekim yaptığınızdan emin olun.
Fotoğraflarınızın "yeşilliğini" hesaplama konusunda daha fazla bilgi vermek için. Yeşil bayer piksellerinin mavi ve kırmızıya karşı ağırlığının hesaplanması veya RGB piksellerinin kırmızı / mavi saflığına göre yeşil saflığın hesaplanması gibi açık bir şekilde basit yollar vardır. HSV ( Ton / Doygunluk / Değer , bazen HSB olarak adlandırılır, Değeri Parlaklık ile değiştirir) gibi daha uygun bir renk uzayına dönüştürürseniz ve HUE alanında bir eğri kullanarak yeşil miktarınızı hesaplarsanız daha fazla şansınız olabilir . (NOT: HSL renk alanı farklı bir türüdür ve muhtemelen HSV kullanırsınız böylece, bir fotoğrafta ne kadar "yeşil" bilgi işlem için ideal olmaz Bu renk boşluk hakkında daha fazla bilgi edinebilirsiniz. Burada.) Saf yeşil (doygunluk veya değere bakılmaksızın) 120 ° 'lik bir ton açısına düşer ve kırmızıya (0 °' de) veya maviye (240 ° 'de) giderken oradan düşer. 240 ° ve 360 ° arasında, doygunluk veya değere bakılmaksızın bir pikselde sıfır miktarda yeşil olur.
Şekil 1. Renk Tonu Grafiği - Renk Tonlarında Yeşil Saflık
Gerçek ağırlık eğrisini özel gereksinimlerinizi karşılayacak şekilde ayarlayabilirsiniz, ancak basit bir eğri aşağıdakine benzer olabilir:
range = 240
period = range * 2 = 240 * 2 = 480
scale = 360/period = 0.75
pureGreen = sin(scale * 120)
Değeri 1.0pureGreen
olmalıdır . Daha sonra hesaplama için bir formül aşağıdaki gibi yapılabilir:greenness
sin(scale * hue) } 0 > hue > 240
greenness =
0 } 240 <= hue <= 360 || hue == 0
hue
Senin HSV renk değerinden renk derecesidir. Bu radius
, period
yeşilin bir dereceye kadar mevcut olduğu yarısıdır . scale
Öyle ki ayarlanabilece¤inden bizim döneme günah eğrisi, sin(scale * hue)
saf yeşil (yani yeşillik yoğunluğunu göz ardı) olurdu tam olarak zirveler (döner 1.0). Miktarı greenness
yalnızca dönemin ilk yarısında geçerli olduğundan, yeşillik hesaplaması yalnızca renk tonu 0 ° 'den büyük ve 240 °' den az olduğunda ve diğer renkler için sıfır olduğunda geçerlidir.
Ağırlığı, tanımladığınız aralığı green
(örneğin, 0'dan 240'a değil, 40 > hue > 200
bunun yerine bir kısıtlama ayarlayabilirsiniz ) tanımlayabileceğiniz aralığı ayarlayarak ve bu aralığın dışındaki herhangi bir şeyi yeşilin 0 olması için ayarlayabilirsiniz. Bunun matematiksel olarak doğru olacağına dikkat edilmelidir, ancak tamamen algısal olarak doğru olmayabilir. Tabii ki pure green
sarıya doğru daha fazla noktayı ayarlamak için formülü değiştirebilir (daha algısal olarak daha doğru sonuçlar üretebilir), eğrinin platoya genliğini artırabilir ve saf yeşil bandı tek bir renk yerine bir ton aralığına genişletebilirsiniz. ton değeri, vb. Toplam insan algısal doğruluğu için, CIE XYZ ve CIE L a b * 'de işlenen daha karmaşık bir algoritmaalan gerekebilir. (NOT: XYZ ve Lab alanında çalışmanın karmaşıklığı, burada açıkladığımdan çok daha fazla artmaktadır.)
Bir fotoğrafın yeşilliğini hesaplamak için, her pikselin yeşilliğini hesaplayabilir, ardından bir ortalama üretebilirsiniz. Daha sonra algoritmayı oradan alıp özel ihtiyaçlarınıza göre ayarlayabilirsiniz.
Renk dönüşümleri için algoritmaları RGB'den HSV'ye olduğu gibi EasyRGB'de bulabilirsiniz :
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
}