RGB Y Cb Cr 4:2:0 4:1:1 의미가 도저히 이해가 안됩니다.

chxooi의 이미지

image processing 에 대한 기초체력이 없이 어쩌다 영상쪽에 와서 버벅이고있는 1인 입니다...
다른게 아니라 궁금한게 좀 많이 있는데요...

일단 codec 쪽을 보려하니...궁금한게...

RGB 가 YCbCr 로 바뀌는 부분입니다.

바뀌는거까진 이해했는데...

전산을 전공하고 bit stream 만 아는 저로선....

헷깔리는 부분이 생기는데....

바로...

YCbCr 4:4:4 , 4:2:2, 4:1:1 , 4:2:0

이 비율의 의미 입니다.

코덱 책을 보면



이건 화소에 하나씩 Y한개당 Cb 한개 Cr 한개로 명확히 이해가 됩니다.

이것또한 Y 두개당 Cb 한개 Cr 한개로 명확히 이해가 됩니다.

그런데!!!!
느닷업이 등장하는 이그림은 어찌이해를 해야 할지 모르겠습니다.


궁금한건...

화소가 보통 RGB 로 하면 8bit 8bit 8bit 로 24비트 표현된다고 할때...
변환된 식으로 Y 8bit Cb 8bit Cr 8bit 라고 한다면

마지막 그림의 화소와 화소사이에 들어간 저 Cb Cr 은 어떻게 표현되는건가요??

pixcel 도 없는데 표현되는 저그림은 뭔지...

또 다른 그림을 보면 저거 말고 4:2:0 은 픽셀 4개 정가운데 있는경우도 있습니다.

제가 전산학을 전공하고 비트만 알아서 그런지 모르겠는데....

픽셀에 24bit 표현하는 RGB 와 비교해서 CbCr 은 픽셀도 없는곳에 왜 그림을 그려놨을까라는질문과....

4:2:0

어떤 그림을 보면

Y 는 4블럭, Cb 1블럭, Cr 1블럭 그려놓고 4:2:0 이라고 하더군요...

이건 4:2:0 이 아니라 4:1:1 아닌가요???

수학적입장에서도 이해가 안되고 전산학 입장에서도 이해가 안되는 부분이더군요....

제가 CbCr 을 정확하게 이해할 수 있게.....이

4:2:0 의 의미 4:1:1 의 의미좀 알려주시겠습니까????

모니터 픽셀 하나당 24비트 표현가능하다고 한다면 한픽셀엔 도대체 Y 가 몇 비트이고 CbCr 은 몇비트인건가요???

박영만의 이미지

저도 예전에 그 걸로 고생했었던 기억이 나네요. ㅎㅎ

http://kndol.springnote.com/pages/182643

2. YUV 4:2:0
Y신호가 매 라인마다 13.5MHz로 표본화될 때 R-Y와 B-Y는 한 라인을 건너뛰어 6.75MHz로 표본화되는 (즉, 한 라인은 4:0:0으로 다음 라인은 4:2:2로 표본화) 휘도와 색차신호의 표본화 주파수 비율.
4:2:2 표본화에서는 수직라인의 색해상도가 수평라인 해상도의 1/2인 반면, 4:2:0 표본화에서는 수평과 수직해상도가 같다.
TV화면 등의 주사선에 포함되는 정보신호 중 휘도 신호 Y의 표본화 주파수 13.5㎒를 4로 할 때 두 개의 색차 신호 Cb, Cr의 종 방향 및 횡 방향 모두를 Y의 표본화 주파수에 대해 1/2로 표본화하는 신호처리 기법이다. 즉 라인마다 Y의 13.5㎒에 대해 R-Y를 Y신호의 1/2인 6.75㎒로 표본화하는 동시에 B-Y는 6.75㎒로 표본화하지 않고, 이와 반대로 Y의 13.5㎒에 대해 R-Y를 6.75㎒로 표본화하지 않는 동시에 B-Y는 6.75㎒로 표본화하는 상태를 교대로 되풀이하는 것을 말하는데 이것을 비율로 나타내는 경우 4:2:0과 4:0:2로 반복이 된다. 따라서 이러한 포맷으로 표현되는 표본화 주파수비율을 일반적으로 4:2:0으로 나타내고 있다.

Prentice의 이미지

잘못된 내용인 것 같아 제 글을 삭제합니다.

dingkyu의 이미지

YUV데이터는 픽셀로 이해하면 조금 곤란합니다.
적어도 제 경험에서는요...

예전 브라운관 TV의 비월주사 순차주사 라는 용어를 떠올려보세요.
브라운관 방식의 TV가 화면을 표시하는 방법과 LCD(픽셀)가 화면을
표시하는 방식을 생각해 보면 의외로 이해하기가 쉽습니다.

제가 이해하기로는 사람의 눈의 착시(착시라고 하는게 맞나 ? )를
이용한 화면표시방식인데
순차주사방식의 경우 화면 맨 위줄에 먼저 Y데이터의 영상을 뿌립니다.
그리고 CB,CR데이터를 같은 자리에 뿌리고 다음 라인에서 Y데이터를
뿌립니다. 그렇게 하면 Y데이터는 2줄에 걸쳐 제 각각의 데이터가
표현되지만 CB,CR은 4:1:1의 경우 4개의 픽셀에 하나의 데이터로
표현이 됩니다. 즉 휘도 데이터는 가만히 두고 색의 데이터는 4개의 픽셀을
하나로 뭉뚱그리는거죠. 그래도 사람의 눈은 별 차이를 못느낀다고 합니다.

즉 요점은 맨 위에서부터 한줄 한줄 화면에 주사한다고 생각하면 납득이
갈껍니다.

고민이 많아 고민인 애늙은이 입니다.

cjsong의 이미지

YUV에 대해 막연히 RGB로 접근했다가 고생했습니다. 님덕분에 큰이해와 숲을 파악할 수 있었습니다.

kohyc의 이미지

Y1 Cr1 Cb1 Y2 ///R1G1B1(<=Y1Cr1Cb1) R2G2B2(<=Y2Cr1Cb1)
Y3 Cr2 Cb2 Y4 ///R3B3G3(<=Y3Cr2Cb2) R4G4B4(<=Y4Cr2Cb2)
위가 4:2:2 format 실제 data stream의 표현은
Cr1Y1Cb1Y2CraYaCbaYb ~~(X/4해상도만큼반복한후에 줄바꿔서(Sync후에)
Cr2Y3Cb2Y4CrlYmCbnYm~~~~(X/4해상도만큼반복)
~~~~(Y해상도만큼 반복)
4:2:2Format은 앞축되지 않은 동영상에서 실제 사용되는 포멧임

Y1 Cr1 Y2 ///R1G1B1(<=Y1Cr1Cb2) R2G2B2(<=Y2Cr1Cb2)
Y3 Cb2 Y4 ///R3B3G3(<=Y3Cr1Cb2) R4G4B4(<=Y3Cr1Cb2)
위가 4:1:1 format

Y1 Cr1 Y2 ///R1G1B1(<=Y1Cr1) R2G2B2(<=Y2Cr1)
Y3 Cr2 Y4 ///R3G3B3(<=Y3Cr2) R4G4B4(<=Y4Cr2)
위가 4:2:0 Format (Cr대신 Cb일 경우도 가능함)

Y1 Cr1 Y2 Y5 Cb1 Y6 ///R1G1B1(<=Y1Cr1) R2G2B2(<=Y2Cr1)
Y3 Cr2 Y4 Y7 Cb2 Y8 ///R3G3B3(<=Y3Cr2) R4G4B4(<=Y4Cr2)
위가 변형된 4:2:0 Format (5,6,7,8번 Pixel변환은 생략)

이상은 상하좌우 4점의 Y componet 4pixel(흑백4점)과 red/blue의 계수에 대응하는 4개의 RGB pixel의 구성인데,
각각의 component(Y/Cr/Cb/R/G/B)의 bit depth는 전혀상관없습니다.
보통의 경우에 bit depth가 8bit로 사용됩니다.
Bit depth가 8비트일경우에 4:2:2형태는 4pixel이 8bitX8개(YCrCb요소 8개)가 8bitX12개(RGB요소12개)로 변환되므로
YCrCb 4pixel(8byte)가 RGB 4pixel(12byte, 실제로는 알파4byte를 더한 16byte)가 됩니다.
이를 잘 계산하면 YCrCb 1pixel은 2byte이고 RGB1 pixel은 3byte(알파8bit를 더하면 32bit)입니다.
일반적인 디지탈 연산에서는 3byte단위로 데이터를 처리하는 속도와 4byte단위로 데이터를 처리하는 속도가 동일하기 때문에,
알파1byte를 더해서 4byte단위로 처리하는 것이 훨씬 유리합니다.

4:1:1이나 4:2:0의 경우에는 data의 양은 동일합니다.
8bit pixel depth일경우에 YCrCb 1pixel은 12bit입니다.
데이터는 동일 하지만 같은 해상도에서 사람이 느끼는 4:1:1과 4:2:0사이의 컬러의 차이는 얼마나 될까요?
4:2:0이 Blue tone이 약간 부족하다는것을 YCrBb에 대해서 올바르게 알고, 이해하는 비디오엔지니어나 구분하지,
보통사람의 경우에는 거의 구별못합니다.
데이터양이 동일하고, 색상도 거의 동일하기 때문에 대부분의 경우에 4:1:1과 4:2:0은 구별하지 않고 혼용해서 사용됩니다.
하지만 4:1:1포멧은 서로 다른 다른 라인에 Cr과 Cb가 있기 때문에 실시간 처리가 안되고 1라인의 지연이 발생합니다.
변형된 4:2:0포멧을 사용하면 실시간 처리가 가능합니다.

같은 해상도에서 4:2:2포멧과 4:2:0(or 4:1:1)의 색상차이는 보통사람이 구별하기 쉽습니다.

4:2:0(혹은 4:1:1)포멧의 필요성은 4:2:2포멧 영상의 가로세로 해상도를 반으로 줄이거나 2배늘릴때,
데이터를 계산할필요 없이 그냥 버리거나 같은 데이터를 추가해서 사용하면 되기 때문에 편리하여 필요합니다.
예를들면 720x480 SD영상을 360x240으로 상호변환할때는 별도의 연산이 필요없이 중간의 data를 버리거나(downscale할때),
이전라인의 data를 다시 사용하면(upscale할때) 됩니다.

YCrCb(YUV)가 사용되는 이유는 사람의 눈이 빛의 밝기(흑백)에 먼저 반응한 후에 색상에 반응하기 때문에,
먼저 반응하는 흑백을 비중있는 데이터(8bit)로 처리하고 색상성분(빨간색/파란색쪽으로 치우친 정도)의 데이터를
비중을 축소해서(각각4bit) 처리하는 방식이 이유입니다.(사실 이건 digital세계에서의 이야기이고)

실제로는 컬러TV가 처음 등장했을때 흑백TV의 신호위에 컬러신호를 삽입한뒤에 이 합성신호(흑백+컬러)신호를 기존에 존재한 흑백TV에서도
볼수 있고, 새로운 컬러TV에서도 볼수 있도록 하기 위해서 UV신호를 기존 흑백진폭 Y신호에 추가하면서 사용되었습니다.
이 때부터 엔지니어들이 사람의 눈이 빛의 밝기에 먼저 반응하고, 색상은 흑백보다는 덜 중요하다는것을 알았습니다.

끝으로 실제 YCrCb 4:4:4포멧의 데이터는 이론상으로 존재하고, 실제로는 존재하지 않습니다.

chxooi의 이미지

정말 이해 잘했습니다.
결국엔 bit 단위의 stream 이 그 비율로 만들어지는군요...
정말 감사합니다...

위에서...이해하지못한 몇가지만 더 질문이 있는데요...


Y1 Cr1 Cb1 Y2 ///R1G1B1( Y3 Cr2 Cb2 Y4 ///R3B3G3( 위가 4:2:2 format 실제 data stream의 표현은
Cr1Y1Cb1Y2CraYaCbaYb

Cr2Y3Cb2Y4CrlYmCbnYm~~~~(X/4해상도만큼반복)
~~~~(Y해상도만큼 반복)

중간에 라고 하셨는데...
Y1 Cr1 Cb1 Y2 --> R1G1B1 에서 (Y1Cr1Cb1) 한개 쓰고 R2G2B2 에서 (Y2Cr1Cb1) 처럼...
Cr1Cb1 이 중복되어 쓰였는데....

data stream 이
Cr1Y1Cb1Y2CraYaCbaYb

Cr2Y3Cb2Y4CrlYmCbnYm

이 위의 a,a,a,b 의 의미와 순서 의미가 뭔지가 궁금하구요...
아랫줄의 l,m,n,m 의 의미와 순서가 궁금합니다.
어차피 2개의 Y pixel 이 CbCr 1개씩 나눠쓴다고생각하면 앞에 Yn pixel 한개가 CbnCrn 쓰고...다음 Yn+1 pixel 역시 CbnCrn 쓰는건가요?
앞에 표현될 수 있는 CbnCrn 하나가 앞뒤로 Yn , Yn+1 을 맡아서 한다고 한다면 bit stream 이 어떻게 표현되는지가 잘 납득이 안가서요...

copy 된다면 data 낭비일거고...아닐거라면 위에서 말한 CraCba 등의 a,a,a 등의 순서가 잘 이해가 안되서..

정말 감사드립니다.

p.s. 이런 내용은 책에 없던데....다들 어찌들 이해하고 계신건지...존경존경.

또하나 X/4 해상도라는게....
1024 x 768 이라면

x/4 는 256개 즉 4개건너 하나씩 표현되고 반복된다는 것을 말씀하시는건가요??

즉 해상도 가로중에 4개에 하나씩만 표현된다.....는것인지요???

정태영의 이미지

그냥 간단하게

Y는 full resolution을 사용하고,
Cb, Cr은 4:1로 downsample 하는 겁니다.

복원할 때는 복잡한 방식의 interpolation 방법을 사용하기도 하고, neareast neighbor interpolation을 사용하기도 합니다.

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

kohyc의 이미지

CrlYmCbnYm은 오타이고, CrlYmCblYn 이 맞을것 같네요..
한라인이 1024 pixel이라면, 4:2:2 포멧일 경우에 Y component data는 1024개이고, Cr이 512개, Cb가 512개있습니다.

사족을 달자면..
제가 주제넘은 이야기는 하는 것일수도 있는데, 위 내용이 이해되면 절대로 영상처리 하지마세요..
영상처리라는 수렁에 빠져서 헤어나오지 못하는 수가 있습니다.
위 내용은 영상처리의 기초중의 기초, 산수의 더하기 빼기보다도 더 기초적인 내용입니다.
영상처리는 제대로 아는 사람이 없으니 배우기 힘들고(거의 혼자서 공부해야 하는 수준),
막상 배워도 Major Video IC Maker의 극소수 엔지니어가 되는것 이외에는 써먹을 곳도 없습니다.

압축 안된 영상은 워낙 고속의 대용량 data라서 실시간 처리는 software만으로는 처리가 힘들고,
FPGA나 ASIC기반의 digital logic의 hardware로 처리해야 됩니다.
따라서 영상처리 이전에 hardware관련 기술을 알아야 합니다.

위내용을 이해하고서, 영상처리 관련 원서의 YUV Color space관련 부분을 보면 원서 저자의 수준을 알수 있습니다.
영문 원서 저자들이라면 관련분야의 전문가들인데, 저자 자신도 이해하지 못한채 이론만 가지고 떠드는것을 발견할 수 있을겁니다.
한걸음 물러서서 국내외의 영상처리 하는 사람들의 이야기 들어보면 본인 입가에 미소가 맺히는 것을 알수 있습니다.

위 내용을 이해하지 못한다면, 영상처리 해볼만 합니다.
어짜피 결과물 안나올바에는 눈먼 연구비나 상황파악 못하는 사장의 돈을 빼먹는 것은 해볼만합니다.

chxooi의 이미지

사족 정말 감사드립니다.

참고로 저는 기업체에서 일하고 있으며, 학생은 아닙니다.
다만 기업은 그때 그때 상황에 따라 직원들을 교육시켜 일시키는데 운나쁘게(?) 제가 이부분을 맡게 되었군요...

사실 이미지 프로세싱이나 영상처리는 학교에서 해보지두 않은 분야라서...

회사는 이렇게 원하더군요....

전공과 무관한 부서배치.... 및 업무...

미술전공한 학생 불러서 군대에서 족구장 그리라고 하듯이...

너무 너무 힘든상황이지만 너무 너무 좋은 분들의 답변덕분에 그나마 찔끔찔끔 따라가고 있습니다....

친절히 답변 주신 kohyc 님 감사드리고...

더불어 여러 답변주신 분들께 감사드립니다.

이제 돈빼먹으러 가야겠네요 잘 이해 못했거든요..ㅎㅎㅎ ^______________^

어쨌든.. 감사....

즐건한주..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.