[1장 연습문제]
# [ 1장 ]
#
# 1. 디지털 영상의 정의는 무엇인가?
# 디지털 영상은 2차원 평면 위에 유한한 개수의 점(화소)들로 구성된 정보이며 각 점(화소)은 정수 형태의 밝기 값을 가지고 있다.
#
# 2. 디지털 영상처리란 무엇인가?
# 이러한 영상을 컴퓨터를 이용해 조작하고 분석하여 원하는 결과를 얻어내는 모든 기술을 말한다.
#
# 3. 저 수준의 영상처리와 고 수준의 영상처리의 차이점은 무엇인가?
# 저 수준 처리는 노이즈 제거처럼 입력과 출력이 모두 영상인 단계이며 고 수준 처리는 영상에서 정보를 추출하여 상황을 판단하고 이해하는 인공지능에 가까운 단계이다.
#
# 4. 영상처리 역사에서 1920년대 영상처리는 왜 엄밀한 의미에서 디지털 영상처리의 시작으로 인정되지 못하는가?
# 1920년대에는 대서양 횡단 케이블을 통해 사진을 전송하는 기술이 개발되었고 이것은 컴퓨터를 이용한 수치 연산이 아닌 데이터의 전송 기술이었기에
# 엄밀하게는 디지털 영상처리의 시작으로 볼 수 없다.
#
# 5. 영상처리, 컴퓨터 비전, 컴퓨터 그래픽스의 차이를 설명하라
# 영상처리와 컴퓨터 비전 그리고 컴퓨터 그래픽스는 데이터의 입출력 형태와 처리되는 물리적 방향성에 따라 구조적 차이가 있다.
# 영상처리는 입력과 출력이 모두 영상인 수평적 구조이며 주로 픽셀 데이터의 신호 변환 원리를 활용하여 영상의 품질을 개선하거나 변형한다
# 컴퓨터 비전은 영상이라는 하위 계층의 데이터로부터 상위 계층의 추상적 정보나 서술적 모델과 같은 데이터를 도출해내는 역변환 구조로 픽셀로부터 의미를 추출하는 해석 과정이 존재하고
# 컴퓨터 그래픽스는 수학적으로 정의된 가상 모델이나 수치 데이터를 바탕으로 2차원 영상을 생성하는 정변환 구조를 가지며 렌더링 과정을 통해 데이터로부터 픽셀을 만들어내는 과정이다.
#
# 6. 디지털 영상 처리 과정을 설명하라
# 디지털 영상을 만드는 과정은 표본화와 양자화라는 두 단계를 거친다.
# 표본화는 입력되는 아날로그 신호를 영상 데이터가 나타낼 수 있는 화소의 횡렬 개수에 맞춰 일정한 간격으로 구휙을 나누고
# 양자화는 그 구휙의 밝기 값을 정수화한 후 각 구휙이 저장할 수 있는 밝기의 범위에 맞춰 적절한 밝기값을 저장한다.
#
# 7. 카메라의 해상도와 표본화와 양자화 단계는 어떤 연관이 있는가?
# 표본화는 아날로그 신호를 일정한 공간 간격으로 추출하여 화소의 위치를 결정하는 과정으로 이를 통해 영상의 공간 해상도가 정의되고,
# 양자화는 표본화된 각 지점의 밝기 정보를 정해진 비트 심도에 따라 정수값으로 변환하며 이는 영상이 표현할 수 있는 색 해상도를 결정한다.
#
# 8. 그래이 레벨이 256인 영상의 크기가 1,024 * 768이라면, 이 영상을 저장하는 데 필요한 저장 공간은 얼마인가?
# 그레이 레벨이 256인 영상은 픽셀당 8bit 즉 1B 를 차지한다.
# 따라서 1024 곱하기 768 크기의 영상은 총 786,432B 이며 약 768KB의 저장 공간이 필요하다.
#
# 9. 계산 사진학 에 대하여 조사하고 정리해라
# 계산 사진학은 단순히 빛을 기록하는 전통적인 사진 기술에 더해 컴퓨터 알고리즘과 수학적 기법을 촬영 과정에 적극적으로 도입하는 분야이다.
# 이를 통해 스마트폰 카메라의 야간 모드처럼 센서의 물리적 한계를 극복하거나 촬영 후 초점을 변경하는 등
# 일반적인 카메라로는 저장이 불가능한 이미지 결과물을 만들어낼 수 있다.
#
[2장 연습문제]
# [ 2장 ]
# 1. 컴파일러 방식과 인터프리터 방식에 대해 비교 설명하시오
# 컴파일러는 소스 코드 전체를 기계어로 번역한 후 실행 파일을 생성하므로 실행 속도가 매우 빠르고 효율적이지만 코드 수정 시 전체를 다시 컴파일해야 하는 번거로움이 있다
# 반면 인터프리터는 코드를 한 줄씩 읽어 들여 즉시 실행하는 방식으로 별도의 실행 파일 생성 과정이 없어 개발과 디버깅이 빠르지만 실행 시 매번 해석 과정을 거치므로 실행 속도가 상대적으로 느리다.
#
# 2. 컴퓨터 프로그래밍에서 통합 개발 환경이란 무엇인지 서술하시오
# 통합 개발 환경은 에디터, 컴파일러나 인터프리터, 그리고 디버깅 도구 등 소프트웨어 개발에 필요한 다양한 기능을 하나의 프로그램 안에 통합한 것을 의미한다.
#
# 5. 파이참에서 프로젝트를 가상 환경으로 만드는 이유가 무엇인가?
# 프로젝트마다 요구되는 라이브러리의 종류나 버전이 다를 때 발생할 수 있는 충돌 문제를 방지하기 위해서이며
# 각 프로젝트를 독립된 공간에서 관리함으로써 시스템 전체의 파이썬 환경을 깨끗하게 유지할 수 있다는 장점이 있다.
#
# 6. 파이참에서 파이썬opencv 라이브러리를 추가하는 방법을 설명하시오
# 프로젝트 설정 내의 인터프리터 메뉴에서 패키지 추가 기능을 이용해 opencv-python을 검색한 뒤 설치하면 해당 가상 환경에만 라이브러리가 포함된다.
#
# 7. 바탕이 검은색인 영상을 윈도우에 나타내는 소스 코드를 작성하시오#
import cv2
import numpy as np
image = np.zeros((300, 400), np.uint8) # image.fill(0)
cv2.imshow("window title", image)
cv2.waitKey(0)
cv2.destroyAllWindows()