(DIP:Digital Image Processing 관련 내용)


JPG wiki의 내용을 정리해놓으려 한다


<camera vs image - pixel format (color space)>

caffe2에서 skimage를 통해 jpg를 읽어오는 코드를 camera로 바꾸기 위해, jpg와 camera를 비교하게 되었다

겸사겸사 JPG에 대한 내용을 정리하려는 것이고.

우선 ffmpeg을 통해 camera을 읽을경우 default pixel foramt은 YUV420P(12bit)이다

그리고 python skimage.io.imread(img)를 통해 jpg를 읽어올 경우, RGB24 pixel format으로 읽어온다

(camera: YUV420P / jpg: RGB24)


<jpg 압축과정>

jpg pixel format에 대해 찾아보다가, 내용이 흥미로워 정리하게 되었다

wiki에 의하면, JPG는 RGB24를 더 효과적으로 compression 하기위해 YCbCr로 color space convert과정을 수행한다

(pixel format과 color space는 같은 의미이다)

이 과정 때문에 JPG는 Lossy compression(손실 압축) 방식이 된다

이후 Quantization(양자화)entropy encoding(엔트로피 부호화)를 통해 압축이 완료된다


<YUV, YCbCr>

이 둘도 항상 헷갈려서 정리해놓으려 한다

YCbCr YUV의 한 종류 또는 동일하게 생각하면 된다

Y = Luminance(밝기, 휘도) (사람이 가장 민감해하는 정보)

C = Chrominance(색차)

Cb = C(blue)

Cr = C(red)


<image array with skimage>

프로그램에서 image를 처리할 때, array 형태로 저장하게 되는데, 거기에도 종류가 있다

skimage.io.imread(img)로 jpg를 읽어오면 HWC(Height/Width/Channels)로 읽어온다

camera는 더 찾아본 후 포스팅하도록 하겠다


---


<image array from FFmpeg>

FFmpeg을 통해 camera의 video frame을 array로 읽어와보았고, 위에서 언급했듯이 그 구조에 대해서 추가포스팅하겠다.

camera or video file로부터 FFmpeg을 사용하여 이미지(비디오 프레임)을 읽어올 경우, WHC 형태로 읽어온다

WHC는 배열과 똑같이 생각하면 되기 때문에 매우 쉽다


11111

22222

33333

44444


화면 각각의 픽셀값을 그대로 배열로 표현했을 때가 바로 WHC이다

위와 같은 배열을 화면에 그대로 매핑했을 때와 같다는 것이다


<conclusion>

JPG 압축 전후와 python skimage or FFmpeg으로 이미지(비디오 프레임)를 읽어왔을 때를 비교해보았다

그리고 YUV와 YCbCr도 비교해보고 의미를 살펴보았다

FFmpeg으로 읽어온 이미지를 skimage에서 processing 하기위해 조사해보았고(+개인흥미)

포맷을 맞추는데에 많은 도움이 될것같다




WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/