[Multimedia] Gray Scale Image and Binary Image

DongHyeon·2023년 10월 16일
0

Gray Scale Image (흑백 영상)

  • 흑백 영상은 회색의 음영 또는 명암을 나타내는 이미지.
  • 각 픽셀은 256단계의 회색 톤을 나타내는 데, 0은 검은색, 255는 흰색 사이의 값을 가지게 됨.
  • RGB 영역에서의 흑백 영상은 R,G,B의 모든 픽셀 값이 동일한 값을 가지고 있다.
  • 일반적으로 흑백 영상은 8비트의 이미지로 표현되며, 각 픽셀은 밝기 정보만을 가지고 있음.

Binary Image (이진 영상)

  • 이진 영상은 각 픽셀이 오직 두가지의 값 중 하나만을 가지는 이미지.
  • 일반적으로 픽셀 값은 0과 1 또는 0과 255 중 하나의 이진 값을 가지고 있음.
  • 일반적으로 물체의 존재와 부재를 나타내는 데 사용되고 있음.
  • 정보 손실이 많고, 묘사력이 낮지만 일부 응용프로그램 등에서 물체 감지나 패턴 인식, 이미지 압축과 같은 상황에서 유용하게 활용되고 있음.

lena512.raw

실습에서 사용할 lena512.raw파일로 Hex editor를 통해 열어보자!

  • 해당 파일은 16진법(Hexadecimal) 형식으로 저장되어있는 1차원 배열 형태를 띄고 있으며, 0에서부터 영상의 좌측 상단에서 우측 하단의 픽셀 값이 저장되어 있다.
  • 이미지 크기는 (512,512)이므로, 0번째 항부터 1FF번째 항까지 한 줄(가로 길이)에 해당하는 픽셀의 크기를 가지고 있다.

흑백영상 디스플레이

작성 코드

  • lena512.raw 파일을 통한 흑백영상 디스플레이
# Pillow 라이브러리에서 Image호출
from PIL import Image
# 파일 경로 지정 (lena512.raw)
file_path =  "lena512.raw"
# 새로운 RGB형식의 이미지 생성, 이미지 크기는 512,512
img=Image.new("RGB",(512,512))
# pix에 이미지 로드
pix=img.load()
# 데이터 파일을 이진법 모드로 open
file=open(file_path,'rb')
# 파일에서 데이터를 읽어오고
data=file.read()
# 파일을 닫음
file.close()
# 생성된 RGB형식의 이미지의 pixel값에 숫자를 대입하는데
for y in range(512):
    for x in range(512):
        # 이미지 픽셀값에 읽어온 픽셀 값을 대입시킴
        pix[x,y]=(data[y*512+x],data[y*512+x],data[y*512+x])
# 이미지 출력
img.show()

흑백영상 출력

이진영상 디스플레이

작성 코드

  • lena512.raw 파일을 통한 이진영상 디스플레이
# Pillow 라이브러리에서 Image호출
from PIL import Image
# 파일 경로 지정 (lena512.raw)
file_path =  "lena512.raw"
# 새로운 RGB형식의 이미지 생성, 이미지 크기는 512,512
img=Image.new("RGB",(512,512))
# pix에 이미지 로드
pix=img.load()
# 데이터 파일을 이진법 모드로 open
file=open(file_path,'rb')
# 파일에서 데이터를 읽어오고
data=file.read()
# 파일을 닫음
file.close()
# 생성된 RGB형식의 이미지의 pixel값에 숫자를 대입하는데
for y in range(512):
    for x in range(512):
        # 127을 기준으로 이보다 높으면 255(흰색) 낮으면 0(검정색)으로 표현
        tmp=255 if data[y*512+x]>127 else 0
        pix[x,y]=(tmp,tmp,tmp)
# 이미지 출력
img.show()

이진영상 출력

profile
I'm Free!

0개의 댓글