일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 노선
- 데이터
- 게임서버
- 버킷
- 이미지서버
- 지하철역
- ProudNet
- Bucket
- Thumbnail
- 화소
- Node
- S3
- 이미지프로세싱
- resize
- multiparty
- 아날로그영상
- lightsail
- Sharp
- 스트리밍서버
- streaming
- 샘플링
- 이미지
- AWS
- 프라우드넷
- 튜토리얼
- 디지털영상
- 시작하기
- nodejs
- 리사이즈
- 좌표
- Today
- Total
Deep Studying
[이미지 프로세싱] 양자화와 리사이징 본문
저번 포스트에서 디지털 영상이 무엇인지, 그리고 샘플링에 대해서 간단하게 알아봤습니다.
이전 포스트 확인하기 -> https://minisp.tistory.com/2
샘플링은 아날로그 영상을 디지털 영상으로 변환하는 것을 의미합니다. 그렇다면 디지털 영상을 다른 디지털 영상으로 바꾸는 것은 무엇일까요?
인코딩? 리사이징?
'동영상 인코딩' 이라는 용어는 많이 들어보셨을 것 같습니다. 위키피디아에 따르자면 '인코딩은 어떠한 목적을 위해 정보의 형태나 형식을 변환하는 처리 혹은 그 처리 방식'을 말합니다. 영상의 해상도를 줄이고, 형식( Format )을 바꾸고, 원하는 로고를 입히는 등 일련의 작업을 인코딩이라고 합니다. 모든 디지털->디지털 변환을 인코딩이라고 할 수는 없지만 우리가 앞으로 해볼 대부분의 작업이 여기 포함됩니다.
그 중에 영상의 다른 속성은 유지한 채로 해상도만 바꾸는 것을 리사이징이라고 합니다. 일반적으로 영상의 용량을 줄이기 위해 해상도를 낮추는 것을 의미합니다.
샘플링 과정
아날로그 영상을 디지털로 바꾸기 위해서는 먼저 가로 세로를 몇 화소로 디지털화 할지 정해야합니다. 저는 간단한 예시를 위해 해상도가 16x16인 흑백 카메라를 사용한다고 가정해보겠습니다.
1. 왼쪽의 강아지를 찍은 빛이 카메라 렌즈를 거쳐 카메라로 들어갑니다.
2. 두 번째 그림처럼 카메라에 들어온 빛이 16x16 화소의 필름(혹은 CCD센서)에 닿습니다.
3. 각각의 화소에서 양자화가 일어나 오른쪽의 디지털 영상으로 바뀝니다.
위와 같은 과정을 거쳐 샘플링이 일어나는데요. 양자화란 무엇일까요?
양자화
자연에서 빛의 밝기는 연속적입니다. 즉 무한히 많은 종류의 값을 가질 수 있다는 얘기죠. 1lx (럭스, Lux, 빛의 밝기 단위)는 2lx와 밝기가 다르고, 미세한 차이지만 0.0001lx와 0.0002lx또한 다른 밝기를 가지고있죠. 하지만 컴퓨터는 이를 감지해낼 수도 없을 뿐더러 이 수많은 밝기의 종류를 저장할 수도 없습니다. ( 저번 포스트의 디지털에 대한 이야기와 같습니다. )
따라서 밝기를 0부터 L까지 나름의 기준대로 나누어 표현합니다.
밝기가 0이면 10lx 이하
밝기가 1이면 11lx~20lx,
밝기가 2이면 21lx~40lx,
...
밝기가 L-1이면 ..
실제로 이런식으로 단순하게 밝기를 설정하진 않겠지만 ( 이 부분은 제 전공이 아니라 잘 모르겠습니다. ) 중요한 점은 밝기를 0부터 L-1까지의 정수값으로 단순화 시킨다는 점입니다. 그래서 디지털화된 값으로도 실물과 어느정도 근사한 영상을 만들어낼 수 있는 것입니다.
이렇게 밝기를 L단계로 나누어 분류하는 것을 양자화( Quantization )라고 합니다.
위의 자료는 GDP의 성장률을 기준으로, L=5의 양자화 라고 볼 수 있을수도 있습니다.
리사이징
디지털 영상의 사이즈를 조절하는 데에는 위와같은 과정을 거의 똑같이 거칩니다. 위 사진을 다시 그대로 가져와보겠습니다.
사실 왼쪽의 강아지 이미지는 아날로그 강아지가 아니라 400px X 400px 사이즈의 이미지 파일입니다. 이제 이 이미지를 16x16 사이즈로 리사이징 해보겠습니다.
1. 왼쪽 강아지 이미지의 밝기 값을 불러옵니다. ( 이미지의 크기가 400px X 400px이기 때문에 400x400의 이차원 배열이 만들어집니다.
2-1. 두 번째 그림처럼 16x16 사이즈의 행렬을 만들어 400x400행렬을 대입합니다.
( 이 때, 400사이즈의 화소 25x25개가 16사이즈의 화소 1개에 대응될 것 입니다.
2-2. 밝기의 평균을 구합니다.
3. 소수점을 버림하여 L=256단계로 양자화 합니다.
샘플링과 거의 똑같죠?
리사이징의 원리는 다시 말하자면 여러 화소의 밝기가 (평균값으로) 한 화소로 합쳐지며 사진의 해상도를 줄이는 것입니다. 다음 포스트에서는 오늘 나온 내용을 직접 파이썬 코드로 구현해보겠습니다.
'컴퓨터비전' 카테고리의 다른 글
[이미지 프로세싱] python과 openCV로 이미지 픽셀 수정하기 1 - 리사이징 (4) | 2019.06.26 |
---|---|
[이미지 프로세싱] 디지털 신호란? 디지털 영상과 샘플링 (0) | 2019.06.25 |