python Gabor 필터 설명

6311 단어 pythonGabor필터
판독 가 버 필터
Fourier 변환 은 신호 처리 의 유력 한 도구 로 그림 을 공역 에서 주파수 로 변환 하고 공역 에서 추출 하기 어 려 운 특징 을 추출 할 수 있 습 니 다.그러나 푸 리 에 변환 은 시간 과 위치 에 대한 부분 적 인 정보 가 부족 하 다.
Gabor 변환 은 짧 은 시간 에 창 을 추가 하 는 Fourier 변환(쉽게 이해 하면 특정한 시간 창 에서 Fourier 변환 을 하 는 것)으로 짧 은 시간 에 푸 리 엽 이 중간 창 함 수 를 고 스 함수 로 변환 할 때의 특수 한 상황 이다.따라서 Gabor 필 터 는 주파수 영역 에서 서로 다른 척도,방향 에서 관련 특징 을 추출 할 수 있다.또 가 버 함 수 는 사람의 눈 과 비슷 한 역할 을 하기 때문에 무늬 인식 에 자주 사용 되 고 좋 은 효 과 를 거 두 었 다.
2 차원 공간 에서 삼각함수(a)(예 를 들 어 사인 함수)와 고 스 함수(b)를 중첩 하여 우 리 는 Gabor 필터(c)를 얻 었 다.다음 그림 에서 보 듯 이:

Gabor 함수 해석
2 차원 Gabor 함수 의 수학 표현 식 은 다음 과 같다.
복수 표시:

실수 부분:

허수 부분:

x',y'계산 공식:

공식 에서 각 매개 변수의 의 미 를 소개 합 니 다.
파장λ):Gabor 핵 함수 의 코사인 함수 의 파장 변 수 를 나타 낸다.그것 의 값 은 픽 셀 단위 로 제 정 됩 니 다.보통 2 보다 크 지만 입력 이미지 크기 의 1/5 보다 크 면 안 됩 니 다.
방향θ):Gabor 필터 핵 에서 평행 테이프 의 방향 을 나타 낸다.유효 치 는 0°에서 360°까지 의 실수 이다.
위상 오프셋(ψ):Gabor 핵 함수 의 코사인 함수 의 위상 변 수 를 나타 낸다.그것 의 수치 범 위 는-180°에서 180°이다.그 중에서 0°와 180°에 대응 하 는 방정식 은 원점 과 대칭 되 고-90°와 90°의 방정식 은 원점 의 중심 대칭 에 관 한 것 이다.
길이 와 너비γ):공간 종횡 비 는 Gabor 함수 모양 의 타원 율 을 결정 한다....해 야 한다γ=1 시 모양 은 원형 이다....해 야 한다γ<1 시 모양 은 평행 줄무늬 방향 에 따라 길어진다.보통 이 값 은 0.5 이다.
대역 폭(b):Gabor 필터 의 반 응답 공간 주파수 대역 폭 b 와σ/λ비율σGabor 함 수 를 나타 내 는 고 스 인자 의 표준 차.세 가 지 는 다음 과 같은 관계 가 있다.

σ의 값 은 직접 설정 할 수 없습니다.너비 b 만 변경 할 수 있 습 니 다.대역 폭 의 값 은 반드시 정실 수 여야 한다.보통 1 이다.이때 표준 차 와 파장 의 관 계 는?σ=0.56λ。대역 폭 이 작 을 수록 표준 차이 가 크 고 Gabor 의 모양 이 클 수록 평행 줄무늬 의 수량 이 많 음 을 알 수 있다.
python Gabor 필터 구현

# Gabor      
# K_size:Gabor    K_size x K_size
# Sigma : σ
# Gamma: γ
# Lambda:λ
# Psi : ψ
# angle: θ
def Gabor_filter(K_size=111, Sigma=10, Gamma=1.2, Lambda=10, Psi=0, angle=0):
	# get half size
	d = K_size // 2

	# prepare kernel
	gabor = np.zeros((K_size, K_size), dtype=np.float32)

	# each value
	for y in range(K_size):
		for x in range(K_size):
			# distance from center
			px = x - d
			py = y - d

			# degree -> radian
			theta = angle / 180. * np.pi

			# get kernel x
			_x = np.cos(theta) * px + np.sin(theta) * py

			# get kernel y
			_y = -np.sin(theta) * px + np.cos(theta) * py

			# fill kernel
			gabor[y, x] = np.exp(-(_x**2 + Gamma**2 * _y**2) / (2 * Sigma**2)) * np.cos(2*np.pi*_x/Lambda + Psi)

	# kernel normalization
	gabor /= np.sum(np.abs(gabor))

	return gabor
python 각도 별 Gabor 필터 그림 만 들 기

import cv2
import numpy as np
import matplotlib.pyplot as plt


# Gabor      
# K_size:Gabor    K_size x K_size
# Sigma : σ
# Gamma: γ
# Lambda:λ
# Psi : ψ
# angle: θ
def Gabor_filter(K_size=111, Sigma=10, Gamma=1.2, Lambda=10, Psi=0, angle=0):
	# get half size
	d = K_size // 2

	# prepare kernel
	gabor = np.zeros((K_size, K_size), dtype=np.float32)

	# each value
	for y in range(K_size):
		for x in range(K_size):
			# distance from center
			px = x - d
			py = y - d

			# degree -> radian
			theta = angle / 180. * np.pi

			# get kernel x
			_x = np.cos(theta) * px + np.sin(theta) * py

			# get kernel y
			_y = -np.sin(theta) * px + np.cos(theta) * py

			# fill kernel
			gabor[y, x] = np.exp(-(_x**2 + Gamma**2 * _y**2) / (2 * Sigma**2)) * np.cos(2*np.pi*_x/Lambda + Psi)

	# kernel normalization
	gabor /= np.sum(np.abs(gabor))

	return gabor


# define each angle
As = [0, 45, 90, 135]

# prepare pyplot
plt.subplots_adjust(left=0, right=1, top=1, bottom=0, hspace=0, wspace=0.2)

# each angle
for i, A in enumerate(As):
 # get gabor kernel
 gabor = Gabor_filter(K_size=111, Sigma=10, Gamma=1.2, Lambda=10, Psi=0, angle=A)

 # normalize to [0, 255]
 out = gabor - np.min(gabor)
 out /= np.max(out)
 out *= 255
 
 out = out.astype(np.uint8)
 plt.subplot(1, 4, i+1)
 plt.imshow(out, cmap='gray')
 plt.axis('off')
 plt.title("Angle "+str(A))

plt.savefig("out.png")
plt.show()
시험 출력 Gabor 필터 이미지

opencv(python)에서 Gabor 필터 사용 하기
함수 원형:
retval=cv.getGaborKernel(ksize, sigma, theta, lambd, gamma[, psi[, ktype]])
함수 사용 예시

import numpy as np 
import cv2 as cv 

# retval = cv.getGaborKernel(ksize, sigma, theta, lambd, gamma[, psi[, ktype]])
# Ksize      
retval = cv.getGaborKernel(ksize=(111,111), sigma=10, theta=60, lambd=10, gamma=1.2)
image1 = cv.imread('../paojie.jpg')
# dst	=	cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
result = cv.filter2D(image1,-1,retval)

cv.imshow('result',result)
cv.waitKey(0)
cv.destroyAllWindows()
실험 결과:


참고:
python Gabor 필터 구현
Gabor 필터 파라미터 상세 설명
Gabor 필터 원리 및 opencv 의 실현
python Gabor 필터 에 대한 설명 은 여기까지 입 니 다.더 많은 Gabor 필터 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기