'개발/Image Processing'에 해당되는 글 18건

  1. 2008.09.29 YUV(YCbCr) 변환에 대하여
  2. 2008.09.29 YUV to RGB conversion
  3. 2008.09.29 RGB, YUV
  4. 2008.09.29 코덱별 특징
  5. 2008.09.29 영상압축 알고리즘의 종류와 특징
2008. 9. 29. 18:27

YUV(YCbCr) 변환에 대하여


YUV와 YIQ는 TV에 사용되는 색 표현방식이다.
YUV방식은 사람의 눈이 색상보다는 밝기에 민감하다는 사실에 착안한
방식으로,
색을 밝기(Luminance)인 Y성분과 색상(Chrominance)인 U(Cb)V(Cr) 성분으로

구분한다.
Y성분은 오차에 민감하므로 색상성분인 U와 V보다 많은 비트를 코딩한다.

전형적인 Y:U:V의 비율은 4:2:2 이다.
YUV 방식은 CD-I와 DYI (Digital Video Interactive)에서도 사용된다.

(Y 성분은 이미지를 Gray로 만든 것과 같다)

 

왜 RGB 정보를 그냥 이용하지 않고 YUV로 포맷을 변화시키냐면,

단순히 RGB 정보로 그 값을 기록했을 경우보다 YUV를 통하면 더 작은 데이터를 

만들어내서, 특히 대역폭(bandwidth)이 낮은

경우에 적합하게 표현할 수 있기 때문이다

 

+주의점+

YUV 파일 형식은, U,V data의 배열에 따라 Direction이 존재하는데 보통

Direction Vertical의 YUV420을 주로 사용한다.

그래서 파일로 저장할때는, Direction을 염두에 두고, 파일에 저장해야 하는데-

Direction Vertical은 Y에 덧붙여 U를 쓰고, V를 모두 쓴다

Direction Horizontal은 Y에 덧붙여서 U를 width/2 화소만큼, 

V를 width/2 화소만큼 번갈아가며 저장하게 된다

저장방법이 복잡해서 Direction Vertical을 주로 쓴다

 

 

 

(1) 전형적 Y:U:V 비율은 4:2:2로,, Y 4픽셀당 U, V는 2픽셀씩이라는 의미임.

ex> YUYV,YUYV,YUYV..

 

변환식은-

______________________________________________

Y = 0.3*R + 0.59*G + 0.11*B
U = (B-Y) x 0.493
V = (R-Y) x 0.877

..or..

Y = 0.299f * R + 0.587f * G + 0.114f * B;
U = -0.1687f * R - 0.3313f * G + 0.5f * B + 128;
V = 0.5f*R - 0.4187f*G - 0.0813f*B + 128; 

 

 

R = Y + 0.956*U + 0.621*V
G = Y + 0.272*U + 0.647*V
B = Y + 1.1061*U + 1.703*V

 

R = 1.00000*Y + 1.40200*V;
G = 1.00000*Y - 0.34414*U - 0.71414*V;
B = 1.00000*Y + 1.77200*U;

R = 1.164*(Y - 16.0) + 1.596*(V - 128.0);
G = 1.164*(Y - 16.0) - 0.813*(V - 128.0) - 0.391*(U - 128.0);
B = 1.164*(Y - 16.0) + 2.018*(U - 128.0);
───────────────────────────────

...

 

 

(2) Y:U:V 비율이 4:2:0인 경우,, Y 4픽셀 당 U, V는 가로/세로 2픽셀당

1픽셀씩이라는 의미임.

ex> 4x4 이미지일 경우,,

 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16  U1 U2 U3 U4 

  V1 V2 V3 V4..

 

 

(3) Y:U:V 4:1:1은 화상을 구성하는 화소를 4개씩 묶어서 각각의 휘도(Y)를 샘플링하고, 색차(U,V)는 4개의 화소의 평균값을 취한다.

그러므로 4개의 화소에 4개의 휘도( Y)와 각 1개씩의 색차(U,V)가 있으므로

전체 6개의 샘플이 된다

ex > U2 Y0 Y1 V2 Y2 Y3
 

 

(4) YUV444에서 YUV420으로 변환하는 경우,, UV의 4화소를 평균하여 1화소로

바꿔 줄여준다

bool Yuv4442Yuv420(BYTE*U444,BYTE*V444,BYTE *U,BYTE *V,int wid,int hei)
{
    int i, j;
    register int addr;
    register int pos0, pos1, pos2, pos3;
 
    addr = 0;
 
    for (i=0; i<hei; i+=2) for(j=0; j<wid; j+=2)
    {
        pos0 = i*wid + j;       pos1 = pos0 + 1;
        pos2 = pos0 + wid;      pos3 = pos2 + 1;

 

        //오른쪽 쉬프트 연산 2번

        U[addr] = (BYTE)MyClip(((int)

           U444[pos0]+(int)U444[pos1]+(int)U444[pos2]+(int)U444[pos3])>>2); 

        //즉 나누기 4 : 평균내기
        V[addr] = (BYTE)MyClip(((int)

           V444[pos0]+(int)V444[pos1]+(int)V444[pos2]+(int)V444[pos3])>>2);  
        addr++;
    }
    return  true;
}

 

 

2008. 9. 29. 18:26

YUV to RGB conversion


YUV to RGB 변환 코드를 작성하시오.

 

step1)

 

   #define CLIP(x) (((x) < 0) ? 0 : (((x) > 255) ? 255 : (x)))


   void Yuv2Rgb(int Y, int U, int V, int &R, int &G, int &B)
   {
      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) ;

 

      B = CLIP(B);
      G = CLIP(G);
      R = CLIP(R);
   }


 => YUV, 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)

 (YUV 포멧 및 RGB 변환에 관해서는 http://www.fourcc.org/ 를 참조하라.)


 위의 공식은 실제 몇몇 픽셀에서 overflow 가 발생할 것이다.

 0~255의 범위를 벗어나는 값이 나온다.  이를 방지하기 위해, 0~ 255 값으로 clipping 이 필요하다.

 


step2)

 

   #define CLIP(x) (((x) < 0) ? 0 : (((x) > 255) ? 255 : (x)))

 

   void Yuv2Rgb(int Y, int U, int V, int &R, int &G, int &B)
   {
      B = ( 76284*(Y-16)                 + 132252*(U-128) ) >> 16;
      G = ( 76284*(Y-16) - 53281*(V-128) - 25625*(U-128) ) >> 16 ;
      R = ( 76284*(Y-16) + 104595*(V-128) ) >> 16 ;

     

      B = CLIP(B);
      G = CLIP(G);
      R = CLIP(R);
   }


 => YUV, RGB 변환 공식을 약간 변형하면 아래와 같다.

 B = 65536*(1.164*(Y-16)                 + 2.018*(U-128) ) / 65536
 G = 65536*(1.164*(Y-16) - 0.813*(V-128) - 0.391*(U-128) ) / 65536
 R = 65536*(1.164*(Y-16) + 1.596*(V-128) ) / 65536

 

 B = ( 76284*(Y-16)                  + 132252*(U-128) ) >> 16
 G = ( 76284*(Y-16) -  53281*(V-128) -  25625*(U-128) ) >> 16
 R = ( 76284*(Y-16) + 104595*(V-128) ) >> 16
 
 변형된 공식을 사용함으로서, floating point 연산을 없엘 수 있다.

2008. 9. 29. 18:25

RGB, YUV

