Maison  >  Article  >  développement back-end  >  Introduction détaillée à l'exemple de reconnaissance d'images par la méthode SIFT du package Scipy en Python

Introduction détaillée à l'exemple de reconnaissance d'images par la méthode SIFT du package Scipy en Python

高洛峰
高洛峰original
2018-05-16 15:53:585315parcourir

scipy

Le package scipy contient diverses boîtes à outils dédiées aux problèmes courants du calcul scientifique. Ses différents sous-modules correspondent à différentes applications. Comme l'interpolation, l'intégration, l'optimisation, le traitement d'image, les fonctions spéciales, etc.
scipy peut être comparé à d'autres bibliothèques de calcul scientifique standards, telles que GSL (GNU C ou C Scientific Computing Library), ou la boîte à outils Matlab. scipy est le package de base des programmes de calcul scientifique en Python ; il est utilisé pour calculer efficacement les matrices numpy, permettant à numpy et scipy de travailler ensemble.
Avant d'implémenter un programme, il convient de vérifier si la méthode de traitement des données requise existe déjà dans scipy. En tant que programmeurs non professionnels, les scientifiques aiment toujours réinventer la roue, ce qui aboutit à un code plein de bugs, non optimisé et difficile à partager et à maintenir. En revanche, les programmes Scipy sont optimisés et testés et doivent donc être utilisés autant que possible.
Scipy est composé de quelques sous-modules avec des fonctions spécifiques. Ils dépendent tous de numpy, mais chacun est fondamentalement indépendant les uns des autres.
Donnez un exemple d'installation sous Debian Linux (même si j'utilise -- sur Windows) :

Copiez le code Le code est le suivant :

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

La manière standard d'importer Numpy et ces modules scipy est :

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

L'espace de noms scipy principal contient principalement de vraies fonctions numpy (essayez scipy.cos qui est np.cos). Ce sont uniquement pour des raisons historiques, il n'y a généralement aucune raison d'utiliser import scipy dans votre code.

Utiliser l'algorithme SIFT de correspondance d'image pour la détection de LOGO
D'abord le rendu :

Introduction détaillée à lexemple de reconnaissance dimages par la méthode SIFT du package Scipy en Python

Parmi eux Introduction détaillée à lexemple de reconnaissance dimages par la méthode SIFT du package Scipy en Python Il s'agit de la marque du logo,

Introduction détaillée à lexemple de reconnaissance dimages par la méthode SIFT du package Scipy en Python

Le code est le suivant.

#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()

Plus de détails sur l'utilisation de la méthode SIFT du package Scipy pour la reconnaissance d'images en Python Pour des exemples d'articles connexes, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn