Как найти яркость пикселя

Почетный модератор

Эксперт С++

5850 / 2861 / 392

Регистрация: 01.11.2011

Сообщений: 6,907

19.02.2021, 11:20

9

Заинтересовала меня эта формула, почему именно такие коэффициенты, решил копнуть чуть глубже (пара ссылок: 1, 2).

Если в трех словах, то сама формула это перевод RGB пикселя в оттенки серого, а коэффициенты формулы это показатель той или иной системы представления/кодирования цвета (изначально PAL/SECAM и все вот это вот). В разных системах цвет, закодированный одним и тем же значением, будет выглядеть по разному. И наоборот — выглядящий одинаково в разных системах цвет, будет по разному кодироваться. В общем виде: [R±dr, G±dg, B±db], где dr, dg, db — некоторое отклонение свойственное той или иной системе.
Как происходит запись цвета в какой-то конкретной системе: берется двухмерное математически составленное бесконечно точное представление цвета (палитра на плоскости) и выбирается на ней точка, чьи координаты и будут означать запись цвета. Выбираются три основных (связанных с данной технологией производства) цвета, например, красный, зеленый и синий, и сопоставляются с цветовой палитрой. Таким образом получается, что какой-нибудь зеленый цвет располагается по таким-то координатам, а смежный цвет, находящийся в бесконечно близком приближении к нему уже не зеленый. Почему выбираются те или иные координаты? А вот не почему, на глаз. Ну по крайней мере раньше так было при аналоговом вещании.
Возвращаясь же к самой формуле, то высчитанное по ней значение является некой яркостью пикселя. Некой — потому что понятий яркостей существует несколько. И хрен его знает что мы получили за число, но оно точно как-то характеризует исследуемый пиксель.
Резюмируя можно сказать, что в прикладных целях совершенно наплевать как рассчитывать яркость пикселя, хоть просто брать среднее арифметическое по RGB, потому что неизвестно с помощью какого оборудования получены данные пиксели, какие там были кодеки, какой они стандарт поддерживали, будут ли они куда-то выводиться вообще потом и через сколько десятков лет какие изменения в этой всей сфере произойдут.



0



The «Accepted» Answer is Incorrect and Incomplete

The only answers that are accurate are the @jive-dadson and @EddingtonsMonkey answers, and in support @nils-pipenbrinck. The other answers (including the accepted) are linking to or citing sources that are either wrong, irrelevant, obsolete, or broken.

Briefly:

  • sRGB must be LINEARIZED before applying the coefficients.
  • Luminance (L or Y) is linear as is light.
  • Perceived lightness (L*) is nonlinear as is human perception.
  • HSV and HSL are not even remotely accurate in terms of perception.
  • The IEC standard for sRGB specifies a threshold of 0.04045 it is NOT 0.03928 (that was from an obsolete early draft).
  • To be useful (i.e. relative to perception), Euclidian distances require a perceptually uniform Cartesian vector space such as CIELAB. sRGB is not one.

What follows is a correct and complete answer:

Because this thread appears highly in search engines, I am adding this answer to clarify the various misconceptions on the subject.

Luminance is a linear measure of light, spectrally weighted for normal vision but not adjusted for the non-linear perception of lightness. It can be a relative measure, Y as in CIEXYZ, or as L, an absolute measure in cd/m2 (not to be confused with L*).

Perceived lightness is used by some vision models such as CIELAB, here L* (Lstar) is a value of perceptual lightness, and is non-linear to approximate the human vision non-linear response curve. (That is, linear to perception but therefore non linear to light).

Brightness is a perceptual attribute, it does not have a «physical» measure. However some color appearance models do have a value, usualy denoted as «Q» for perceived brightness, which is different than perceived lightness.

Luma ( prime) is a gamma encoded, weighted signal used in some video encodings (Y´I´Q´). It is not to be confused with linear luminance.

Gamma or transfer curve (TRC) is a curve that is often similar to the perceptual curve, and is commonly applied to image data for storage or broadcast to reduce perceived noise and/or improve data utilization (and related reasons).

To determine perceived lightness, first convert gamma encoded R´G´B´ image values to linear luminance (L or Y ) and then to non-linear perceived lightness (L*)


TO FIND LUMINANCE:

…Because apparently it was lost somewhere…

Step One:

Convert all sRGB 8 bit integer values to decimal 0.0-1.0

  vR = sR / 255;
  vG = sG / 255;
  vB = sB / 255;

Step Two:

Convert a gamma encoded RGB to a linear value. sRGB (computer standard) for instance requires a power curve of approximately V^2.2, though the «accurate» transform is:

sRGB to Linear

Where V´ is the gamma-encoded R, G, or B channel of sRGB.
Pseudocode:

function sRGBtoLin(colorChannel) {
        // Send this function a decimal sRGB gamma encoded color value
        // between 0.0 and 1.0, and it returns a linearized value.

    if ( colorChannel <= 0.04045 ) {
            return colorChannel / 12.92;
        } else {
            return pow((( colorChannel + 0.055)/1.055),2.4);
        }
    }

Step Three:

To find Luminance (Y) apply the standard coefficients for sRGB:

Apply coefficients Y = R * 0.2126 + G * 0.7152 + B *  0.0722

Pseudocode using above functions:

Y = (0.2126 * sRGBtoLin(vR) + 0.7152 * sRGBtoLin(vG) + 0.0722 * sRGBtoLin(vB))

TO FIND PERCEIVED LIGHTNESS:

Step Four:

Take luminance Y from above, and transform to L*

L* from Y equation
Pseudocode:

function YtoLstar(Y) {
        // Send this function a luminance value between 0.0 and 1.0,
        // and it returns L* which is "perceptual lightness"

    if ( Y <= (216/24389)) {       // The CIE standard states 0.008856 but 216/24389 is the intent for 0.008856451679036
            return Y * (24389/27);  // The CIE standard states 903.3, but 24389/27 is the intent, making 903.296296296296296
        } else {
            return pow(Y,(1/3)) * 116 - 16;
        }
    }

L* is a value from 0 (black) to 100 (white) where 50 is the perceptual «middle grey». L* = 50 is the equivalent of Y = 18.4, or in other words an 18% grey card, representing the middle of a photographic exposure (Ansel Adams zone V).

References:

IEC 61966-2-1:1999 Standard
Wikipedia sRGB
Wikipedia CIELAB
Wikipedia CIEXYZ
Charles Poynton’s Gamma FAQ

Physicsy way (and cheap equipment)

We can use a lux meter (built into most modern smartphones) to do the absolute measurements and thus make a reference of luminance.

Namely, consider a circular light emitter with radius $R$ and luminance $L(theta,varphi)$. If we measure illuminance $I$ of a surface parallel to it at the distance $r$, we’ll get:

begin{align}I&=intlimits_0^{arctanleft(frac Rrright)}sin(theta),mathrm dthetaintlimits_0^{2pi}mathrm dvarphi,L(theta,varphi) cos(theta) \
&=frac12intlimits_0^{2pi}mathrm dvarphi intlimits_0^{arctanleft(frac Rrright)}mathrm
dtheta,sin(2theta)L(theta,varphi).tag1end{align}

Here $sin(theta)$ factor is due to spherical coordinates’ Jacobian, and $cos(theta)$ is the projected area factor from the definition of illuminance.

If $r ll R$, then the result will be virtually the same as if the emitter were infinite. In this case we can take emitter of any shape, provided that its size is still much larger than distance to the surface (lux meter).

Now, the role of the emitter can be played by a TV or a computer monitor showing a uniform white image. We can use the photo camera to measure dependence of emitter’s luminance on angle of view, in horizontal and vertical (and possibly more) directions. After we measure this, we’ll have some unknown variable $a$ in the camera measurement $M$ equal to

$$M(theta,varphi)=aL(theta,varphi).tag2$$

Substituting $L$ expressed from $(2)$ into $(1)$, we’ll get $aI$. But since we’ve also measured the illuminance $I$ using our lux meter, we can simply divide the calculated $aI$ by the measured $I$ and find $a$. From this follows the value for $L(0,0)$, which is the reference we were looking for.

Techy way (and more expensive equipment)

Use a luminance meter or a screen calibrator. These devices directly measure luminance by means of their built-in photo camera, which, unlike the one in the OP, is already calibrated by the manufacturer. By measuring luminance of a screen and taking a raw photo of the same, we can find the relation between raw pixel values and luminance.

Validation

I’ve actually done both experiments. I used the monitor of my netbook (EEE PC 1015PN), a DSLR photo camera (Canon EOS 1100D), a lux meter (Mastech MS6610), and a screen calibrator (SpyderX Pro + dispcal -R command from ArgyllCMS).

I’ve measured $205,mathrm{lx}$ right near the monitor, and two angular distributions of relative brightness (in horizontal and vertical directions).
Calculating luminance as described above, I got the estimates of $245 frac{mathrm{cd}}{mathrm m^2}$ and $350 frac{mathrm{cd}}{mathrm m^2}$ for horizontal and vertical distributions in the assumption $varphi$-independent luminance and $333 frac{mathrm{cd}}{mathrm m^2}$ in the assumption of $L(theta_{mathrm h},theta_{mathrm v})=L_{mathrm h}(theta_{mathrm h})L_{mathrm v}(theta_{mathrm v})$ (i.e. multiplying both distributions). With the lux meter in my phone (Samsung Galaxy A320F/DS) I got $225,mathrm{lx}$, which raises both estimates somewhat.

Actual luminance measured by the screen calibrator was $280 frac{mathrm{cd}}{mathrm m^2}$. So the maximum error appears to have been about $25%$ (with the dedicated lux meter) or $34%$ (with the phone) relative to the calibrator’s value (which I suppose is the most precise). This is comparable to the precision of «something like $20%$» requested in the OP.

import numpy as np
from skimage.util import view_as_windows  # Библиотека scikit-image

tsize = 256
image = np.random.randint(0, 256, (8192, 8192, 3), np.uint8)

# Значения яркости - это канал L из пространства LAB
lab_l_channel = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)[..., 0]

# Плитки 256x256
tiles = view_as_windows(lab_l_channel, (tsize, tsize), (tsize, tsize))

# Примечательно, что
assert np.shares_memory(lab_l_channel, tiles) == True

# Средняя яркость в виде матрицы 32х32
lightness = tiles.reshape(-1, tsize ** 2).mean(axis=-1).reshape(np.array(image.shape[:2]) // tsize)

P.S. Вместо skimage.util.view_as_windows можно использовать numpy.lib.stride_tricks.as_strided, но это весьма сложная в настройке правильных параметров функция; view_as_windows — её гуманный вариант)

 
WFS
 
(2007-11-03 12:35)
[0]

Необходимо выполнить фильтрацию изображения. Для этого нужно знать яркость каждого пикселя в изображении


 
antonn ©
 
(2007-11-03 12:40)
[1]

Var cMax,cMin  : integer;
begin
cMax := max( max(R,G), B);
cMin := min( min(R,G), B);
L := round( ( ((cMax+cMin)*240) + 255 )/(2*255) );

L — яркость, RGB — каналы tcolor (их можно узнать через GetRValue()/GetGValue()/GetBValue() соответственно)
вот :)


 
oxffff ©
 
(2007-11-03 12:41)
[2]

У монитора тоже яркость тожно подстраивать.
Как быть?


 
turbouser ©
 
(2007-11-03 12:41)
[3]


> WFS   (03.11.07 12:35)

Чего?? Яркость?
LOL Пацталом :)))


 
oxffff ©
 
(2007-11-03 12:42)
[4]


> antonn ©   (03.11.07 12:40) [1]

А еще есть alpha составляющая.


 
turbouser ©
 
(2007-11-03 12:43)
[5]


> antonn ©   (03.11.07 12:40) [1]

У пикселя нет «яркости».


 
oxffff ©
 
(2007-11-03 12:43)
[6]


> У пикселя нет «яркости».

У него есть пиксельность.


 
oxffff ©
 
(2007-11-03 12:45)
[7]


> L := round( ( ((cMax+cMin)*240) + 255 )/(2*255) );

240? Это, что постоянная в системе СИ?


 
turbouser ©
 
(2007-11-03 12:45)
[8]


> oxffff ©   (03.11.07 12:43) [6]

Можно и так сказать :)
Всего-навсего точка определенного цвета )


 
WFS
 
(2007-11-03 13:02)
[9]

Я вот знаю, что цвет характеризуется тремя параметрами:
1. Цветовой тон (собственно цвет)
2.Чистота (оттенки, т.е примесь белым)
3. Яркость.

Насколько я понимаю, яркость характеризует степень отличия от черного.
Мне нужно эту яркость вычислить.


 
Amoeba ©
 
(2007-11-03 17:11)
[10]

Яркость = 0.59*Зеленый + 0.3*Красный + 0.11*Синий

Коэффициенты отличаясь от 1/3 отражают неравномерность чувствительности глаза к разным участкам спектра.


 
KilkennyCat
 
(2007-11-03 17:54)
[11]

Я бы уточнил, человеческого глаза.


 
antonn ©
 
(2007-11-03 19:14)
[12]


> oxffff ©   (03.11.07 12:41) [2]
>
> У монитора тоже яркость тожно подстраивать.
> Как быть?

и у принтера тоже есть яркость, кого мучают вопросы не по существу, просьба убиться об стенку.


> turbouser ©   (03.11.07 12:41) [3]
>
> Чего?? Яркость?
> LOL Пацталом :)))

когда вылезешь, открой пайнт и посмотри в палитре, наряду с составляющими GRB там и констраст есть, и яркость, и оттенок…


> oxffff ©   (03.11.07 12:42) [4]
> А еще есть alpha составляющая.

умное слово сказал, да? у пикселя есть, в случае pf32bit, но к яркости пикселя это не имеет никакого отношения.

для умников, мерцающих гранями и своим языком без поодержки разумных доводов, советую ознакомиться с такой штукой, как HLS (а именно Оттенок/Яркость/Насыщенность)


 
turbouser ©
 
(2007-11-03 19:58)
[13]


> antonn ©   (03.11.07 19:14) [12]

У самого пиксела нет яркости.
pixel.color.brightness — вот оно :)
p.s.
Настроение все испортил :-)


 
KilkennyCat
 
(2007-11-03 20:05)
[14]


> У самого пиксела нет яркости.

Если рассматривать один единственный пиксел, то у него ваще ничего нет.


 
clickmaker ©
 
(2007-11-03 20:10)
[15]

> то у него ваще ничего нет

тогда он битый :)


 
KilkennyCat
 
(2007-11-03 20:18)
[16]


> clickmaker ©   (03.11.07 20:10) [15]

и даже это нельзя сказать, не сравнив с другим.


 
antonn ©
 
(2007-11-03 20:23)
[17]


> turbouser ©   (03.11.07 19:58) [13]
>
>
> У самого пиксела нет яркости.

открой mspaint, выбери цвет на картинке. В меню сверху нажми «палитра»/»изменить палитру». Там будет кнопочка «Определить цвет >>». В расширевшемся окошке справа можно увидеть как значения с палитре RGB, так и значения HLS (в том числе есть поле «яркость»). Выходит у пикселя есть яркость? Может хватит чушь нести и буквоедством заниматься?


 
turbouser ©
 
(2007-11-03 20:36)
[18]


> antonn ©   (03.11.07 20:23) [17]

При чем тут паинт…
Нет у пикселя яркости. Нет и все. Вот у цвета пикселя — есть.


 
antonn ©
 
(2007-11-03 21:11)
[19]

вот и я говорю — буквоедство.


 
DrPass ©
 
(2007-11-03 21:59)
[20]


> вот и я говорю — буквоедство.

+1. Лишь бы повыпендриваться…


 
turbouser ©
 
(2007-11-03 22:16)
[21]

Да ну вас… Чего тут выпендриваться? У меня настроение с утра хорошее было,
радовался всему, показался смешным сабж — выразил свои эмоции :))
Буквоедство, блин..


 
KilkennyCat
 
(2007-11-03 22:48)
[22]

буква — тот же пиксел.


 
oxffff ©
 
(2007-11-03 23:27)
[23]


> antonn ©   (03.11.07 19:14) [12]
>
> > oxffff ©   (03.11.07 12:41) [2]
> >
> > У монитора тоже яркость тожно подстраивать.
> > Как быть?
>
> и у принтера тоже есть яркость, кого мучают вопросы не по
> существу, просьба убиться об стенку.
>
>
> > turbouser ©   (03.11.07 12:41) [3]
> >
> > Чего?? Яркость?
> > LOL Пацталом :)))
>
> когда вылезешь, открой пайнт и посмотри в палитре, наряду
> с составляющими GRB там и констраст есть, и яркость, и оттенок.
> ..
>
>
> > oxffff ©   (03.11.07 12:42) [4]
> > А еще есть alpha составляющая.
>
> умное слово сказал, да? у пикселя есть, в случае pf32bit,
>  но к яркости пикселя это не имеет никакого отношения.
>
> для умников, мерцающих гранями и своим языком без поодержки
> разумных доводов, советую ознакомиться с такой штукой, как
> HLS (а именно Оттенок/Яркость/Насыщенность)

Дорогой друг.
Ваша реакция мне понятна.

Для начала очень рекомендую объяснить назначение 240, и откуда взялась эта цифра.

P.S.
Для того чтобы умерить ваш пыл и ваше тяфканье настоятельно рекомендую ознакомиться для начала Mathematics of Lighting.
Например в DirectX SDK.

P.P.S

Биться об стену?
Покажите пример.


 
antonn ©
 
(2007-11-04 01:33)
[24]


> oxffff ©   (03.11.07 23:27) [23]
>
> Дорогой друг.
> Ваша реакция мне понятна.
>
> Для начала очень рекомендую объяснить назначение 240, и
> откуда взялась эта цифра.

а не все ли равно? у канала RBG максимальное значение 255, у яркости максимальное 240.

Ну откройте пайнт, ну потыкайте, сразу куча вопросов отпадет…


 
Германн ©
 
(2007-11-04 01:38)
[25]


> KilkennyCat   (03.11.07 17:54) [11]
>
> Я бы уточнил, человеческого глаза.
>

http://delphimaster.net/view/15-1194041440/


 
oxffff ©
 
(2007-11-04 12:03)
[26]


> antonn ©   (04.11.07 01:33) [24]
>
> > oxffff ©   (03.11.07 23:27) [23]
> >
> > Дорогой друг.
> > Ваша реакция мне понятна.
> >
> > Для начала очень рекомендую объяснить назначение 240,
> и
> > откуда взялась эта цифра.
>
> а не все ли равно? у канала RBG максимальное значение 255,
>  у яркости максимальное 240.
>
> Ну откройте пайнт, ну потыкайте, сразу куча вопросов отпадет.
> ..

Открыл и что дальше. Откройте MSDN

Device-Independent Bitmaps
A device-independent bitmap (DIB) contains a color table. A color table describes how pixel values correspond to RGB color values, which describe colors that are produced by emitting light.

RGBQUAD
The RGBQUAD structure describes a color consisting of relative intensities of red, green, and blue.

typedef struct tagRGBQUAD {
 BYTE    rgbBlue;
 BYTE    rgbGreen;
 BYTE    rgbRed;
 BYTE    rgbReserved;
} RGBQUAD;

Когда сохраняется растр. То сохраняется цвет в формате RGB (ARGB).
А 240 ну никак не может увеличить яркость свечения пикселя на мониторе.


 
MBo ©
 
(2007-11-04 12:25)
[27]

>WFS   (03.11.07 13:02) [9]
>3. Яркость.
>Мне нужно эту яркость вычислить.

Для модели HLS уже подсказали — antonn ©   (03.11.07 12:40) [1], что совпадает с куском из
procedure ColorRGBToHLS из GraphUtil.pas


 
antonn ©
 
(2007-11-04 12:32)
[28]


> oxffff ©   (04.11.07 12:03) [26]

замучал флудить, попробуй не кочевряжиться, а почитать:
http://ru.wikipedia.org/wiki/HLS


 
oxffff ©
 
(2007-11-04 12:38)
[29]


> antonn ©   (04.11.07 12:32) [28]
>
> > oxffff ©   (04.11.07 12:03) [26]
>
> замучал флудить, попробуй не кочевряжиться, а почитать:
> http://ru.wikipedia.org/wiki/HLS

Может подумать.
Ты все же настоятельно читать не хочешь.

The RGBQUAD structure describes a color consisting of relative intensities of red, green, and blue.


 
Sapersky
 
(2007-11-04 12:40)
[30]

Необходимо выполнить фильтрацию изображения. Для этого нужно знать яркость каждого пикселя в изображении

А что это за фильтрация такая? Обычно фильтруют прямо по цветовым компонентам. Отсюда, видимо, и «LOL Пацталом».

у канала RBG максимальное значение 255, у яркости максимальное 240.

Максимальное на самом деле может быть любое. Hue (первый компонент HSV/HLS) часто ограничивают до 240, т.к. по-хорошему оно должно быть в диапазоне 0..360, но байта на 360 не хватает; а 240 ровно в 1.5 раза меньше (уменьшаются ошибки округления). Возможно, L в некоторых реализациях ограничивают «за компанию», хотя это не обязательно.

рекомендую ознакомиться для начала Mathematics of Lighting. Например в DirectX SDK.

Не знаю, какой у вас SDK, но в 8-м только про 3D.
Лучше, наверное, http://www.efg2.com


 
oxffff ©
 
(2007-11-04 12:42)
[31]


> antonn ©   (04.11.07 12:32) [28]

Может ты все же объяснить откуда взялось значение 240?
В приведенной тобой формуле и твоей ссылке про это ничего нет.


 
antonn ©
 
