Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in das Beispiel der Bilderkennung mit der SIFT-Methode des Scipy-Pakets in Python

Detaillierte Einführung in das Beispiel der Bilderkennung mit der SIFT-Methode des Scipy-Pakets in Python

高洛峰
高洛峰Original
2018-05-16 15:53:585283Durchsuche

scipy

Das scipy-Paket enthält verschiedene Toolboxen, die sich häufigen Problemen im wissenschaftlichen Rechnen widmen. Seine verschiedenen Untermodule entsprechen unterschiedlichen Anwendungen. Wie Interpolation, Integration, Optimierung, Bildverarbeitung, Sonderfunktionen und so weiter.
scipy kann mit anderen Standardbibliotheken für wissenschaftliches Rechnen verglichen werden, wie etwa GSL (GNU C oder C++ Scientific Computing Library) oder der Matlab-Toolbox. scipy ist das Kernpaket für wissenschaftliche Rechenprogramme in Python; es wird zur effizienten Berechnung von Numpy-Matrizen verwendet, sodass Numpy und Scipy zusammenarbeiten können.
Vor der Implementierung eines Programms lohnt es sich zu prüfen, ob die erforderliche Datenverarbeitungsmethode bereits in scipy vorhanden ist. Als nicht-professionelle Programmierer erfinden Wissenschaftler das Rad immer wieder neu, was zu Code führt, der voller Fehler ist, nicht optimiert und schwer zu teilen und zu warten ist. Im Gegensatz dazu sind Scipy-Programme optimiert und getestet und sollten daher wann immer möglich verwendet werden.
Scipy besteht aus einigen Untermodulen mit spezifischen Funktionen. Sie hängen alle von Numpy ab, sind jedoch grundsätzlich unabhängig voneinander.
Geben Sie ein Beispiel für die Installation unter Debian Linux (obwohl ich es verwende – unter Windows):

Kopieren Sie den Code Der Code lautet wie folgt:

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

Die Standardmethode zum Importieren von Numpy und diesen Scipy-Modulen ist:

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

Der Haupt-Scipy-Namespace enthält hauptsächlich echte Numpy-Funktionen (versuchen Sie es mit scipy.cos, das np.cos ist). Dies hat lediglich historische Gründe. Im Allgemeinen gibt es keinen Grund, import scipy in Ihrem Code zu verwenden.

Verwenden Sie den Bildanpassungs-SIFT-Algorithmus zur Logo-Erkennung
Zuerst das Rendering:

Detaillierte Einführung in das Beispiel der Bilderkennung mit der SIFT-Methode des Scipy-Pakets in Python

Unter anderem Detaillierte Einführung in das Beispiel der Bilderkennung mit der SIFT-Methode des Scipy-Pakets in Python Es ist die Logo-Marke,

Detaillierte Einführung in das Beispiel der Bilderkennung mit der SIFT-Methode des Scipy-Pakets in Python

Der Code lautet wie folgt.

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

Weitere Details zur Verwendung der SIFT-Methode des Scipy-Pakets für Bilderkennung in Python Beispiele für verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn