POST

영상처리 중간고사

Anaconda 가상환경 만들어보기
conda create -n test_env python=3.7
y입력
conda activate test_env
빠져나오기 = conda deactivate
가상환경 리스트 보기 conda info --envs
주피터 노트북 설치 conda install jupyter notebook
구글 드라이브와 드라이브 연결 -> 드라이브 마운트
학습 시킬려면 구글 서버에 학습 데이터 올려 두고 주피터 노트북에서 불러 올 수 있다.
반드시 구글 드라이브랑 연결을 해야 합니다.

코랩에서 콘솔창에 명령어는 주는 것을 ! 느낌표로 표시합니다.
ex) !python --version 과 같이 합니다.
!cat /etc/issue.net 구글 코랩의 OS의 버전 확인
!nvidia-smi 현재 gpu의 상태를 볼 수 있음

3차원 배열에 모든 픽셀에 0으로 처리하면 검정색 나옴.
img1 = cv2.imread()
img2 = img1
img1[ :, : ] = (0, 255, 255)
이렇게 하면 img1과 img2 모두가 노란 색으로 나오게 된다.!!! 주의 중요
복사본을 새롭게 만들고 싶다하면
img3 = img1.copy()를 사용하면 된다 !\
여기에서 img2.fill(0) 을 한다면 img1 마찬가지로 0으로 채워진다@@!!


영상 처리란
입력된 영상을 어떤 목적을 위해 처리하는 기술
어떤 목적을 위해 수학적 연산을 이용해 화소들에 대해 변화를 주는 것
아날로그 영상 처리 = 렌즈의 광학적 처리 / 디지털 영상 처리 = 이미 디지털 값으로 영상이 만들어지면 영상의 화소의 픽셀을 변화

영상 = 밝기와 색상이 다른 일정한 수의 화소들로 구성
화소 처리 = 영상 처리의 출발점
화소 = 영상의 구성요소

저수준 영상처리 - 영상 처리 결과가 영상인 경우(좁은 의미의 영상 처리 - 잡음 제거, 반전 등등..)
고수준 영상처리 - 영상 처리 결과가 영상이 아니라, 영상의 특성을 나타내는 경우 (컴퓨터 비전)

영상 처리의 시작 - 1920년 초, 런던과 뉴욕 간에 해저 케이블을 통한 신문사들이 사진 전송
본격적인 기술 - 1940년대 폰 노이만의 디지털 컴퓨터의 개념 시작
1950년 이후 트랜지스터, IC, 마이크로프로세서 같은 하드웨어 발달
1950~1960년대 프로그램의 언어의 발달과 운영체제 등의 소프트웨어 기술 발달
본격적인 영상 처리 시작
우주 탐사 계획인 아폴로 계획과도 관련, 우주선에서 보낸 훼손된 영상의 복원 연구
1970년대 영상 처리 분야 더욱 발전
CT, MRI등의 의료 분야
원격 자원 탐사, 우주 항공 관련 분야
1990년대 컴퓨터 비전과 응용 분야 급속히 확장
인터넷 시대에 영상검색, 영상전송, 영상광고
디지털 방송 관련 컴퓨터 그래픽스, 디지털 카메라 보급
영상처리
입력 영상을 처리하여 출력으로 처리된 영상 획득
컴퓨터 비전
입력은 영상, 출력은 어떤 정보
얼굴인식, 지문 인식, 번호판 인식 등
컴퓨터 그래픽스
입력이 어떤 서술이고, 출력이 영상
CAD프로그램
그리고자 하는 물체의 수치 입력 -> 해당 물체의 그래픽 영상 생성

양자화
제한된 비트수로 화소값을 나타내려 밝기 값을 정수화 시키는 과정 (256가지 수로 나타냄)
샘플링
무한한 연속된 값을 일정한 해상도에 따라 유한개의 화소수만큼 입력 값을 취하는 과정 (아날로그 값을 쪼개는 과정)

MxN크기 디지털 영상
표본화 수에 따라 M, N 결정
양자화 수준에 따라 밝기 값 레벨 결정
K비트로 양자화 ->2^k개 레벨
8비트 양자화 -> 28개 = 256개 레벨

방송 통신 분야
스포츠 방송 분야에 영상 처리 기술 적용 -> 가상광고 분야
디지털 방송 서비스로 인한 영상처리 기술 발달
애니메이션 및 게임 분야
기상 및 지질 탐사 분야
방대한 기상 정보 이용의 시각화
다양한 주파수의 자신들을 영상 처리 기술로 표현


영상의 형성은 광원으로부터 물체에 비친 빛이 카메라 센서를 통해 영상을 형성한다.
영상 F(X,Y)는 조명의 세기 I(X,Y)와 반사계수 R(X,Y)의 곱으로 나타난다.
디지털 영상은 표본화와 양자화단계를 거쳐서 일정한 수의 화소의 집합 MxN 크기로 표현된다.

영상처리 = 2차원 행렬에 대한 연산, 연산 과정에서 행렬 원소 변경, 전체 영상에 대한 변화 인지하기 어려움
윈도우 영상 표시 = 영상처리로 적용된 행렬 연산의 의미 이해하기 쉬움
OpenCV에서는 윈도우(window, 창)가 활성화된 상태에서 마우스나 키보드 이벤트 감지

일반적으로 이벤트를 처리하기 위해 콜백함수 사용
콜백 함수 = 개발자가 시스템 함수를 직접 호출하는 방식
   이벤트가 발생하거나 특정 시점에 도달했을 때 시스템이 개발자가 등록한 함수 호출
