2017-11-13 1 views
0

In this tutorial auf Template-Matching mit der Python-Bibliothek skimage, gibt es einigen einfachen Beispielcode:Vorlagenabgleich mit skimage: Warum sind die Ausgabeabmessungen nicht gleich wie die Eingabeabmessungen?

import numpy as np 

from skimage import data 
from skimage.feature import match_template 

image = data.coins() 
coin = image[170:220, 75:130] 

result = match_template(image, coin) 

Als ich dies ausführen, scheint result auf das Eingangsbild zu entsprechen, jedoch mit leicht unterschiedlichen Dimensionen:

>>> image.shape 
(303, 384) 
>>> result.shape 
(254, 330) 

Warum ist das so? Wie kann ich die Pixel von result denen des Eingangs image entsprechen lassen?

Antwort

3

Das Ergebnis ist kleiner, weil die Anzahl der möglichen Positionen innerhalb des Bildes, bei denen die Vorlage positioniert werden konnte, ohne den Bildrand zu überlappen, geringer ist als die Anzahl aller Pixel im Bild. Wenn Sie beispielsweise versuchen, die obere linke Ecke des Templates auf jedes Pixel im Bild auszurichten, wird die Vorlage beim Überschreiten des unteren/rechten Bildteils aus dem Bild "herauslecken". Die Funktion match_template verfügt über einen speziellen Parameter pad_input (und die zugehörigen Parameter mode, constant_values), der das Auffüllen der Bildrahmen ermöglichen würde, damit die Vorlage dort angepasst werden kann.

+0

Danke für die gute Illustration der zugrunde liegenden Gründe. Ich weiß nicht, warum ich die Dokumente nicht früher gefunden habe, aber ich habe in der Zwischenzeit: http://scikit-image.org/docs/dev/api/skimage.feature.html#skimage.feature.match_template So lässt 'pad_input' eigentlich auch zu, dass die Ausgabe der Mitte der Vorlage entspricht anstatt der oberen linken Ecke (was ich intuitiver finde). – speedymcs

Verwandte Themen