PBM 포맷 (PNM 분석 #2)

윤찬호·2023년 2월 13일
0

이미지포맷

목록 보기
9/11

PBM (P1)

  • 헤더 매직넘버는 P1
  • 헤더 최대값 항목은 없다 (흑백 두 가지 색상만 표현하므로 암시적으로 1)
  • 단일 비트 픽셀을 ASCII "0"또는 "1"로 저장한다 (0:흰색, 1:검정색)

다음은 9x11 크기의 이미지를 표현하는 P1 파일이다.

P1
9 11
0 0 0 0 1 0 0 0 0
0 0 0 1 0 1 0 0 0
0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 0 1 0
1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1

  • 첫 번째 라인 "P1"은 ASCII 버전의 PBM 형식을 식별한다.
  • 두 번째 라인은 9x11 이미지를 나타낸다.
  • 세 번째 라인부터 실제 픽셀 데이터를 나타내는 PBM P1데이터 이다. (0: 흰색, 1: 검정색)
↑↑↑ 이미지 뷰어를 통해 열어본 PBM파일 (격자는 픽셀 구분을 위해 표시된 모습) ↑↑↑

PBM(P1)의 경우 '#'을 이용하여 헤더에 주석 메시지를 포함할 수 있다.
이때, 주석이 끝나는 부분을 인식하기 위해 주석 다음에 개행을 해야한다.

↓↓↓ 아래와 같이 한 줄로 표현할 수도 있다 ↓↓↓
P1 9 11 0 0 0 0 1 0 0 0 0 ...

PBM (P4)

  • 헤더 매직넘버는 P4
  • 헤더 최대값 항목은 없다 (흑백 두 가지 색상만 표현하므로 암시적으로 1)
  • 각 픽셀을 단일 비트로 나타낸다

PBM P1과 동일한 이미지의 P4 형식은 각 픽셀을 단일 비트로 나타내며, 바이트 당 8픽셀을 패킹한다. 전체 바이트를 채우기 위해 각 행의 끝에 패딩 비트가 추가된다.

'PBM (P1)'에서 사용한 9x11 크기의 P1 파일을 P4 형식으로 변환하는 과정은 아래와 같다.

1) P4 헤더 형식은 P1과 동일하게 ASCII로 표현한다.
P4
9 11
→ ASCII 데이터를 Hex로 변환하면 50 34 0D 0A 39 20 31 31

2) 한 줄을 표현하는 데 필요한 바이트 수 구하기
이미지 너비가 9이므로 P4 형식에서는 이미지 한 줄을 나타내기 위해 2바이트가 필요하다.
→ 9픽셀 = 1바이트(8픽셀) + 1바이트(1비트+패딩 8비트) = 2바이트

3) P1 데이터를 P4 데이터로 변환하기
PBM P1 이미지의 첫 번째 줄 데이터 0 0 0 0 1 0 0 0 를 P4형태로 변환하면 아래와 같다.

00001000 00000000

한 줄의 데이터를 표현하는 데 2바이트를 사용한다.
여기서 실질적으로 사용되는 비트는 첫 번째 블럭의 8비트 데이터(00001000)와 두 번째 블럭의 첫번째 비트(0) 이다.
두 번째 블럭의 나머지 7비트는 색상을 나타내는데 사용되지 않고, 자리수를 채우기 위한 패딩 비트이다.

위 방식대로 PBM P1이미지를 P4형식으로 변환하면 아래와 같다.

PBM P1에서는 이미지를 표현하기 위해 217byte를 사용하지만, PBM P4에서는 이미지를 표현하기 위해 30 byte를 사용한다.



참고
http://paulbourke.net/dataformats/ppm/
https://www.fileformat.info/format/pbm/egff.htm

0개의 댓글