[school] [IP_study] 영상처리 week2, week3 정리
영상처리 과목
MATLAB 시작하기(week2, ppt1)
학습목표
- 프로그램을 정의하고 프로그래밍의 기본을 이해한다.
- 매트랩을 시작하는 방법과 매트랩의 각 창을 이해한다.
- 변수와 연산자를 이해하고 명령어 창에서 실행한다.
1.1 프로그램과 프로그래밍
프로그램
- 컴퓨터를 이용하여 문제를 해결하기 위한 명령어들의 모임
-> 어떤 데이터를 어떻게 연산하여 결과로 어떤 데이터를 내보내라고 하는 일련의 과정을 서술한 것
프로그래밍
- 프로그램을 작성하는 과정
컴퓨터를 이용하여 처리하는 데이터
- 영상 데이터
- 음성 데이터
- 문자 데이터
- 숫자 데이터 -> 모든 데이터는 컴퓨터가 인식하여 처리할 수 있는 형식으로 만들어 주어야 하며 이것은 최종적으로는 2진수로 표현된다.
문자데이터의 숫자 표현
- 문자 데이터도 컴퓨터 내부적으로는 숫자로 변환되어 처리된다.
- 문자 데이터를 숫자 데이터로 또는 숫자 데이터를 문자 데이터로 변환하기 위해서는 ASCII 코드와 같은 코드표를 이용한다.
1.1.1 상수와 변수
상수
- 어떤 값 자체
변수
- 상수를 저장하는 기억 장소
1.1.2 연산자와 명령어
연산자
- +(더하기 연산자)
- =(대입 연산자)
명령어
- sum(더하기 명령어)
예: sum(x,y)
1.2 MATLAB 시작하기
기본 명령어
clc: 명령어 창 명령 삭제 clear: 작업공간 창 작업 삭제
특정 변수만 삭제하려면: ‘clear 변수이름’
who: 현재 작업공간 창에 저장된 변수들의 이름 보여줌
whos: 현재 작업공간 창에 저장된 변수들의 이름, 크기, 데이터 형 등 보여줌
help: 명령어 도움말
1.3 명령어 규칙
- 대문자와 소문자를 구분한다.
- 명령의 끝에 ;을 입력하면 실행 결과가 출력되지 않는다.
- 한 라인에 여러개의 명령을 한번에 입력하여 명령을 차례로 실행시킬 수 있다.
이때 명령어들은 ,로 구분하여야 하고 왼쪽에서 오른쪽으로 실행된다.
- 위쪽 방향키를 사용해 이전 실행 명령어를 다시 호출할 수 있다.
1.4 변수 생성 규칙
- 변수는 영문자 알파벳, 0~9의 숫자, _ 만 가능하다.
- 대문자와 소문자는 서로 구분된다.
- 반드시 문자로 시작해야 한다.
- 문자들 사이에 공백이 들어갈 수 없다.
- 한 변수에는 최대 63개의 문자가 들어갈 수 있다.
- _을 제외한 특수기호는 들어갈 수 없다.
- 매트랩의 명령어와 같은 이름의 변수는 만들 수 없다.
- 매트랩의 예약어와 같은 이름의 변수는 만들 수 없다.
1.4.1 특수 상수
NaN: 수가 아니라는 의미
pi: 원주율 𝝿
inf: 무한대
i,j: 복소수에서 허수
1.4.2 산술 연산자
+: 덧셈
-: 뺄셈
*: 곱셈
/: 나눗셈(오른쪽)
₩: 나눗셈(왼쪽)
^: 거듭제곱
1.4.3 내장 함수
sqrt(x): x의 제곱근
exp(x): 지수
abs(x): 절대값
log(x): 자연로그(밑이 e인 로그)
log10(x): 밑이 10인 상용로그
factorial(x): x! 계산
삼각함수
각 - 라디안
sin(x), cos(x), tan(x), cot(x)
각 - degree
sind(x), cosd(x), tand(x), cotd(x)
근사화 함수
round(x): 가장 가까운 정수로 근사화
fix(x): 0방향을 향해서 가장 가까운 정수를 구하는 함수
ceil(x): 올림함수
floor(x): 내림함수
rem(x,y): x를 y로 나누었을 때 나머지를 구하는 함수
sign(x): 부호함수 (x>0이면 1, x<0이면 -1, x=0이면 0)
MATLAB 배열(week3, ppt2)
학습 목표
- 1차원 및 2차원 배열을 이해하고 생성한다.
- 배열 원소의 주소지정을 이해한다.
- 배열 생성과 조작에 관련된 내장함수를 이해한다.
배열의 종류
- 일원소 배열(scalar): 1행 1열(1x1)
- 1차원 배열(vector): N행 1열(NX1) or 1행 N열(1XN)
- 다차원 배열(array): 2차원(N행 M열, NXM), 3차원(N행 M열 L면, NXMXL)
2.1 벡터(1차원 배열)의 생성
1차원 배열-> 행벡터, 열벡터
2.1.1 행벡터 생성
-
[]안에 콤마 또는 공백을 사용하는 방법
x= [1,2,3,4,5] x= [1 2 3 4 5] -
[]안에 콜론 연산자를 사용하는 방법
a: 시작값
b: 최종값
m: 증가치
x= [a:m:b] x= a:m:b -
매트랩에서 제공하는 명령어를 사용하는 방법 linspace(a,b,n)
a: 첫번째 원소
b: 마지막 원소
n: 원소의 개수 (default: 100)
logspace(a,b,n)
a: 10ª에서 지수
b: 10ᵇ에서 지수
n: 원소의 개수 (default: 50)
추가 명령어
length(x): x벡터의 크기 확인
2.1.2 열벡터 생성
-
행 구분자인 세미콜론을 이용
x = [2; 9; 6; 17] -
enter 이용
x = [5 6 7 8] -
행벡터 생성후, 전치(transpose)를 이용
2.2 인덱싱
n개의 원소를 가진 벡터 A의 k번째 원소를 인덱싱
1부터 시작 (1~n)
a = [4 5 6 7 8]
#1 2 3 4 5 (인덱스)
-
값 참조(reference) R-value
A = [4 -28 6 12 -2] x= A(2) # x => -28 -
재할당(reassignment) L-value
A(3) = 30 # A=> [4 -28 30 12 -2]
2.2.1 인덱스 k의 범위
A(k)-> R-value-> 1 <= k <= n
A(k)-> L-value-> k >= 1 인 임의의 값
2.2.2 다양한 인덱싱
-
1개의 원소를 인덱싱하는 경우
- 자연수
- 스칼라 변수
A=[4 -28 6 12 -2] x=4 A(x-4)=A(x) # A= 4 12 6 12 -2- 키워드 end
A=[4 -28 6 12 -2] x=4 A(end)=A(end-4) # A= 4 -28 6 12 4- 명령어식
A=[4 -28 6 12 -2] x=A(A(1)) # x = 12 y = A(end) # y = -2 A(length(A)) = A(end)*2 # A= 4 -28 6 12 4 -
여러개의 원소를 인덱싱하는 경우
-
콜론 연산자
A(a
b)a: 시작값, m: 증감치(default: 1), b: 최종값
A(:): 벡터의 모든 요소를 인덱싱
A=[4 -28 6 12 -2] A(1:2:5) = [10,20,30] # A= 10 -28 20 12 30- 벡터
A= [2 4 5] B= [4 -28 6 12 -2] x= B(A) # x= -28 12 -2 (index 2,4,5) B(A)=10 # B= 4 10 6 10 10 -
2.3 벡터의 확장과 축소
A(k) = 값
A=[4 -28 6 12 -2]
A(8)=9
#A= 4 -28 6 12 -2 0 0 9
콜론 연산자를 이용한 벡터의 확장
A(a
b) = 값 or 벡터
a: 시작값, m: 증감값, b: 최종값
A=[4 -28 6 12 -2]
A(2:2:8)=90
# A= 4 90 6 90 -2 90 0 90
2.3.1 벡터의 원소 삭제와 크기 축소
A(k) = [] (단, k<=n)
A=[2 12 8 -3 27 1]
A(4)= []
#A= 2 12 8 27 1
2.4 2차원 배열의 생성
-
행 구분자인 세미콜론을 이용하여 행과 행을 구분
A=[2, 9, -1; 4, 27, 19] -
행과 행 사이에 enter을 입력하여 정의
B=[ 7 1 -4 8 0 47]
2.5 2차원 배열의 인덱싱
A(i,j) (1<= i <= n, 1<= j<= m)
2.5.1 한 개의 원소 인덱싱
A = [1 3 5 7; 2:2:8; -5 -4 -3 -2; 5 1 -3 2]
x= A(2,4) + A(4,2)
#x = 9
-
벡터의 2차원적 인덱싱
A = [4 -28 6 12 -2] # (1,1) (1,2) (1,3) (1,4) (1,5) -
2차원 배열의 선형 인덱싱
A(i,j) == A(k)
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)
-> (1,1) (2,1) (3,1) (1,2) (2,2) (3,2) (1,3) (2,3) (3,3)
A=[2, 9, -1; 4, 27, 19; 5 12 -2] # A = 2 9 -1 # 4 27 19 # 5 12 -2 A(2: 5: 9) = [A(2,3)*4, A(8)*A(9)] # A = 2 9 -38 # 76 27 19 # 5 12 -2 -
end 키워드를 이용한 인덱싱
A(end,j) : 배열 A의 마지막 행의 j열을 인덱싱, 즉 A(n,j)를 의미한다.
A(i,end) : 배열 A의 i행의 마지막 열을 인덱싱, 즉 A(i,m)를 의미한다.
A(end,end) : 배열 A의 마지막 행의 마지막 열을 인덱싱, 즉 A(n,m)를 의미한다.
A=[1 3 5 7; -29 -24 -19 -14; 9 12 15 18] A(end, 1) = A(2, end) + A(end,end) # A = 1 3 5 7 # -29 -24 -19 -14 # 4 12 15 18
2.5.2 여러 개의 원소 인덱싱
-
콜론 연산자를 이용한 인덱싱
- A(a
b,j): 배열 A의 a, a+m, a+2m, … 행의 j열을 인덱싱 - A(i, a
b): 배열 A의 i행의 a, a+m, a+2m, … 열을 인덱싱 - A( : , j): 배열 A의 모든 행의 j열을 인덱싱, 즉 j열 전체를 인덱싱
- A( : , : ): 배열 A의 모든 행의 모든 열을 인덱싱, 즉 배열 전체를 인덱싱
A = [1 3 5 7; -29 -24 -19 -14; 9 12 15 18] x = A(1:2:3, 4) # x = 7 # 18 - A(a
-
벡터를 이용한 인덱싱
A = [1 3 5 7; -29 -24 -19 -14; 9 12 15 18] R = [2,3] #행 인덱스 C = [1,3,4] #열 인덱스 X = A(R,C) # X = -29 -19 -14 # 9 15 18
2.6 2차원 배열의 확장과 축소
2.6.1 2차원 배열의 확장
A(i,j) = 값 (i>n or j>m)
A = [1 3; -14 9]
A(1,3)=20
# A = 1 3 20
# -14 9 0
A(1:2:5, : ) = 100
#A = 100 100 100
# -14 9 0
# 100 100 100
# 0 0 0
# 100 100 100
2.6.2 2차원 배열의 축소
A(i,j) = [ ] (i,j)는 행 or 열 단위가 되어야함
A = [1 3 5 7; -29 -24 -19 -14; 9 12 15 18]
A(1,2) = []
# 오류: 행 or 열 단위가 아님
A(1, : ) = []
# A = -29 -24 -19 -14
# 9 12 15 18
2.7 전치 연산자
n X m 크기를 갖는 2차원 배열 A에 대해
A의 전치 = A’
A = [1 5 2]
A'
# ans = 1
# 5
# 2
댓글남기기