Utiliser une image colorée astucieuse

Oct 25 2020

Je suis nouveau dans le traitement d'image et l'opencv, mais récemment, je travaillais sur des idées de détection de bord et j'ai des questions à ce sujet:

  • Cany peut-il être appliqué directement sur des images colorées sans le convertir en niveaux de gris? et cela affecterait-il les résultats? Je l'ai essayé (en utilisant la fonction opnencv c ++), il n'y avait pas d'erreurs ou de problèmes et les résultats étaient différents de ceux après avoir changé les images en niveaux de gris.

  • J'ai lu que pour les images colorées, je devrais appliquer canny sur chaque canal séparément, puis combiner les résultats .. d'accord, supposons que j'ai 3 résultats pour chaque canal comment puis-je les combiner pour obtenir le résultat final?

  • Est-il vrai de traiter les images en niveaux de gris plus rapidement que les images colorées puisque dans la dernière, nous avons 3 canaux (logiquement, cela semble oui mais il n'y avait pas de référence comparant entre les avantages et les inconvénients pour chaque méthode; tout ce que j'ai, c'est que l'échelle de gris est plus rapide alors que pour segmentation d'image les images colorées peuvent être plus informatives) dans le concept de détection des contours, vaut-il mieux utiliser des images colorées ou non?

Réponses

Ahx Oct 25 2020 at 04:52

Si vous acceptez python, vous pouvez faire:

Pour la 2ème question:


    1. Séparez les canaux en utilisant la splitméthode de séparation des canaux, appliquez chaque canal Cannyavec différents niveaux de seuil, puis utilisez la mergeméthode pour combiner le résultat.

  • import cv2   
    
    img = cv2.imread("grl.jpg")
    (B, G, R) = cv2.split(img)
    B_cny = cv2.Canny(B, 50, 200)
    G_cny = cv2.Canny(G, 50, 200)
    R_cny = cv2.Canny(R, 50, 200)
    img_cny = cv2.merge([B_cny, G_cny, R_cny]) 
    
  • Résultat:


  • Question possible: Pourquoi les splitrendements B, Get R?

  • Réponse: Opencv lit les images au (BGR)format, splitrenvoie donc le (B, G, R)format

  • Vous pouvez également postuler directement à l'image (merci à @ fmw42):

  • Résultat:

Pour la 3e question:


  • Oui, le traitement des images en niveaux de gris est beaucoup plus rapide que les images colorées.

  • Nous voyons des images avec des couleurs différentes, mais ce que voit l'ordinateur est une matrice de valeurs:

    • Par exemple:

      • 25 45 67 37 90 ..
        56  .
        46     .     
        34        .
        13           .
        .
        .
        
      • Chaque cellule de la matrice peut varier entre 0 et 255. Pour les images en niveaux de gris (matrice), il n'y a qu'un seul canal, pour les images couleur, il y a 3 canaux (matrice)

      • Par conséquent, vous pouvez penser que le calcul d'une seule matrice (gris) est plus rapide que le calcul de 3 matrices (image)