(1) RGB 방식
    ...(중략)... 거의 자연색상 그대로 표현하기 위해서는 각각 8비트의 크기가 필요하다. R=8비트, G=8비트, B=8비트 이면 모두 224, 즉 16,000,000 가지의 색상을 표현할 수 있다.
    그리고 모두 8비트 만으로 표현되는 시스템에서는 R=3비트, G=3비트, B=2비트를 할당하여 256가지 색상을 표현한다. 이와 같이 제한된 비트를 가지는 시스템에서는 일반적으로 사람 눈이 가장 둔감한 파랑색에 비트수를 적게 할당한다.

     
     
    R
    G
    B
    Red
    255
    0
    0
    Green
    0
    255
    0
    Cyan
    0
    0
    255
    Magenta
    255
    255
    0
    Yellow
    0
    255
    255
    Black
    0
    0
    0
    White
    255
    255
    255
    Dark
    76
    76
    76
    Gray
    123
    123
    123
    Light Gray
    204
    204
    204

    (2) YUV 방식
      YUV와 YIQ는 TV에 사용되는 색 표현방식이다. YUV방식은 사람의 눈이 색상보다는 밝기에 민감하다는 사실에 착안한 방식으로, 색을 밝기(Luminance)인 Y성분과 색상(Chrominance)인 U와 V 성분으로 구분한다. Y성분은 오차에 민감하므로 색상성분인 U와 V보다 많은 비트를 코딩한다. 전형적인 Y:U:V의 비율은 4:2:2 이다.
      YUV 방식은 CD-I와 DYI (Digital Video Interactive)에서도 사용된다. 만일 RGB 값이 주어졌을 경우, YUV 값은 =>
        Y = 0.3R + 0.59G + 0.11B
        U = (B-Y) x 0.493
        V = (R-Y) x 0.877
      반대로 YUV값이 주어졌을 경우, RGB값은 =>
        R = Y + 0.956U + 0.621V
        G = Y + 0.272U + 0.647V
        B = Y + 1.1061U + 1.703V
         
2008. 9. 29. 18:24

코덱별 특징


일반적으로 코덱은 비디오 파일을 압축하는 방식을 말하는데, 음악파일을 압축하는 방식이 거의 MPEG로 통일되어간다면 동영상 쪽은 춘추전국시대라고 할 수 있다. 이는 제조회사별로 다른 압축 방식을 쓰기 때문인데, 음악파일(MP3나 RA파일 등)이 소프트웨어적으로 제작되고 재생되는 반면에 동영상은 하드웨어적으로 제작되고 재생되는 경우가 많기 때문이다. 가장 많이 쓰는 압축방식에는 인텔사의 인디오(5.0)과 에플사의 MOV. 인디오가 IBM의 규격화한 압축방식이라면, MOV는 매킨토시에 규격화한 압축방식이다. 그러나 현재는 이러한 제한없이 양쪽 컴퓨터에서 아무런 문제 없이 사용한다. Video for Windows가 제공하는 압축 코덱은 RLE와 Microsoft Video, Intel Indeo, 그리고 Cinepak 모두 4가지가 있다.

Codec별 특성


ASF 파일
마이크로 소프트 사에서 제안한 스트림 포맷. 이 포맷은 앞으로 스트림 방식의 표준으로 선택될 가능성이 높은 파일 방식이다.


RA 파일
리얼 미디어라는 비디오 스트림 방식에서 사용되는 파일 포맷 방식. RA파일은 본래 인터넷 라디오 방송을 하기 위한 포맷으로 계발되었지만, 현재는 비디오 까지 포함하는 스트림 방식으로 계발되었다. 오디오 RA파일은 압축률은 뛰어나지만 음질이 MP3나 SWA에 비해 떨어지는 단점이 있다. 비디오 RA 파일 역시 압축률은 높지만, 화질이 떨어진다. 둘다 인터넷 방송용으로 많이 사용된다.


MPEG 파일
MPEG 파일 형식은 비디오 신호의 압축과 재생시 실시간 알고리즘 개발에 주목적을 두고 활동화는 표준화 그룹에서 제안한 파일 형식. MPEG 파일 형식은 MPG 라고 하는 확장자를 가지며 별도로 MPEG 보드가 설치된 컴퓨터에서만 운용되는 파일 형식으로서 비디오 CD 등에 담긴 파일 내용을 볼 때에 많이 활용하고 있는 형식. 486 PC에서는 완벽하지는 않지만, 펜티엄 100MHz 이상의 컴퓨터/램 16MB 이상이면 소프트웨어적으로 재생이 가능. MPEG 전용 보드를 사용하여야 완벽한 재생이 이루어진다. MPEG 파일은 윈도95에서는 직접 지원되지 않고 있으나, 윈도우 98에서는 기본으로 지원하고 있다.


