Domanda

La mia domanda iniziale

Ho letto che per convertire un pixel RGB in RGB in scala di grigi, si dovrebbe usare

r_new = g_new = b_new = r_old * 0.3 + g_old * 0.59 + b_old * 0.11

Inoltre ho letto, e capire, che g ha un peso maggiore perché l'occhio umano è più sensibile al verde. L'implementazione che, ho visto i risultati erano gli stessi che avrei avuto da impostare un'immagine per 'scala di grigi' in un editor di immagini come il Gimp.

Prima di leggere questo, ho immaginato che convertire un pixel in scala di grigi, si potrebbe convertirlo HSL o HSV, quindi impostare la saturazione a zero (quindi, rimuovendo tutto colore). Tuttavia, quando ho fatto questo, ho avuto un ben diverso uscita delle immagini, anche se mancava anche il colore.

Come funziona esattamente s = 0 diverso dal modo 'corretto' ho letto, e perché è 'errato'?

risultati in corso sulla base di risposte e altre ricerche

Sembra che che i coefficienti di luminanza da utilizzare è oggetto di discussione. Varie combinazioni e algoritmi a scala di grigi hanno risultati diversi. I seguenti sono alcuni preset utilizzati in aree come standard televisivi:

  • i coefficienti definiti da ITU-R BT.601 (NTSC?) Sono 0.299r + 0.587g + 0.114b
  • i coefficienti definiti da ITU-R BT.709 (più recente) sono 0.2126r + 0.7152g + 0.0722b
  • i coefficienti di tre parti uguali, (1/3)(rgb), è equivalente a s = 0

articolo scientifico dettagli varie tecniche in scala di grigi e dei loro risultati per varie immagini , un'indagine più personale di 119 persone.

Tuttavia, quando si converte un'immagine in scala di grigi, per ottenere il 'migliore' effetto artistico, uno sarà quasi certamente non fare uso di questi coefficienti predefiniti, ma modificando la partecipazione di ciascun canale per produrre il miglior risultato per la particolare immagine.

È stato utile?

Soluzione

Although these transformation coefficients exist, nothing binds you to using them. As long as the total intensity of each pixel is unchanged, the contributions from each channel can be anything, ranging from 0 to 100%.

Photographers converting images to grayscale use channel mixers to adjust levels of each channel (RGB or CMYK). In your image, there are many reds and greens, so it might be desirable (depending on your intent) to have those channels more highly represented in the gray level intensity than the blue.

This is what distinguishes "scientific" transformation of the image from an "artistic" combination of the bands.

An additional consideration is the dynamic range of values in each band, and attempting to preserve them in the grayscale image. Boosting shadows and/or highlights might require increasing the contribution of the blue band, for example.

Altri suggerimenti

An interesting article on the topic here.... "because human eyes don't detect brightness linearly with color".

http://www.scantips.com/lumin.html

Looks like these coefficients come from old CRT technology and are not well adapted to today's monitors, from the Color FAQ:

The coefficients 0.299, 0.587 and 0.114 properly computed luminance for monitors having phosphors that were contemporary at the introduction of NTSC television in 1953. They are still appropriate for computing video luma to be discussed below in section 11. However, these coefficients do not accurately compute luminance for contemporary monitors.

Couldn't find the right conversion coefficient, however.

See also RGB to monochrome conversion

Using s = 0 in HSL/HSV and converting to RGB results in R = G = B, so is the same as doing r_old * 1/3 + g_old * 1/3 + b_old * 1/3.

To understand why, have a look at the Wikipedia page that describes conversion HSV->RGB. Saturation s will be 0, so C and X will be, too. You'll end up with R_1,G_1,B_1 being (0,0,0) and then add m to the final RGB values which results in (m,m,m) = (V,V,V). Same for HSL, result will be (m,m,m) = (L,L,L).

EDIT: OK, just figured out the above is not the complete answer, although it's a good starting point. RGB values will be all the same, either L or V, but it still depends on how L and V were originally calculated, again, see Wikipedia. Seems the program/formulas you've used for converting used the 1/3 * R + 1/3 * G + 1/3 * B solution or one of the other two (hexcone/bi-hexcone).

So after all, using HSL/HSV just means you'll have to decide which formula to use earlier and conversion to RGB grayscale values later is just isolating the last component.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top