2013-03-28 21 views
8

RGB'den gri tonlamaya dönüştürmek için birçok formül kullandım, ancak GIMP ile karşılaştırıldığında iyi sonuçlar elde edemedim.RGB'yi gri tonlamaya dönüştür C

Zaten, aşağıdaki formüller test:

gray = (int)(0.299 * r + 0.587 * g + 0.144 * b); 

gray = (int)(0.299 * r + 0.587 * g + 0.114 * b); 

gray = (int)(0.2126 * r + 0.7152 * g + 0.0722 * b); 

gray = (int) (0.35*r + 0.50*g + 0.15*b); 

gray = ((r * 61) + (g * 174) + (b * 21))/256; 

gray = (int)((4897 * r + 9617 * g + 1868 * b) >> 14); 

gray = r; if(g > gray) gray = g; if(b > gray) gray = b; 
+0

bir programlama sorusundan daha. Bu, GIMP'in açık kaynak olduğunu söyledi, bu yüzden ne yaptığına bakmayı düşündün mü? – Useless

+0

Sadece sizin için libgimp kullanamazsınız? – teppic

+0

Gözün yeşile karşı maksimum duyarlılığı olduğundan, doğru ya birinci ya da dördüncü formül gibi görünüyor. –

cevap

12

dönüşüm uygulanır, sen gama doğrusal bir renk alana R, G ve B değerleri düzeltildi dönüştürmek gerekir doğru gri RGB dönüştürmek için, Doğrusal boşluk ve daha sonra sonuç için bir gama düzeltmesi uygulayın.

sRGB colorspace, yalnızca bir gama eğrisine yaklaşan bir dönüşüme sahiptir. Ayrıntılar için Wikipedia makalesine bakın. Vikipedi ayrıca sRGB konusuna gri tonlama konusunda belirli bir section sahiptir.

Temelde, doğrusal biçimine sRGB bileşenini dönüştürmek için:

double sRGB_to_linear(double x) { 
    if (x < 0.04045) return x/12.92; 
    return pow((x+0.055)/1.055, 2.4); 
} 

Sonra gri tonlama doğrusal sRGB dönüştürmek için: Yeniden sRGB gama düzeltmesi, Sonra

double R_linear = sRGB_to_linear(R/255.0); 
double G_linear = sRGB_to_linear(G/255.0); 
double B_linear = sRGB_to_linear(B/255.0); 
double gray_linear = 0.2126 * R_linear + 0.7152 * G_linear + 0.0722 * B_linear; 

geçerlidir:

double linear_to_sRGB(double y) { 
    if (y <= 0.0031308) return 12.92 * y; 
    return 1.055 * pow(y, 1/2.4) - 0.055; 
} 

Ie

double gray_color = round(linear_to_sRGB(gray_linear) * 255); 
+0

Bana bir referans veya denklem verebilir misiniz? – user2000255

+0

Dönüştürme renginin altındaki Wikipedia sitesindeki gri denklemi gri tonlama başlığına buldum. Ama ne anlama geldiğini anlamıyorum. Teşekkürler. – user2000255

+1

Bu katsayılar (0.2126, 0.7152 ve 0.0722) orijinal olarak doğrusal-RGB -> XYZ uzay dönüşüm matrisinden (matrisin orta sırasını Y) hesaplar. Ortaya çıkan "yoğunluk" değeri aslında XYZ vektöründen gelen 'Y' değeridir. https: // tr.wikipedia.org/wiki/SRGB#The_reverse_transformation –

2

GIMP renkli görüntü gri tonlama dönüştürmek de birçok farklı yöntem açıklanır a GIMP tutorial yoktur. Bir yöntem, zaten denediğiniz gibi ağırlıklı bir desatürasyon olup, makalede GIMP dönüşümüne yaklaşmak için kullanılabilecek bazı ağırlıklar verilmiştir.

imajını operasyonların tüm temelidir GIMP gegl kütüphane, dikkate komşu piksellerin rengini alır ve siyah-beyaz fotoğraf geliştirme sürecini taklit görünüyor iteratif bir yaklaşım kullanır a rather elaborate mechanism for converting color to greyscale sahiptir.

0

gimp help for the desaturate tool "Lighness", "Luminosity" ve "Average" seçeneklerine karşılık gelen üç kullanılabilir formülü belirtir. Bunlar şöyle olacaktır:

Hafiflik: 0.5 * (max(R,G,B) + min(R,G,B))

Parlaklık: (0.21 * R) + (0.72 * G) + (0.07 * B)

Ortalama: Bunun bir (sübjektif) grafik sorusu yerine beri bu, burada gerçekten konuyla sanmıyorum (R + G + B)/3

İlgili konular