Maison > développement back-end > Tutoriel Python > Comment effectuer une suppression non maximale des images à l'aide de Python

Comment effectuer une suppression non maximale des images à l'aide de Python

王林
Libérer: 2023-08-26 10:28:53
original
1316 Les gens l'ont consulté

Comment effectuer une suppression non maximale des images à laide de Python

Comment utiliser Python pour effectuer une suppression non maximale sur des images

La suppression non maximale est une technique de traitement d'image couramment utilisée en vision par ordinateur, utilisée pour extraire les bords ou les coins des images. Dans cet article, nous utiliserons le langage de programmation Python ainsi que la bibliothèque OpenCV pour implémenter la suppression non maximale des images.

  1. Installation et importation de bibliothèques

Tout d'abord, assurez-vous d'avoir installé les bibliothèques Python et OpenCV. Vous pouvez utiliser pip pour installer la bibliothèque OpenCV : pip install opencv-python. pip install opencv-python

然后,导入所需的库:

import cv2
import numpy as np
Copier après la connexion
  1. 加载和预处理图像

使用OpenCV的cv2.imread()函数加载图像,并使用灰度图像处理方法将图像转换为灰度图像。灰度图像只包含一个通道,并更容易处理。下面的代码演示了如何加载和预处理图像:

# 读取图像
image = cv2.imread('image.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Copier après la connexion
  1. 计算梯度

非极大抑制是基于图像梯度的,并使用梯度的大小和方向来判断是否是极大值。我们可以使用cv2.Sobel()函数计算图像的梯度。

# 计算x和y轴方向的梯度
gradient_x = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3)
gradient_y = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3)

# 计算梯度的大小和方向
magnitude = np.sqrt(gradient_x ** 2 + gradient_y ** 2)
angle = np.arctan2(gradient_y, gradient_x)
Copier après la connexion
  1. 进行非极大抑制

接下来,我们将使用梯度的大小和方向来进行非极大抑制。对于每个像素,我们将检查其相邻的两个像素,如果梯度的大小比相邻像素大,并且在梯度方向上是极大值,则保留该像素作为边缘。

# 非极大抑制
suppressed = np.zeros_like(magnitude)

for y in range(1, magnitude.shape[0] - 1):
    for x in range(1, magnitude.shape[1] - 1):
        current_gradient = magnitude[y, x]
        current_angle = angle[y, x]

        if (current_angle >= 0 and current_angle < np.pi / 8) or (current_angle >= 7 * np.pi / 8 and current_angle < np.pi):
            before_gradient = magnitude[y, x - 1]
            after_gradient = magnitude[y, x + 1]
        elif current_angle >= np.pi / 8 and current_angle < 3 * np.pi / 8:
            before_gradient = magnitude[y - 1, x - 1]
            after_gradient = magnitude[y + 1, x + 1]
        elif current_angle >= 3 * np.pi / 8 and current_angle < 5 * np.pi / 8:
            before_gradient = magnitude[y - 1, x]
            after_gradient = magnitude[y + 1, x]
        else:
            before_gradient = magnitude[y - 1, x + 1]
            after_gradient = magnitude[y + 1, x - 1]

        if current_gradient >= before_gradient and current_gradient >= after_gradient:
            suppressed[y, x] = current_gradient
Copier après la connexion
  1. 显示结果

最后,我们使用cv2.imshow()

Ensuite, importez les bibliothèques requises :

# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Non-maximum Suppressed Image', suppressed)
cv2.waitKey(0)
cv2.destroyAllWindows()
Copier après la connexion
    Chargez et prétraitez l'image🎜🎜🎜Chargez l'image à l'aide de la fonction cv2.imread() d'OpenCV et utilisez l'image en niveaux de gris les méthodes de traitement convertissent les images en images en niveaux de gris. Les images en niveaux de gris ne contiennent qu'un seul canal et sont plus faciles à traiter. Le code ci-dessous montre comment charger et prétraiter une image : 🎜rrreee
      🎜Calculer le dégradé🎜🎜🎜La suppression non maximale est basée sur le dégradé de l'image et utilise l'ampleur et la direction du dégradé pour déterminer s'il s'agit d'une valeur extrêmement élevée. On peut utiliser la fonction cv2.Sobel() pour calculer le dégradé de l'image. 🎜rrreee
        🎜Effectuer une suppression non maximale🎜🎜🎜Ensuite, nous utiliserons l'ampleur et la direction du gradient pour effectuer une suppression non maximale. Pour chaque pixel, nous vérifierons ses deux pixels adjacents, et si l'ampleur du dégradé est supérieure à celle des pixels adjacents et constitue une valeur maximale dans la direction du dégradé, conserverons le pixel comme bord. 🎜rrreee
          🎜Afficher les résultats🎜🎜🎜Enfin, nous utilisons la fonction cv2.imshow() pour afficher l'image originale et les résultats de suppression non maximaux. Le code est le suivant : 🎜rrreee🎜Ce qui précède est l'exemple de code complet pour la suppression non maximale des images à l'aide de Python. Avec les étapes ci-dessus, nous pouvons facilement utiliser les bibliothèques Python et OpenCV pour implémenter une suppression non maximale afin d'extraire les bords ou les coins des images. Les paramètres et la logique du code peuvent être ajustés selon les besoins pour obtenir de meilleurs résultats. 🎜

Ce 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal