python 기반 이미지 Gabor 변환 및 특징 추출

1.머리말
딥 러 닝 이 나 오기 전 이미지 인식 영역 북쪽 에는'가 버 패거리'가 있 었 고,남쪽 에는'SIFT 모 용 작은 형'이 있 었 다.현재 딥 러 닝 기술 은 CNN 네트워크 와 빅 데이터 샘플 을 활용 해 일 을 해'가 버 어 셈 블 리'와'SIFT 모 용 소고'의 강호 지 위 를 대체 할 수 있다.그러나 빅 데이터 와 계 산 력 이 뒷받침 되 지 않 는'시골 마을'지대 나'교활 한 녀석 들'을 상대 할 때'가보 길드'는 크게 솜 씨 를 발휘 할 수 있어 흔 들 릴 수 없 는 지 위 를 가지 고 있다.IT 무림 에는 C++와 OpenCV 를 기반 으로 하거나 matlab 를 기반 으로 하 는 Gabor 이미지 변환 과 특징 추출 소스 코드 가 있 지만 대부분 방법 이 화려 하 다.파 이 썬 언어 를 기반 으로 한 Gabor 이미지 변환 과 특징 추출 은 드물다.이 블 로 거 는 Python 언어 를 기반 으로 한 Gabor 이미지 변환 과 특징 추출 을 실현 하 는 과정 에서 OpenCV 나 matlab 보다 실 용적 이 고 말 이 적 으 며 사람들 과 공유 하 는 것 을 발견 했다.
2."Gabor 회장"소개
'Gabor 회장'의 가장 강력 한 무 기 는 Gabor 필터 로 가장 주요 한 사용 장점 은 물체 무늬 특징 추출 에 나타난다.Gabor 필 터 는 이미지 의 밝기 와 대비 도 변화,이미지 자세 변화 에 비교적 강 한 노 스틱 성 을 가지 고 이미지 인식 에 가장 유용 한 부분 적 특징 을 표현 하기 때문에 컴퓨터 시각 과 무늬 분석 분야 에서 광범 위 하 게 응용 된다.Gabor 필 터 는 서로 다른 방향 과 척도 의 특징 을 추출 하고 임의로 조합 하여 변화무쌍 하 다.아래 그림 은 4 개 방향(0o,45o,90o,135 o)과 6 개 척도(7,9,11,13,15,17)를 조합 해 생 성 된 24 개의 Gabor 필터 핵 이다.
在这里插入图片描述
3."Gabor 회장"의 이미지 변환
Gabor 이미지 변환 이란 Gabor 필 터 를 사용 하여 그림 을 필터 링(CNN 의 볼 륨 작업 에 해당)하여 새로운 그림 을 얻 습 니 다.각 필터 핵 과 이미지 필터 후 획득:
在这里插入图片描述
그 중λ파 로,그 값 은 픽 셀 단위 로 지정 되 며,일반적으로 2 보다 크다.그러나 입력 이미지 크기 의 5 분 의 1 이상 은 안 됩 니 다.
θ방향 으로 Gabor 함수 병렬 스 트 라 이 프 의 방향 을 지정 하 였 으 며,그 수 치 는 0 에서 2 pi 입 니 다.
ϕ위상 오프셋 을 위해 그 수치 범 위 는-pi 에서 pi 까지 이다.그 중에서 0.pi 도 는 중심 대칭 의 center-on 함수 와 center-of 함수 에 대응 하고-pi/2 와 pi/2 는 반대 함수 에 대응 합 니 다.
γ길이 와 너비,공간 종횡 비 로 Gabor 함수 모양 의 타원 율 을 결정 합 니 다.γ=1.모양 이 둥글다.γ<1 시 에 모양 은 평행 줄무늬 방향 에 따라 늘 어 나 는데 보통 이 값 은 0.5 이다.
σGabor 함 수 를 나타 내 는 고 스 인자 의 표준 차 이 는 그 값 을 직접 설정 할 수 없습니다.대역 폭 b 의 변화 에 따라 대역 폭 값 은 반드시 정실 수 여야 합 니 다.보통 1 입 니 다.이때 표준 차 와 파장 의 관 계 는 다음 과 같 습 니 다.σ=0.56λ;대역 폭(b):Gabor 필터 의 반 응답 공간 주파수 대역 폭:
在这里插入图片描述
x',y'의 값 은:
在这里插入图片描述
gabor 필터 핵 은 복수 형식 이기 때문에 실 부 와 허 부 로 나 눌 수 있 습 니 다.
在这里插入图片描述
在这里插入图片描述
상기 공식 원 리 를 파악 한 후에 여러분 도 Python 을 이용 하여 Gabor 를 변환 하여 실현 하려 고 시도 할 수 있 습 니 다.소스 코드 는 제 가 여기에 붙 이지 않 겠 습 니 다.관심 이 있 으 시 면 참고 하 세 요https://www.jb51.net/article/198212.htm사실 skimage 가방 에는 봉 인 된 gabor 변환 함수 가 있어 서 직접 호출 할 수 있 습 니 다.그래서 간단하게 게 으 름 을 피 우 는 방법 을 소개 한다.skimage 에서 filers(from skimage import filers)를 가 져 오 면 gabor 함 수 를 호출 할 수 있 습 니 다.함수 설명 은 다음 과 같 습 니 다.
skimage.filters.gabor(image, frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0, mode=‘reflect', cval=0)
1)함수 반환:
Gabor 변환 후의 실제 부분 과 허 부 real,imag;입력 한 그림 과 크기 가 같 습 니 다.
2)함수 매개 변수:
그림(image):2 차원 배열 입력 그림(그 레이스 케 일 이미지);
주파수(frequency):부동 소수점 고조파 함수 의 공간 주파수,제어 척도;
在这里插入图片描述
이미지 특징 추출 분야 에 서 는 보통 5 개의 척도 가 다르다.
在这里插入图片描述
방향(theta):float,선택 할 수 있 는 라디안 방향,0 이면 고조파 가 x 방향 에 있 습 니 다.
在这里插入图片描述
,이미지 특징 추출 분야 에서 보통 8 개의 서로 다른 방향 u=[0,1,2,3,4,5,6,7]을 취한 다.
대역 폭(bandwidth):부동 소수점,필터 가 캡 처 한 대역 폭 을 선택 할 수 있 습 니 다.고정 대역 폭 에 대해 sigmax 와 sigmay 는 주파수 가 증가 함 에 따라 낮 아 집 니 다.사용자 가 sigma 를 설정 하면x 와 sigmay,이 값 은 무 시 됩 니 다.표준 편차(sigmax,sigma_y):float,x 와 y 방향의 선택 가능 한 표준 편차;
커 널 의 선형 크기(nstds):스칼라,커 널 의 선형 크기 를 n 으로 선택 할 수 있 습 니 다.stds(기본 값 은 3)표준 편차;오프셋(offset):부동 소수점,라디안 으로 표시 되 는 고조파 함수 의 위상 오프셋 을 선택 할 수 있 습 니 다.모드(mode):{'constant','near','reflect','mirror','wrap'}그림 과 커 널 을 볼 륨 으로 하 는 모드 를 선택 하여 ndi.convolve 에 전달 할 수 있 습 니 다.cval:스칼라,선택 가능 한 값 이 볼 륨 모드 가'변 하지 않 음'이면 이 매개 변 수 는 ndi.convolve 에 전 달 됩 니 다.
3)소스 코드 는 다음 과 같다.