(2007-11-04 12:44)
[32]


> Может ты все же объяснить откуда взялось значение 240?


> Максимальное на самом деле может быть любое. Hue (первый
> компонент HSV/HLS) часто ограничивают до 240, т.к. по-хорошему
> оно должно быть в диапазоне 0..360, но байта на 360 не хватает;
>  а 240 ровно в 1.5 раза меньше


 
oxffff ©
 
(2007-11-04 12:46)
[33]


> antonn ©   (04.11.07 12:44) [32]

Часто ограничивает кто?

Может тебе взлянуть в словарь и перевести relative intensities


 
antonn ©
 
(2007-11-04 12:51)
[34]


> Часто ограничивает кто?

[19]
засим заканчиваю говорить с любителями поспорить. нужно было — уже нашел бы.
http://www.firststeps.ru/mfc/winapi/commdia/r.php?15


 
homm ©
 
(2007-11-04 12:58)
[35]


> 0xffff ©
Идиот.

> turbouser ©
Буквоед.

> [29] oxffff ©   (04.11.07 12:38)
При чем здесь RGBQUAD structure? Ну попробуй пяткой затылок почесать то?

Один Антошка молодец :)


 
homm ©
 
(2007-11-04 13:03)
[36]

> [29] oxffff ©   (04.11.07 12:38)

Ну дали тебе триугольник, говорят, найди синусы. Что ты ответишь? Что у триугольников нет синусов? Детский сад.


 
oxffff ©
 
(2007-11-04 13:10)
[37]


> antonn ©   (04.11.07 12:51) [34]
>
> > Часто ограничивает кто?
>
> [19]
> засим заканчиваю говорить с любителями поспорить. нужно
> было — уже нашел бы.
> http://www.firststeps.ru/mfc/winapi/commdia/r.php?15

Ты так и не ответил на вопрос кто ограничивает значение коэффициента в
240.  

В диалоговом окне Цвет (Color), насыщенность и значения яркости должна быть в диапазоне 0 до 240, и значение оттенка должно быть в диапазоне 0 до 239.

А приводишь ссылки на диалоговое окно.
Тебе уже выше намекнули, что значение может быть произвольным.
И я тебе тоже намекаю на relative intensities.


> homm ©   (04.11.07 12:58) [35]
>
> > 0xffff ©
> Идиот.

Ну сюдя по тому, что твоих реплик не звучало в этой теме.
Я думаю модератору нужно обратить внимание на твое выражение.
По скольку ни доказательств, ни обсуждения.
Просто дешевый «бряк».
Что указывает на твое бескультурие и юность. Ну и глупость конечно же.

:)


 
oxffff ©
 
(2007-11-04 13:14)
[38]


> homm ©   (04.11.07 13:03) [36]
> > [29] oxffff ©   (04.11.07 12:38)
>
> Ну дали тебе триугольник, говорят, найди синусы. Что ты
> ответишь? Что у триугольников нет синусов? Детский сад.

А ты докажи ограничение коэффициента в 240.
А именно магический смысл этого 240.


 
homm ©
 
(2007-11-04 13:17)
[39]

> По скольку ни доказательств, ни обсуждения.
> Просто дешевый «бряк».

Ты сам за меня все сказал, пример и объяснения я привел выше.

> А ты докажи ограничение коэффициента в 240.

> Максимальное на самом деле может быть любое. Hue (первый
> компонент HSV/HLS) часто ограничивают до 240, т.к. по-хорошему
> оно должно быть в диапазоне 0..360, но байта на 360 не хватает;
> а 240 ровно в 1.5 раза меньше (уменьшаются ошибки округления)
> . Возможно, L в некоторых реализациях ограничивают «за компанию»,
> хотя это не обязательно.


 
homm ©
 
(2007-11-04 13:20)
[40]

То, что ты ограничиваешь канал красного до 255 какой имеет магический смысл? Пишишь и не задумываешься…
А магический смысл в отм, что-бы уместиться в заданные рамки, а в случае с яркостью, еше и накладывавется смысл простого перевода в другие системы представления цвета.


 
oxffff ©
 
(2007-11-04 13:55)
[41]

Если ты посмотришь ссылку,

http://ru.wikipedia.org/wiki/HLS

то составляющие цвета представлены в интервале [0,1].
А про 240 там нет и намека. Это ограничение вымышленно.
И к яркости ни HLS, ни RGB отношения не имеет.
То что в одних системах выделяют базовый уровень и называют это яркостью не имеет ни какого отношения к яркости.

По причине того, что во всех форматах яркость величина относительная, считай коэффициент усиления яркости.


 
homm ©
 
(2007-11-04 14:03)
[42]

> [41] oxffff ©   (04.11.07 13:55)
> то составляющие цвета представлены в интервале [0,1].

Любые цветовые компоненты можно представить в любом, удобном тебе диапазоне, и в любом случае любой дииапазон будет вымышленным. Хоть [0,1] хоть [-0.99,-0.9]. И все они имеют право существовать, если в них удобно измерять в конкретных случаях. А [0..240] видимо просто более употребим, возбми другой, если этот вызывает такой отвращение.


 
oxffff ©
 
(2007-11-04 14:16)
[43]


> homm ©   (04.11.07 14:03) [42]

Так ты так и не ответил на вопрос темы. Как узнать яркость пикселя?

А приведенные формулы antonn© не отвечают на вопрос о яркости пикселя поскольку имеют отношение к усредненному вымышленному(относительному) понятию яркости в формате HLS,

да еще и не учитывают цветовосприятие глаза у которого также есть цветомаски.

Я думаю тебе бы не мешало извиниться за свои так и не обоснованные слова. Я не угрожаю, пока просто предупреждаю.


 
antonn ©
 
(2007-11-04 14:43)
[44]


> То что в одних системах выделяют базовый уровень и называют
> это яркостью не имеет ни какого отношения к яркости.

а то, что называется RGB тоже не существует, нет такого в цвете, это кто то придумал, да еще ограничения ввели 0-255… Есть только матрица и ложка.


> да еще и не учитывают цветовосприятие глаза у которого также
> есть цветомаски.

лолище )))) а фильтрация изображения у автора «на глазок» происходит? ))))

в [9] довольно понятно о чем идет речь, и в это самой «речи» есть параметр «яркость», по которому можно разфильтровать изображение вдоль и поперек.

Тему уже можно в Потрепаца перенести %)


 
oxffff ©
 
(2007-11-04 14:58)
[45]


> в [9] довольно понятно о чем идет речь, и в это самой «речи»
> есть параметр «яркость», по которому можно разфильтровать
> изображение вдоль и поперек.

Это не яркость.
Это усредненный базовый относительный уровень.


 
antonn ©
 
(2007-11-04 15:01)
[46]


> Это усредненный базовый относительный уровень.

а вот всех редекторах изображений это Яркость


 
oxffff ©
 
(2007-11-04 15:05)
[47]


> antonn ©   (04.11.07 15:01) [46]

Яркость чего?
Только точное определение.


 
antonn ©
 
(2007-11-04 15:14)
[48]

«только точное определение» мне не нужно, если очень интересно, можно спросить у авторов программ (фотошоп, корел и тп):
http://ghcorel.narod.ru/17.9.jpg
http://arttower.ru/tutorial/axx/Corel_Painter_8_book_rus/Charter2/2.jpg
http://www.computerbooks.ru/books/Graphics/Book.FreeHand/Glava_11/7.gif
http://www.morepc.ru/i/scanner/028_5.jpg


 
Anatoly Podgoretsky ©
 
(2007-11-04 15:18)
[49]

> oxffff  (04.11.2007 15:05:47)  [47]

И отдельно определения, что такое яркость.


 
Sapersky
 
(2007-11-04 15:20)
[50]

Если ты посмотришь ссылку,
http://ru.wikipedia.org/wiki/HLS
то составляющие цвета представлены в интервале [0,1].
А про 240 там нет и намека.

Про 360 там намёк есть. В HSV/HLS используется цилиндрическая система координат, Hue измеряется в градусах, потому и 0..360 -> 0..240.

Насчёт «частого» ограничения я, возможно, преувеличил. Видел две реализации с ограничением (у Кетмара и в MS-вских диалогах) и две без (на efg2.com и в книге Шикина/Борескова). 50% на «часто» не тянет, хотя это явно больше, чем «иногда» :)

в [9] довольно понятно о чем идет речь, и в это самой «речи» есть параметр «яркость», по которому можно разфильтровать изображение вдоль и поперек.

В [9] описывается скорее HSV, чем HLS. И не факт, что автору нужно то или другое. Возможно, обычный grayscale, возможно, он просто не в курсе о существовании RGB. Пусть уточняет — какую фильтрацию он делает.


 
antonn ©
 
