На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> RGB to YUV и обратно
    Нужна помощь по сабжу. Никак не пойму в чем дело. Переаожу в YUV так:
    ExpandedWrap disabled
      #define GetYValue(pix) ceil(GetRValue(pix)*.299 + GetGValue(pix)*.587+GetBValue(pix)*.114)
      #define GetUValue(pix) ceil(GetRValue(pix)*-.169 + GetGValue(pix)*-.332 +GetBValue(pix)*.5+128.)
      #define GetVValue(pix) ceil(GetRValue(pix)*.5+128. - GetGValue(pix)*0.419-GetBValue(pix)*0.0813)


    А обратно:
    ExpandedWrap disabled
      ##define YUV(Y,U,V) (0x0) | ((byte)ceil( Y + (1.4075 * (V - 128)) )&0xFF) \
                              | ((byte)ceil( Y - (0.3455 * (U - 128) + 0.7169 * (V - 128)) )<<8) \
                              | ((byte)ceil( Y + (1.7790 * (U - 128)) )<<16)


    Однако глючит на черных областях + траблы с красным :(
    Сообщение отредактировано: Мяут -
      Вот что нашлось у меня на диске по этому вопросу :
      ExpandedWrap disabled
        RGB to YUV
        Y  = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
        V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
        U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
         
        YUV to RGB
        B = 1.164(Y - 16) + 2.018(U - 128)
        G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
        R = 1.164(Y - 16) + 1.596(V - 128)
         
         
        и еще
        Код:
         
               R = Y + (1.4075 * (V - 128));
               G = Y - (0.3455 * (U - 128) - (0.7169 * (V - 128));
               B = Y + (1.7790 * (U - 128);
         
               Y = R *  .299 + G *  .587 + B *  .114;
               U = R * -.169 + G * -.332 + B *  .500 + 128.;
               V = R *  .500 + G * -.419 + B * -.0813 + 128.;
         
         
         
        Код:
         
        YUV.Y := trunc( 0.299*RGB.R + 0.587*RGB.G + 0.114*RGB.B) ;
        YUV.U := (RGB.R - YUV.Y) div 2 +128 ;
        YUV.V := (RGB.B - YUV.Y) div 2 +128 ;
         
        RGB.R := YUV.Y + (YUV.U shl 1 - 256) ;
        RGB.B := YUV.Y + (YUV.V shl 1 - 256) ;
        RGB.G := trunc( ( YUV.Y - 0.299*RGB.R - 0.114*rgb.b ) / 0.587 ) ;  
         
        Y - это и есть яркость


      а также ссылка http://semmix.pl/color/models/emo110.htm
        Цитата Crait @
        ExpandedWrap disabled
          R = Y + (1.4075 * (V - 128));
          G = Y - (0.3455 * (U - 128) - (0.7169 * (V - 128));
          B = Y + (1.7790 * (U - 128);
          Y = R * .299 + G * .587 + B * .114;
          U = R * -.169 + G * -.332 + B * .500 + 128.;
          V = R * .500 + G * -.419 + B * -.0813 + 128.;

        Этот я и использую ;)
        Сообщение отредактировано: trainer -
          Писец (харек такой :yes: ), а что это такое ? :unsure:
            Цитата NoeR @
            а что это такое ?
            YUV? Кодировка цвета такая. Пришла из цветного телевидения/видеозаписи.
              А РГБ ? <_<
                Цитата NoeR @
                А РГБ ?
                Это другая кодировка цвета.
                Есть еще CMYK - эта из полиграфии.
                  Никто не знает... Жаль пришлось отключить :(

                  Добавлено
                  YUV или YCrCb ;)

                  Цитата
                  В нем Y — яркостная составляющая, а Cr, Cb — компоненты, отвечающие за цвет (хроматический красный и хроматический синий). За счет того, что человеческий глаз менее чувствителен к цвету, чем к яркости, появляется возможность архивировать массивы для Cr и Cb компонент с большими потерями и, соответственно, большими коэффициентами сжатия. Подобное преобразование уже давно используется в телевидении. На сигналы, отвечающие за цвет, там выделяется более узкая полоса частот.


                  ;)
                    Спасибо что обьеснили :)
                      Скажите плиз а если преобразовать с RGB в YUV и обратно RGB изображение идентичное начальному?

                      Добавлено
                      trainerСкажите плиз а если преобразовать с RGB в YUV и обратно RGB изображение идентичное начальному?
                        В идеале - да. Собственно, именно это делается в телевидении. Видеокамера - RGB, телесигнал - YUV, телевизор - опять RGB.
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0535 ]   [ 16 queries used ]   [ Generated: 21.04.25, 07:29 GMT ]