import matplotlib.pyplot as plt
from skimage import filters,io,color
import numpy as np

filename='D:/lena.jpg'
img = io.imread(filename)#    
img_gray = color.rgb2gray(img)#RGB   
frequency=0.6
#  gabor  
real, imag = filters.gabor(img_gray, frequency=0.6,theta=45,n_stds=5)
#    
img_mod=np.sqrt(real.astype(float)**2+imag.astype(float)**2)
#    
plt.figure()
plt.subplot(2,2,1)
plt.imshow(img_gray,cmap='gray')
plt.subplot(2,2,2)
plt.imshow(img_mod,cmap='gray')
plt.subplot(2,2,3)
plt.imshow(real,cmap='gray')
plt.subplot(2,2,4)
plt.imshow(imag,cmap='gray')
plt.show()
4)실행 결 과 는 다음 과 같다.
左上角为原图,右上角为变换后的模图像,左下角为变换后实部图像,右下角为变换后虚部图像)
5)주의사항
① theta 매개 변 수 를 통 해 서로 다른 방향 으로 입력 하면 라디안 이지 각도 가 아니다.② frequency 매개 변 수 를 통 해 척도 변 화 를 조절 한다.
6)skimage 를 이용 하여 gobor 볼 륨 핵 생 성:gaborkernel
skimage.filters.gabor_kernel(frequency, theta=0, bandwidth=1, sigma_x=None, sigma_y=None, n_stds=3, offset=0)
함수 반환:2D Gabor 필터 커 널 을 되 돌려 줍 니 다.실제 부분 과 허 부 를 포함 합 니 다.
인 자 는 skimage.filers.gabor()함수 와 같 습 니 다.
원본 코드 는 다음 과 같 습 니 다:

import matplotlib.pyplot as plt
from skimage import filters
gk = filters.gabor_kernel(frequency=0.1,theta=np.pi*30/180.0,n_stds=5)
mod=np.sqrt(gk.real.astype(float) ** 2 + gk.imag.astype(float) ** 2)
plt.figure()
plt.subplot(1,3,1)
plt.imshow(gk.real*255,cmap='gray')
plt.subplot(1,3,2)
plt.imshow(gk.imag*255,cmap='gray')
plt.subplot(1,3,3)
plt.imshow(mod*255,cmap='gray')
plt.show()
실행 결 과 는 다음 과 같 습 니 다.
在这里插入图片描述
주의사항:① 매개 변수 nstds=3 필터 핵 크기(3,3)가 아니 라 필터 핵 크기 는 매개 변수 frequency,theta,nstds 세 개의 매개 변 수 를 공동으로 결정 합 니 다.②gabor_kernel 함수 반환 은 실제 와 허 부 를 가 진 복 행렬 입 니 다.③ theta 는 라디안 이지 각도 가 아니다.
3."Gabor 길드"의 이미지 특징 추출
Gabor 필 터 는 주파수 영역 에서 서로 다른 척도,방향 에서 관련 특징 을 추출 할 수 있다.또 가 버 함 수 는 사람의 눈 과 비슷 한 역할 을 하기 때문에 무늬 인식 에 자주 사용 되 고 좋 은 효 과 를 거 두 었 다.Gabor 특징 추출 은 일반적으로 모델 링,특징 강하,특징 획일 화 와 특징 선택 등 조작 을 포함한다.
취 모:skimage.filers.gabor()함 수 는 이미지 변환 후의 실제 부분 과 허 부 를 되 돌려 줍 니 다.이미지 인식 분야 에서 일반적으로 그 모델 을 이미지 특징 으로 사용 합 니 다.
在这里插入图片描述
2)특징 강 차원:skimage.filers.gabor()함수 반환 값 크기 는 원래 이미지 와 같 습 니 다.또한 이미지 인식 분 야 는 일반적으로 8 개 방향 과 5 개의 척도 의 gabor 여과 기 를 사용 하여 40 폭 의 변환 이미 지 를 얻는다.추출 한 이미지 특징 차원(40 폭 이미지 특징 직렬 연결)이 높 습 니 다.따라서 모델 링 이미지 에 대한 강 차원 처리 가 필요 하 다.가장 간단 한 방법 은 Opencv 의 resize 함수 cv2.resize(img,(0,0),fx=1/4,fy=1/4)를 사용 하 는 것 입 니 다.
3)특징 귀 일화:
기계 학습 분야 에서 서로 다른 평가 기준(즉,특징 벡터 중의 서로 다른 특징 은 바로 상기 한 서로 다른 평가 기준)은 서로 다른 양 강 과 양 강 단 위 를 가진다.이런 상황 은 데이터 분석 결과 에 영향 을 줄 수 있 고 기준 간 의 양 강 영향 을 없 애기 위해 데이터 표준화 처 리 를 하여 데이터 기준 간 의 비교 가능성 을 해결 해 야 한다.원시 데 이 터 는 데이터 표준화 처 리 를 거 친 후에 각 지 표 는 같은 수량 급 에 있어 종합 적 인 비교 평 가 를 하기에 적합 하 다.그 중에서 가장 전형 적 인 것 은 데이터 의 획일 화 처리 이다.요컨대 귀 일화 의 목적 은 예 처리 한 데 이 터 를 일정한 범위 내 에 한정 시 키 는 것 이다.본 블 로 거들 은 Z-score 표준화 방법 을 소개 한다.
일화 공식:
在这里插入图片描述
그 속μ모든 견본 데이터 의 평균 값,σ모든 견본 데이터 의 표준 차.
b)본 방법 은 원시 데이터 의 분 포 를 고 스 분포 와 비슷 하 게 해 야 한다.그렇지 않 으 면 귀 일 화 된 효과 가 매우 나 빠 질 것 이다.
c)응용 장면:분류,분류 알고리즘 에서 거 리 를 사용 하여 유사 성 을 측정 해 야 할 때,또는 PCA 기술 로 차원 을 낮 출 때 Z-score standardization 이 더욱 잘 표현 된다.
4)특징 선택
상기 세 단 계 를 거 친 후에 각 모델 의 이미지 특징 을 연결 하여 입력 이미지 의 특징 벡터 로 할 수 있다.그러나 이때 얻 은 특징 벡터 에 대량의 잉여 가 존재 하 므 로 특징 적 인 차원(특징 선택)작업 을 한 번 더 하 는 것 이 좋다.PCA 나 Fisher 등 선형 서브 공간 분석 방법 을 사용 할 수 있다.
5)소스 코드:

import cv2
import numpy as np
from skimage import filters
filename='D:/lena.jpg'
img = cv2.imread(filename)#   
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#   
frequency=0.6
#gabor  
real, imag = filters.gabor(img_gray, frequency=0.6,theta=45,n_stds=5)
#  
img_mod=np.sqrt(real.astype(float)**2+imag.astype(float)**2)
#    (   )
newimg = cv2.resize(img_mod,(0,0),fx=1/4,fy=1/4,interpolation=cv2.INTER_AREA)
tempfea = newimg.flatten()#    
tmean = np.mean(tempfea)#   
tstd = np.std(tempfea)#   
newfea = (tempfea - tmean)/tstd#     
print(newfea)
밤 이 깊 어 회사 에 아무 도 없어 텅 비 었 다.먼저 여기까지 쓰 겠 습 니 다.처음으로 CSDN 에 박문 을 보 냈 습 니 다.부족 한 점 이 있 으 면 지적 해 주 십시오.아직 쓸모 가 있다 고 생각 하 시 면 칭찬 을 눌 러 주 십시오.격려 해 주 셔 서 감사합니다.!!!
python 기반 이미지 Gabor 변환 및 특징 추출 에 대한 자세 한 설명 은 여기까지 입 니 다.python Gabor 변환 및 특징 추출 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기