(2007-11-04 15:24)
[51]


>
> Про 360 там намёк есть. В HSV/HLS используется цилиндрическая
> система координат, Hue измеряется в градусах, потому и 0.
> .360 -> 0..240.

а вот и иллюстрация%)
http://www.compgraph.org/im/hsb.jpg


 
oxffff ©
 
(2007-11-04 15:26)
[52]


> Sapersky   (04.11.07 15:20) [50]

Color values for light sources represent the amount of a particular light component it emits. Because lights don»t use an alpha component, only the red, green, and blue components of the color are relevant. You can visualize the three components as the red, green, and blue lenses on a projection television. Each lens might be off (a 0.0 value in the appropriate member), it might be as bright as possible (a 1.0 value), or it might be some level in between. The colors coming through the lenses combine to make the light»s final color. A combination like R: 1.0, G: 1.0, B: 1.0 creates a white light, where R: 0.0, G: 0.0, B: 0.0 doesn»t emit light at all. You can make a light that emits only one component, resulting in a pure red, green, or blue light, or, the light could use combinations to emit colors like yellow or purple. You can even set negative color component values to create a «dark light» that actually removes light from a scene. Or, you might set the components to some value larger than 1.0 to create an extremely bright light.


 
antonn ©
 
(2007-11-04 15:30)
[53]

да что пристал со своим RGB, речь идет о другой цветовой модели…


 
oxffff ©
 
(2007-11-04 15:32)
[54]


> antonn ©   (04.11.07 15:24) [51]
>
> >
> > Про 360 там намёк есть. В HSV/HLS используется цилиндрическая
>
> > система координат, Hue измеряется в градусах, потому и
> 0.
> > .360 -> 0..240.
>
> а вот и иллюстрация%)
> http://www.compgraph.org/im/hsb.jpg

Ну чисто технически saturation и brightness это всего лишь коэффициенты, которые видоизменяют Hue. Один в сторону черного цвета (MIN), другой в сторону белого(MAX).

НО!!! Это только коэффициенты.


 
oxffff ©
 
(2007-11-04 15:33)
[55]


> antonn ©   (04.11.07 15:30) [53]
> да что пристал со своим RGB, речь идет о другой цветовой
> модели…

Да такая разница. Это те же яйца только с другой стороны.


 
antonn ©
 
(2007-11-04 15:38)
[56]


> НО!!! Это только коэффициенты.

—>

> Да такая разница. Это те же яйца только с другой стороны.


 
oxffff ©
 
(2007-11-04 15:40)
[57]


> antonn ©   (04.11.07 15:24) [51]

oxffff ©   (04.11.07 14:58) [45]


 
Sapersky
 
(2007-11-04 15:56)
[58]

oxffff ©   (04.11.07 15:26) [52]

Это всё-таки из другой оперы (хотя тоже интересной — меня в своё время сильно впечатлил «dark light», «источник темноты», сорри за оффтоп :)).

а вот и иллюстрация%)

Кстати, в Шикине/Борескове написано — «шестигранный конус». И судя по тому, как в функциях преобразования оно делится на 60-градусные сектора — я склонен этому верить.
В HLS — «два шестигранных конуса, поставленных друг на друга».
Хотя странные «цилиндрические координаты» (из той же книжки) получаются. Цилиндрические шестигранные, хм… :)


 
homm ©
 
(2007-11-04 17:47)
[59]

> [43] oxffff ©   (04.11.07 14:16)
> Я думаю тебе бы не мешало извиниться за свои так и не обоснованные
> слова.

Я извиняюсь за свои слова, и признаю, что ты не идиот, ты только прикидываешься идиотом, зачем — не знаю. Уже сам автор вопрос доступно объяснил, что ему нужно то, что называется яркостью (чем бы оно не было на самом деле) в цветовой модели HLS (см [9]).


 
WFS
 
(2007-11-04 19:31)
[60]

Не думал, что мой вопрос вызовет такую бурную дискуссию:)))
Короче, я взял яркость для каждого канала через GetR(B,G)value и все три обработал по одинаковому алгоритму и все работает)))

Алгоритм основан на том, что вводится матрица ядра, которая как бы сворачивается с изображением, в результате чего оно как бы размазывается


Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти гамму ми минор
  • Как найти попутчиков до костромы
  • Как найти координаты для gps
  • Как составить молекулярную ионную связь
  • Как составить конкурентное преимущество

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии