영상이란?

  • Pixel : 영상의 기본 단위. PICture ELement, 화소

영상 데이터 구조와 특징

영상이란?

Pixel이 바둑판 모양의 격자(2차원 배열)에 나열되어 있는 형태.

픽셀이란?

많이 알다 싶이 PixelRGB(Red, Green, Blue)로 이루어져 있다.

대표적인 영상의 분류

  • 그레이스케일 영상, Grayscale image

    • 색상 정보 없이 밝기 정보로만 구성된 영상.
    • 밝기 정보를 256단계로 표현한다.
  • 트루컬러 영상, Truecolor image

    • Red, Green, Blue 색 성분을 각각 256단계로 표현
    • 256 * 256 * 256 = 16,777,216개의 색상 표현 가능

영상에서 사용되는 좌표계

  • 좌측 상단부터 (0, 0)으로 표현한다.
  • C언어의 배열과 같은 방식.

이 말은 2차원 행렬로도 표현할 수 있다는 말.

컴퓨터 비전에서는 행렬 계산을 할 일이 많을 것이다.

소스코드에서 영상 데이터 처리

// C++
// 640*480, VGA 영상 데이터 할당
unsigned char** p;
p = new unsigned char* [480];
for(int i=0; i<480, i++){
	p[i] = new unsigned char[640] {};
}

// 혹은 1차원 배열에 저장하기
unsigned char* data = new unsigned char[640*480] {};

이런 식으로 new키워드를 사용해 동적으로 배열을 할당하고, 이후 해제하는 방식을 사용 한다.

// C++
// 할당한 데이터 메모리 해제
for(int i=0; i<480, i++){
	delete[] p[i];
}
delete[] p;

// 1차원 배열이라면, 한 번만 delete를 하면 된다.
delete[] data;

영상 데이터 저장 클래스를 만들어 본다면?

class MyImage
{
public:
	MyImage() : w(0), h(0), data(0) {}
    MyImage(int _w, int _h) : w(_w), h(_h) { // w = 가로, h = 세로
    	data = new unsigned char[w*h] {};
    }
    ~MyImage() {
    	if (data) delete[] data;
    }
    unsigned char& at(int x, int y){ // 영상에서 (x, y)좌표의 픽셀을 불러 오고 싶다.
    	return *(data + y*w + x);
    }
public:
	int w, h;
    unsigned char* data;

영상 파일 형식과 특징

비트맵, Bitmap

  • 말 그대로, bit들의 집합
    • 픽셀의 집합(map)이라는 말과 같다.
  • 영상 전체 크기에 해당하는 픽셀 정보를 그대로 저장.
    • 표현이 직관적이고 분석이 용이하지만,
    • 메모리 용량을 많이 차지하고, 영상의 확대/축소시 화질 손상이 심하다.

그림판을 예시로 들 수 있겠다.

벡터 그래픽스, Vector grapics

  • 점과 점을 연결하는 수학적 원리로 그림을 그려 표현하는 방식
  • 비트맵과 달리 화질 손상이 없음.

대표적인 파일 형식과 특징

  • BMP
    • 픽셀 데이터를 압축하지 않고 저장 -> 파일 용량이 큰 편
    • 파일 구조가 간단해 별도의 라이브러리 없이 파일 입출력 프로그래밍 가능
  • JPG
    • 주로 사진과 같은 컬러 영상 저장.
    • 손실 압축(lossy compression)
      • 사람이 보는데 지장은 없지만, 프로그램에서는 치명적인 변화일 수 있다.
    • 압축률 좋아 파일 용량 크게 감소.
  • GIF
    • 256색상 이하의 영상 저장 -> 일반 사진을 저장하기에는 화질 열화가 심함.
    • 무손실 압축(lossless compression)
    • 움직이는 GIF 지원.
  • PNG
    • Portable Network Graphics
    • 무손실 압축 (컬러 영상도 무손실 압축)
    • 알파 채널(투명도)를 지원.

영상 데이터 크기 분석

  • 그레이스케일 영상 : 가로 x 세로 bytes
  • 트루컬러 영상 : 가로 x 세로 x 3 bytes

fhd(1920*1080) 트루컬러 동영상을 1(30fps)초간 재생하려면?

192010803Bytes=6220800Bytes=6mb30fps이므로,630=180180mb1920 * 1080 * 3 Bytes = 6220800 Bytes = 6 mb\\ 30fps이므로, 6 * 30 = 180\\ 180mb
profile
올해로 26세

0개의 댓글