OpenCV에서도 기본적인 이벤트 처리 함수 지원 - 키보드, 마우스, 트랙바 이벤트

키보드 이벤트 제어
cv2.waitKey([, delay]) -> retval ==설명 : delay(ms: milisecond) 시간만큼 키 입력을 대기하고, 키 이벤트가 발생하면 해당 키 값 반환
인수 설명 : delay 지연 시간, ms 단위
- delay<=0  키 이벤트 발생까지 무한 대기
- delay>0  지연 시간 동안 키 입력 대기, 지연 시간 안에 키 이벤트 없으면 -1반환
cv2.waitKeyEx = cv2.waitKey와 동일하지만 전체 키 코드를 반환한다.
   화살표 키 등을 입력 받을 때 사용 가능
ord() 함수 : 문자 -> 아스키코드 변환
ord('a'): "a키 입력" ==  0x41 : "A키 입력"

동영상 파일
초당 30프레임 저장. 압출 필요 -> 압축 코덱 사용함.
cv2.VideoCapture(filename 혹은 device=웹캠처리. 웹캠 1대면 0 입력) -> <VideoCapture object>
cv2.VideoCapture.open() 은 윗 함수에 인자를 입력 안 했을 때 filename이나 device 입력하면 open한다.
cv2.VideoCapture.grab() : 캡처 장치나 동영상 파일에서 다음 프레임을 잡는다.
cv2.VideoCapture.read([image]) -> retval, image : 캡쳐 장치나 동영상파일에서 다음 프레임을 잡아 디코드해서 image 행렬로 전달한다.

cv2.VideoWriter([filename, fourcc, fps, framsSize[, isColor]])  fourcc는 코덱 설정
cv2.VideoWriter.isOpened() : 캡처 장치나 동영상파일이 열려있는지 확인한다.
cv2.VideoWriter.write(image) : image프레임을 파일로 저장한다.

capture.read() read는 값 2개를 받게 돼 있다. 앞에는 ret(urn), frame 을 받게 됨.

cv2.namedWindow(winname(윈도우이름), cv2.WINDOW_AUTOSIZE 거나 cv2.WINDOW_NORMAL)
오토사이즈는 사용자가 크기 변경 불가하고, 윈도우 노멀은 크기 변경이 가능하다.
이때 flag를 지정하지 않으면 기본값인 오토사이즈로 지정된다.
오토사이즈 = 행렬의 크기 변경없이 윈도우 크기만 바뀜.
노말 = 변경된 윈도우와 동일하게 행렬의 크기도 바뀜. 다만 행렬의 실제 크기를 바꾸는 것이 아니라 보여지는 형태만 바뀜

5.1기본 배열 Array 처리 함수
배열을 처리하기 위한 자료형 - 열거형(sequence) 객체 - 리스트, 튜플, 사전(dictionary)
명칭 표현 : 1차원 데이터 - 벡터 / 2차원 데이터 - 행렬 / 1차원과 2차원 데이터 통칭해서 배열
cv2.flip(src, flipCode[, dst]) -> dst  : 입력된 2차원 배열을 수직, 수평, 양축으로 뒤집는다.
src, dst : 입력 배열, 출력 배열 / flipCode : 배열을 뒤집는 축. 0 : x축을 기준으로 위아래로 뒤집는다, 1: y축을 기준으로 좌우로 / -1 : 양축을 기준으로.
cv2.repeat(src, ny, nx[, dst]) -> dst : 입력 배열의 반복된 복사본으로 출력 배열을 채운다.
src, dst : 입력 배열, 출력 배열 / ny, nx 수직 방향, 수평 방향 반복 횟수
cv2.transpose(src[, dst]) -> dst : 입력 행렬의 전치 행렬을 출력으로 반환한다. src, dst : 입력 배열, 출력 배열
eval(title) : 문자열을 명령어로..문자열을 변수로 만드는 거 -> 시험에 나올듯

5.2 채널 처리 함수
채널 개념 : 3채널 넘파이 배열. 화소 단위로 순회.
cv2.merge(mv[, dst]) ->dst : 여러 개의 단일채널 배열을 다채널 배열로 합성한다. mv : 합성될 입력 배열 혹은 벡터. dst : 입력 배열과 같은 크기와 같은 깊이의 출력 배열
cv2.split(m[, mv]) ->mv : 다채널 배열을 여러 개의 단일채널 배열로 분리한다. m : 입력되는 다채널 배열 / mv : 분리되어 반환되는 단일채널 배열들의 벡터
화소를 b g r 각 채널로 분리시키면 채널이 각 1개씩이기 때문에 흑백 이미지로 표시된다.

5.3 산술 연산 함수
원소간연산. cv2.add/subtract/multiply/divide/addWeighted
지수, 로그, 제곱근 관련 함수
cv2.exp/log/sqrt/pow/magnitude/phase/cartToPolar/polarToCart
논리(비트)연산
cv2.bitwise_and/bitwise_or/bitwise_xor/bitwise_not

5.5통계 관련 함수 걍 여러가지~
cv2.sumElems : 채널별로 원소들의 합 N을 계산해 스칼라값으로 반환
cv2.sortIdx() : 원소 원본 좌표값 주는 거

5.6행렬 연산 함수
cv2.gemm : 행렬 곱셈 수행

'수업 > 영상처리' 카테고리의 다른 글

파이썬 명령어 모음  (0) 2021.06.15
Cv2 함수 몇가지  (0) 2021.06.15
영상처리 기말고사  (0) 2021.06.15