Comment utiliser la fonction de convolution Python
Fonction de convolution
python
fournit une variété de schémas de convolution. En comparaison, la fonction de convolution définie dans ndimage
est plus fonctionnelle que La convolution dans numpy et <code>signal
est légèrement plus compliqué. Cela peut être vu uniquement à partir du nombre de paramètres d'entréepython
提供了多种卷积方案,相比之下,定义在ndimage
中的卷积函数,在功能上比numpy
和signal
中的卷积要稍微复杂一些,这点仅从输入参数的多少就可略窥一二
numpy.convolve(a, v, mode='full') scipy.ndimage.convolve1d(input, weights, axis=-1, output=None, mode='reflect', cval=0.0, origin=0) scipy.signal.convolve(in1, in2, mode='full', method='auto') scipy.ndimage.convolve(input, weights, output=None, mode='reflect', cval=0.0, origin=0)
前两者为1维卷积函数,且ndimage可对多维数组沿着单个坐标轴进行卷积操作,后两者为多维卷积。
numpy和signal中的卷积函数,其mode都有三种,用以调节卷积后的边缘特性,如果输入的两个卷积对象的维度分别是N NN和M MM,则这三种模式的输出结果为
full
: 输出维度N + M − 1 N+M-1N+M−1,其最后一点的信号完全不交叠,故而边缘效应明显。same
:输出维度max ( M , N ) max(M,N)max(M,N),边缘效应仍然可见valid
:输出维度∣ M − N ∣ |M-N|∣M−N∣,只返回完全交叠的区域,相当于把存在边缘效应的点都率除掉了
ndimage
中的convolve
针对边缘效应,对图像进行扩展,而其mode
决定的就是扩展之后的填充格式,设待滤波数组为a b c d
,则在不同的模式下,对边缘进行如下填充
左侧填充 | 数据 | 右侧填充 | |
---|---|---|---|
reflect | d c b a | a b c d | d c b a |
constant | k k k k | a b c d | k k k k |
nearest | a a a a | a b c d | d d d d |
mirror | d c b | a b c d | c b a |
wrap | a b c d | a b c d | a b c d |
其中,k
通过参数cval
设定。
这五种修改边界的方法,在scipy.ndimage
的函数中十分普遍,尤其是涉及到卷积的滤波函数,堪称标配。
对比测试
接下来针对这些不同的卷积函数,做一下性能测试,用5 × 5的卷积模板,对1000 × 1000的矩阵进行卷积计算,来看一下不同实现方案的卷积,其速度如何
import numpy as np import scipy.signal as ss import scipy.ndimage as sn from timeit import timeit A = np.random.rand(1000,1000) B = np.random.rand(5,5) timeit(lambda : ss.convolve(A, B), number=10) # 0.418 timeit(lambda : sn.convolve(A, B), number=10) # 0.126
相比之下,ndimage
中的卷积显然是更高效的。
接下来测试一下一维卷积的表现
A = np.random.rand(10000) B = np.random.rand(15) timeit(lambda : np.convolve(A, B), number=1000) # 0.15256029999727616 timeit(lambda : ss.convolve(A, B), number=1000) # 0.1231262000001152 timeit(lambda : sn.convolve(A, B), number=1000) # 0.09218210000108229 timeit(lambda : sn.convolve1d(A, B), number=1000) # 0.03915820000111125
相比之下,convolve1d
不愧是写明了1d
的卷积函数,速度最快,而numpy
from scipy.misc import ascent import matplotlib.pyplot as plt img = ascent() temp = np.zeros([3,3]) temp[:,0] = -1 temp[:,2] = 1 edge = sn.convolve(img, temp) fig = plt.figure() ax = fig.add_subplot(121) ax.imshow(img) ax = fig.add_subplot(122) ax.imshow(edge) plt.show()
.
-
full
: dimension de sortie N + M &moins; 1 N+M-1N+M−1, et sa finale Les signaux à un les points ne se chevauchent pas du tout, donc l'effet de bord est évident. -
idem
: Dimension de sortie max ( M , N ) max(M,N)max(M,N), les effets de bord sont toujours visibles
valid
: Dimension de sortie ∣ M − N ∣ |M-N|∣M−N∣, ne renvoie que les zones complètement superposées, ce qui équivaut à éliminer tous les points avec des effets de bord
convolve
dans ndimage
agrandit l'image pour les effets de bord, et son mode
détermine le format de remplissage étendu, en supposant que le le tableau à filtrer est a b c d
, puis dans différents modes, les bords sont remplis comme suit🎜 |
Remplissage à gauche | Données | Remplissage à droite |
---|---|---|---|
réfléchir |
d c b a | a b c d | d c b a |
constant code> | k k k k | a b c d | k k k k |
le plus proche td> |
a a a a a | a b c d | d d d d |
miroir |
d c b | a b c d | c b a |
envelopper | a b c d td>a b c d | a b c d |
k
passe le paramètre cval paramètres. 🎜🎜Ces cinq méthodes de modification de la limite sont très courantes dans les fonctions de <code>scipy.ndimage
, notamment les fonctions de filtre impliquant la convolution, qui sont standards. 🎜🎜Test de comparaison🎜🎜 Ensuite, effectuez un test de performances pour ces différentes fonctions de convolution. Utilisez un modèle de convolution 5 × 🎜rrreee🎜En comparaison, la convolution dans ndimage
est évidemment plus efficace. 🎜🎜Ensuite, testons les performances de la convolution unidimensionnelle🎜rrreee🎜En revanche, convolve1d
est bien la fonction de convolution de 1d
, qui est la plus rapide des fonctions fournies. dans numpy
sont les plus lents. 🎜🎜Application de convolution🎜🎜Les opérations de convolution sont souvent utilisées dans le filtrage d'images et l'extraction de bords. Par exemple, grâce à une matrice similaire à celle ci-dessous, les bords verticaux de l'image peuvent être extraits. 🎜🎜🎜🎜🎜Faisons un test simple🎜rrreeeCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Utiliser la plupart des éditeurs de texte pour ouvrir des fichiers XML; Si vous avez besoin d'un affichage d'arbre plus intuitif, vous pouvez utiliser un éditeur XML, tel que Oxygen XML Editor ou XMLSPY; Si vous traitez les données XML dans un programme, vous devez utiliser un langage de programmation (tel que Python) et des bibliothèques XML (telles que XML.ETREE.ElementTree) pour analyser.

L'embellissement XML améliore essentiellement sa lisibilité, y compris l'indentation raisonnable, les pauses-lignes et l'organisation des étiquettes. Le principe est de traverser l'arbre XML, d'ajouter l'indentation en fonction du niveau et de gérer les balises et les balises vides contenant du texte. La bibliothèque XML.ETREE.ElementTree de Python fournit une fonction Pretty_xml () pratique qui peut implémenter le processus d'embellissement ci-dessus.

Il est impossible de terminer la conversion XML à PDF directement sur votre téléphone avec une seule application. Il est nécessaire d'utiliser les services cloud, qui peuvent être réalisés via deux étapes: 1. Convertir XML en PDF dans le cloud, 2. Accédez ou téléchargez le fichier PDF converti sur le téléphone mobile.

Il n'y a pas d'application qui peut convertir tous les fichiers XML en PDF car la structure XML est flexible et diversifiée. Le noyau de XML à PDF est de convertir la structure des données en une disposition de page, ce qui nécessite l'analyse du XML et la génération de PDF. Les méthodes courantes incluent l'analyse de XML à l'aide de bibliothèques Python telles que ElementTree et la génération de PDF à l'aide de la bibliothèque ReportLab. Pour le XML complexe, il peut être nécessaire d'utiliser des structures de transformation XSLT. Lorsque vous optimisez les performances, envisagez d'utiliser multithread ou multiprocesses et sélectionnez la bibliothèque appropriée.

La vitesse du XML mobile à PDF dépend des facteurs suivants: la complexité de la structure XML. Méthode de conversion de configuration du matériel mobile (bibliothèque, algorithme) Méthodes d'optimisation de la qualité du code (sélectionnez des bibliothèques efficaces, optimiser les algorithmes, les données de cache et utiliser le multi-threading). Dans l'ensemble, il n'y a pas de réponse absolue et elle doit être optimisée en fonction de la situation spécifique.

Pour générer des images via XML, vous devez utiliser des bibliothèques de graphiques (telles que Pillow et JFreechart) comme ponts pour générer des images basées sur des métadonnées (taille, couleur) dans XML. La clé pour contrôler la taille de l'image est d'ajuster les valeurs de & lt; largeur & gt; et & lt; height & gt; Tags dans XML. Cependant, dans les applications pratiques, la complexité de la structure XML, la finesse du dessin de graphiques, la vitesse de la génération d'images et la consommation de mémoire et la sélection des formats d'image ont tous un impact sur la taille de l'image générée. Par conséquent, il est nécessaire d'avoir une compréhension approfondie de la structure XML, compétent dans la bibliothèque graphique, et de prendre en compte des facteurs tels que les algorithmes d'optimisation et la sélection du format d'image.

Une application qui convertit le XML directement en PDF ne peut être trouvée car ce sont deux formats fondamentalement différents. XML est utilisé pour stocker des données, tandis que PDF est utilisé pour afficher des documents. Pour terminer la transformation, vous pouvez utiliser des langages de programmation et des bibliothèques telles que Python et ReportLab pour analyser les données XML et générer des documents PDF.

Il n'est pas facile de convertir XML en PDF directement sur votre téléphone, mais il peut être réalisé à l'aide des services cloud. Il est recommandé d'utiliser une application mobile légère pour télécharger des fichiers XML et recevoir des PDF générés, et de les convertir avec des API Cloud. Les API Cloud utilisent des services informatiques sans serveur et le choix de la bonne plate-forme est crucial. La complexité, la gestion des erreurs, la sécurité et les stratégies d'optimisation doivent être prises en compte lors de la gestion de l'analyse XML et de la génération de PDF. L'ensemble du processus nécessite que l'application frontale et l'API back-end fonctionnent ensemble, et il nécessite une certaine compréhension d'une variété de technologies.
