본문 바로가기

📜✏️노트 자리없어서 적는 IT 지식📜✏️

컴퓨터 비전(computer vision) - 1 & 2주차 셤 공부

 

 

 

영상 처리 - 입력된 영상을 어떤 목적을 위해 처리하는 기술

어떤 목적을 위해 수학적 연산을 이용해 화소들에 대해 변화를 주는 것

 

 

 

입출력의 형태가 영상이면? .컴퓨터 비전

영상 관련된 서술이면? .컴퓨터 그래픽스

로 구분된다

 

 

컴퓨터 비전.

- 입력 받은 원본 영상을 영상처리하여 원하는 품질이 결과 영상을 얻어낸 다음 컴퓨터 비전으로 원하는 정보를 얻어내는 과정이 반복적으로 일어남

 

(원본 영상 -> 영상처리 -> 전처리 영상 -> 컴퓨터 비전 -> 결과)

 

 

컴퓨터비전에서는 수학, 선형대수학 등등 매우 어려운데..

 

이걸 OpenCV를 활용해서 손쉽게 적용 가능하다.

 

 

영상은 위치값과 밝기값을 가진 일정한 수의 화소(pixel)들의 모임으로 정의.

 

 

 

영상의 형성 과정

-영상을 f(x, y)로 표시

 

(x ,y)는 위치 좌표값 ,

f()는 해당 위치의 밝기 값

i는 조명의 세기 ,

r은 반사 계수

 

f(x,y)= i(x,y) * r(x,y) > 01사이 값을 가진다고 하면 영상은 다음과 같은 식으로 형성

 

 

step.2

 

 

원점의 위치 ( 왼쪽 위 코너 )가 원점이고 (x,y) = (0,0).

 

화소의 양자화 수준에 따라 밝기값의 수준(gray-level)이 정해짐

k비트로 양자화 되었다면 밝기값의 수준 L=2k승 을 가짐.

 

 

화소수가 M*N개이고 한개의 화소가 k비트로 표현된다면 필요한 저장 공간은?

 

S = M*N*k 비트가 필요함

 

 

(연습문제)

1. 그레이레벨이 256인 영상의 크기가 1024x768이라면, 이 영상을 저장하는데 필요한 저장 공간은 얼마인가?

 

 

 

그레이레벨 256(L) 256 28승 이니까 k = 8이됨.

 

M = 1024, N = 768

L = 2k승 에서 256 = 2k, 따라서 k =8

 

 

 

 

디지털 영상의 표현과 영상처리 공식

 

g(x,y) = 출력영상

f(x,y) = 입력영상

T [ ] 는 화소처리

 

공식 >> g(x,y) = T[f(x,y)]

 

 

영상 좌표 (x,y), 하지만?!

 

행렬 위치는 (r, c) < row(, 가로 즉 x) , column(, 세로 즉 y)

 

 

- 영상처리 응용 분야 -

의료, 우주, 레이더, 지질 탐사, 공장 자동화, 해양, 로봇, 전자현미경, 애니메이션, 방송 통신, 자율 내비게이션, 감시

등등....

 

파이썬을 사용하니까 파이썬의 특징을 적자면

 

파이썬은 자료형을 지정하지 않으며, 변수에 리터럴이 저장될 때 자료형이 결정됨.

변수명은 공백없는 문자, 숫자로 시작 x, 대소문자를 구별함

 

리스트, 튜플, 사전, 집합 -> 원소들을 모아 담을 수 있는 자료 구조

 

 

리스트 : 대괄호 [ ] 를 둘러싸서 선언하며 항목의 추가, 삭제, 값의 변경 가능

튜플 : 소괄호 ( )를 이용해서 선언하며 항목에 대한 변경 불가

사전 :{ }를 사용해 원소를 담지만 객체마다 키를 같이 구성, 이 키로 원소에 접근 가능

집합:원소를 모아 담는 것은 같지만, 중복되는 원소들은 하나만 저장해서 원소들의 중복을 없앰, set 키워드 사용하며 값만 저장.

 

 

 

 

슬라이스 연산자

-리스트, 튜플, 문자열 같은 열거형(sequence) 객체는 슬라이스 연산자를 자주 사용하며, 열거형 객체의 일부를 잘라서 가져옴

 

이 내용이 학습이 어렵다.

 

★ ★  열거형 객체 [시작인덱스:종료인덱스:인덱스증가폭] ★ ★

 

몰랐던 사실

- 종료인덱스는 포함되지않는다.

그래서 [7:1:-2]일때 7,5,3에서 1이 포함되지않고 3에서 종료되는거였음!

 

-1은 마지막.

[4:-1]은 배열 4부터 -1 , 마지막까지

[:2]은 시작인덱스가 없으므로, 처음부터 2배열까지