MOV파일
MOV 파일은 QuinckTime 플레이어로 재생된다. MOV 파일 형식은 원래 매킨토시 컴퓨터에서 활용되는 파일 형식. 이를 윈도 환경에서도 구현하도록 재생 모듈을 개발하여 지원하고 있는 파일 형식. 매킨토시와 윈도 환경에서 함께 동작하도록 하는 CD 타이틀은 MOV파일 형식을 주로 사용한다.


Intel Indeo
인텔에서 개발한 코덱으로 여러 버전이 있다. 시네팩과 함께 널리 사용되고 압축 시간이 시네팩보다 빠르다. 16 비트 칼라에 효과적이다. 24비트로 이미지를 압축했을 경우, 시스템이 24비트로 설정 되있지 않더라도 마치 24비트 처럼 좋은 Quality의 영상을 재생할 수 있다. 특히 16비트나 24비트의 파일을 압축하고 재생할 경우 더욱 진가가 나타난다. 그러나, 다른 코덱에 비해 버전업이 느리다는 있다. 요즘에 시디롬 타이틀은 이것으로 많이 제작된다.


MIcrosoft Video
RLE와는 다르게 8비트는 물론이고 16비트, 24비트의 영상까지 압축할수 있다. 뛰어난 Quality와 압축률이 장점이나 압축률을 너무 높이면 이미지가 끊어지고 파일의 용량도 많아지는 단점이 있다.


Cinepak
래디우스(Radius)에서 개발된 코덱으로 압축에 많은 시간이 소용되나 가장 높은 압축을 할 수 있다. 256 칼라를 사용할 경우에 특히 효과적이다. 일반 압축 알고니즘과는 달리 다른 symetrical이라는 알고니즘을 이용하며 압축 시간이 비교적 다른 코덱에 비해 오래 걸린다는 단점이 있지만 압축된 영상을 재생시 다른 코덱에 비해 빠르게 압축을 풀어준다는 점과 뛰어난 압축률과 좋은 Quality를 얻을 수 있다는 장점 있다. 또, 위의 네가지중 파일 용량을 가장 적게 만들어 준다. 그래서 주로 CD-ROM 타이틀 제작시 많이 사용된다. 역사가 아주 오래되었다.


RLE (Run Lengh Encoded)
2차원 애니메이션 제작에 효과적이며 일반 비디오에는 사용할 수 없다. 다른 코덱에 비해서 압축 효율성은 떨어지나 영상의 수평층(Horizontal Band)에서 유사한 색상의 길이와 깊이를 기억하는 방식의 압축 알고니즘을 사용. 그래서, 많은 영역에 걸쳐 같거나 유사한 색상을 사용하는 애니메이션을 압축하는데 많은 효과를 볼수 있다. 그러나 8비트 이상의 영상은 압축할수 없다는 것이 단점.

XDM 파일
씽 테크놀로지(Xing Technology)에서 발표한 스트림 웍스(StreamWorks) 방식에서 사용하는 비디오 파일 방식
2008. 9. 29. 18:24

영상압축 알고리즘의 종류와 특징


① M-JPEG(Motion JPEG) : 디지털 비디오 편집에 있어서 가장 많이 사용되고 있는 압축방식이며 스틸이미지 압축의 대명사인 JPEG포맷을 동영상용으로 확장한 개념입니다. 압축비를 자유롭게 설정할 수 있는 가변압축비가 지원되고 관련된 하드웨어도 절대다수를 차지하고 있습니다.
압축개념에 있어서 공간적 압축방식만을 사용하기 때문에 임의의 프레임에 접근이 용이하여 디지털 비디오 편집에 적당하며 실사간 압축을 지원하는 하드웨어들이 많이 출시되어 있어 관련된 장비가 많은 편입니다. 단, 하드웨어 칩셋을 사용한 압축방식(최근 고성능 CPU를 사용한 소프트웨어 방식도 있음)의 특성상 칩셋과 드라이버가 다르면 같은 M-JPEG방식이라도 호환이 되지 않는 것이 단점이라고 볼 수 있습니다. DV방식이 보편화되기 전까지 절대적인 위치였으나 PC사양의 고성능화와 IEEE-1394인터페이스의 보급에 힘입은 DV방식의 약진에 주춤하고 있는 추세입니다.

② DV(Digital Video) : DV방식은 아날로그방식으로 촬영된 소재를 컴퓨터에서 캡쳐(컴퓨터에서 영상을 디지털로 전환하여 데이터로서 저장하는 것)할 때 압축비와 캡쳐포맷을 설정하는 M-JPEG방식과 달리 촬영시 비디오 카메라에서 이미 5:1의 고정 압축비와 720X480, 29.97fps(NTSC)의 포맷으로 압축저장 된다는 특징이 있습니다. 이로 인해 캡쳐의 과정이 IEEE-1394인터페이스에 의한 파일전송 수준으로 간단해졌다는 것과 포맷이나 압축비의 설정이 필요없다는 장점이 있습니다.
M-JPEG와 마찬가지로 공간적 압축방식만을 사용하므로 디지털 비디오 편집에 적당한 포맷이며 초당 3.6MB의 전송률도 최근 PC의 비약적인 발전으로 충분히 소화가능한 데이터량이 되었습니다. IEEE-1394인터페이스의 사용으로 디지털 방식의 연결을 사용하므로 장비특성에 의해 호환이 되지 않는 비디오 장비가 있다는 것이 단점입니다만, 최근 OHCI라는 IEEE-1394 인터페이스 관련 칩셋의 표준화가 완성됨에 따라 가장 각광받고 있는 편집용 디지털 비디오 포맷이 되어가고 있습니다.

③MPEG(Moving Picture Experts Group) : 디지털 비디오 편집보다는 매체용 포맷으로 더 각광받고 있는 디지털 비디오 포맷으로 동영상에 관련된 거의 모든 압축방식에 관한 내용을 포괄할 정도로 다양한 압축방식과 포맷을 규정하고 있습니다.
수많은 내용중 많이 사용되는 것은 VideoCD에 주로 사용되는 MPEG1과 DVD에 사용되고 있는 MPEG2, 인터넷등의 네트워크용 영상포맷으로 사용되는 MPEG4등이 있습니다. 공간적 압축방식과 더불어 시간적 압축방식을 사용하여 화질에 비해 압축효율이 월등하며, 관련된 하드웨어와 소프트웨어가 가장 많은 포맷입니다.
MPEG1은 352x240 29.97fps (NTSC VCD기준)의 포맷으로 요즈음의 기준으로는 그다지 고화질이 아니지만 PC수준에서 다루기 용이한 데이터 사이즈로 현재도 가장 많은 사용자층을 가지고 있습니다.
MPEG2는 720X480, 29.97fps(NTSC 표준DVD기준)의 포맷으로 현재 실용화된 가장 고화질의 매체용 포맷이라고 할 수 있습니다. MPEG4는 현재 인터넷방송에 주로 사용되고 있으며 네트워크 전송대역폭에 따라 압축비가 결정되며 현재까지 최고의 압축비를 자랑하는 포맷입니다.

④Cinepak : Radius사에서 개발한 소프트웨어 방식의 압축포맷으로 해상도와 압축비의 자유로운 설정이 가능하며 하프사이즈(320X240)에서 용량대비 화질이 우수하고 재생시 시스템에 걸리는 부하가 작아 멀티미디어 CDROM타이틀에 가장 많이 사용되었습니다.
최근에는 사용빈도가 많이 줄었으며 압축시 시간이 많이 소요된다는 단점이 있습니다.

⑤Indeo(Intel Video) : 인텔사에서 개발한 소프트웨어 방식 압축포맷인데 초기엔 별로 각광받지 못하다가 인텔사의 강력한 드라이브와 버전업에 따른 기능 및 화질의 향상으로 최근 들어 멀티미디어 CDROM타이틀 및 화상회의, 자료용 영상등에 많이 사용되고 있습니다.
압축속도가 크게 향상됨은 물론 다양한 포맷에 적용이 가능하고 가변압축비와 용량대비 화질도 우수해졌습니다.