>  기사  >  백엔드 개발  >  Python에서 Scipy 패키지의 SIFT 방식을 사용한 이미지 인식의 예를 자세히 소개합니다.

Python에서 Scipy 패키지의 SIFT 방식을 사용한 이미지 인식의 예를 자세히 소개합니다.

高洛峰
高洛峰원래의
2018-05-16 15:53:585323검색

scipy

scipy 패키지에는 과학 컴퓨팅의 일반적인 문제를 다루는 다양한 도구 상자가 포함되어 있습니다. 다양한 하위 모듈은 다양한 애플리케이션에 해당합니다. 보간, 통합, 최적화, 이미지 처리, 특수 기능 등과 같습니다.
scipy는 GSL(GNU C 또는 C++ 과학 컴퓨팅 라이브러리) 또는 Matlab 도구 상자와 같은 다른 표준 과학 컴퓨팅 라이브러리와 비교할 수 있습니다. scipy는 Python의 과학 컴퓨팅 프로그램을 위한 핵심 패키지입니다. numpy 행렬을 효율적으로 계산하는 데 사용되므로 numpy와 scipy가 함께 작동할 수 있습니다.
프로그램을 구현하기 전에 필요한 데이터 처리 방법이 scipy에 이미 존재하는지 확인하는 것이 좋습니다. 전문 프로그래머가 아닌 과학자들은 항상 바퀴를 재발명하여 버그로 가득 차고 최적화되지 않았으며 공유 및 유지 관리가 어려운 코드를 만드는 것을 좋아합니다. 대조적으로, Scipy 프로그램은 최적화되고 테스트되었으므로 가능할 때마다 사용해야 합니다.
Scipy는 특정 기능을 가진 일부 하위 모듈로 구성되어 있지만 모두 numpy에 의존하지만 각 모듈은 기본적으로 서로 독립적입니다.
Debian Linux에서의 설치 예를 들어보세요(Windows에서는 --를 사용하지만):

코드 복사 코드는 다음과 같습니다:

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas 
python-sympy python-nose

Numpy 및 이러한 scipy 모듈을 가져오는 표준 방법은 다음과 같습니다.

import numpy as np
from scipy import stats # 其它子模块相同

기본 scipy 네임스페이스에는 대부분 실제 numpy 함수가 포함되어 있습니다(np.cos인 scipy.cos를 사용해 보세요). 이는 단지 역사적인 이유일 뿐이며 일반적으로 코드에서 import scipy를 사용할 이유가 없습니다.

로고 감지를 위해 이미지 매칭 SIFT 알고리즘 사용
먼저 렌더링:

Python에서 Scipy 패키지의 SIFT 방식을 사용한 이미지 인식의 예를 자세히 소개합니다.

그 중 Python에서 Scipy 패키지의 SIFT 방식을 사용한 이미지 인식의 예를 자세히 소개합니다. 로고마크입니다,

Python에서 Scipy 패키지의 SIFT 방식을 사용한 이미지 인식의 예를 자세히 소개합니다.

코드는 다음과 같습니다.

#coding=utf-8 
import cv2 
import scipy as sp 
 
img1 = cv2.imread('x1.jpg',0) # queryImage 
img2 = cv2.imread('x2.jpg',0) # trainImage 
 
# Initiate SIFT detector 
sift = cv2.SIFT() 
 
# find the keypoints and descriptors with SIFT 
kp1, des1 = sift.detectAndCompute(img1,None) 
kp2, des2 = sift.detectAndCompute(img2,None) 
 
# FLANN parameters 
FLANN_INDEX_KDTREE = 0 
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) 
search_params = dict(checks=50)  # or pass empty dictionary 
flann = cv2.FlannBasedMatcher(index_params,search_params) 
matches = flann.knnMatch(des1,des2,k=2) 
 
print 'matches...',len(matches) 
# Apply ratio test 
good = [] 
for m,n in matches: 
  if m.distance < 0.75*n.distance: 
    good.append(m) 
print &#39;good&#39;,len(good) 
# ##################################### 
# visualization 
h1, w1 = img1.shape[:2] 
h2, w2 = img2.shape[:2] 
view = sp.zeros((max(h1, h2), w1 + w2, 3), sp.uint8) 
view[:h1, :w1, 0] = img1 
view[:h2, w1:, 0] = img2 
view[:, :, 1] = view[:, :, 0] 
view[:, :, 2] = view[:, :, 0] 
 
for m in good: 
  # draw the keypoints 
  # print m.queryIdx, m.trainIdx, m.distance 
  color = tuple([sp.random.randint(0, 255) for _ in xrange(3)]) 
  #print &#39;kp1,kp2&#39;,kp1,kp2 
  cv2.line(view, (int(kp1[m.queryIdx].pt[0]), int(kp1[m.queryIdx].pt[1])) , (int(kp2[m.trainIdx].pt[0] + w1), int(kp2[m.trainIdx].pt[1])), color) 
 
cv2.imshow("view", view) 
cv2.waitKey()

의 SIFT 방식을 이용한 이미지 인식 예시에 대한 자세한 내용은 Python의 Scipy 패키지 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.