[::-1]은 역순

[1::-1]은 시작은 배열 1인데 -1은 역순 그래서 1,0 출력

 

[:-4:-1]이면 9부터 4까지 -1씩 감소니까

9 8 7 6 5 가 아니라 -4는 배열의 역순인 6까지임.

-1 = 9 , -2 = 8 , -3 = 7 이렇게되는거다.

그래서 역순인 9부터 -4(종료) 6까지 1씩 역순이니까

9,8,7 이 됨.

[start:stop:step].

 

 

 

2주차

 

 

배열은 동일한 데이터 타입이 연속적으로 있는것, 리스트는 배열이 아니다.

 

 

함수는 일정한 작업을 수행하는 코드블록이라고함.

반복적으로 계속 사용되는 코드들을 함수로 정의하여 사용.

 

 

 

 

넘파이(numpy, np)

-영상처리는 2차원 데이터의 처리가 기본이기에 넘파이(numpy)라는 다차원 데이터를 처리해주는 라이브러리 사용이 필요함.

 

 

 

Numpy(넘파이)는 행렬 연산을 위한 핵심 라이브러리(행렬 연산은? 넘파이!)

-강력한 N차원 배열 객체

-정교한 브로드캐스팅 기능

-유용한 선형 대수학, 푸리에 변환 및 난수 기능

-범용적 데이터 처리에 사용 가능한 다차원 컨테이너

(import numpy as np)로 파이썬에서 넘파이 사용

 

 

넘파이에서 자료형이 모두 같고 인덱스는 정수형 튜플임.

배열 클래스는 ndarray라고 부름

 

 

브로드캐스팅 : Numpy 배열에서 차원의 크기가 서로 다른 배열에서도 산술연산을 가능하게 하는 원리

Parameter 파라미터 - a

Argument 아규먼트 - 10(실세 값이 있는것)

 

 

 

★★★ 인덱싱슬라이싱은 시험에 제출된다. ★★★

 

인덱싱과 슬라이싱

: 파이썬의 리스트처럼 인덱스로 각 요소에 접근 가능

인덱스 자리에 콜론(:)을 이용해서 범위를 지정하면 슬라이싱을 할 수 있으며 범위의 끝 인덱스는 슬라이싱에 포함되지않음.

(시작과 끝 인덱스를 각각 생략하면 처음부터 끝까지라는 의미임)

 

 

배열생성(2) : 함수를 이용한 배열 객체 생성[1]

- empty : 빠른 속도를 위해 메모리의 상태값 그대로 사용(내용없는 껍데기만 생성)

- linspace(first, last, num): 균등하게 처음에서 마지막까지 num개의 균등한 배열 생성

- arange(first, last, step_size) : 처음에서 마지막 미만까지 step_size 간격으로 생성

 

 

 

슬라이싱의 결과가 복제본이 아니라 원본이라는 것에 주의

(복제본은 ndarry.copy()가 필요)

 

 

 

Axis 0, 1, 2에 따라 plane의 경로가 달라짐. 또는 Depth(깊이)라고도 함.

[2, 0, 1]0 , 1 ,2번 테이블 중 2번에서 0번 행 1번열 31이 선택된다.

 

 

 

-----------3주차----------------

 

팬시 인덱싱

 

-배열 인덱스에 다른 배열을 전달해서 원하는 요소를 선택하는 방법.

-전달하는 배열에 숫자를 포함하고 있으면 해당 인덱스에 맞게 선택되고, 배열에 불(boolean)값을 포함하면 True값 위치를 얻음.

 

복사와 뷰

-배열을 사용할 때 3가지 복사 유형이 있음

1. 복사가 전혀 없는 경우

2. (View) 또는 얕은 복사(Shallow Copy)인 경우

3. 깊은 복사(Deep Copy)의 경우

 

 

뷰와 얕은 복사

View()함수는 동일한 데이터를 참조하는 새로운 배열 객체를 생성함

 

Copy()함수배열과 그 데이터를 전부 복사.

 

 

 

배열 병합

-단순히 배열들을 이어서 붙임.

 

 

 

 

 

Arange(10,20)10 부터 19까지 배열을 저장하는거임.

Np.where을 넣으면 결과 값의 배열이 나옴

[10 11 12 13 14 15 16 17 18 19]가 배열이면

Np.where(a>15)이면 15보다 큰 값 16 17 18 19true가 되고

where로 배열의 위치 즉 6번 배열(16)부터 9번까지 나옴

Array[6,7,8,9]출력

 

A>15, 1,0은 배열 내에 true인 값은 1 , false0

그래서 15보다 작은애들은 0 큰 애들은 1을 출력

0000001111이됨.

 

nonzero0이 아닌 애들을 출력.