[PYTHON] cv2.Canny (): Rend le réglage de la détection de bord par la méthode Canny agréable

Le bord fait référence à la limite entre les objets et l'arrière-plan, et la détection de bord fait généralement référence au traitement d'image qui détecte les bords en détectant les changements dans les valeurs de pixel et les zones avec un gradient de luminosité important dans l'image.

スクリーンショット 2020-02-09 3.24.50.png (L'image provient du [Site d'images gratuites](https://www.pakutaso.com/20191228360post-24995.html))

Qu'est-ce que cv2.Canny ()?

Fonction de détection de bord implémentée et fournie par opencv. Les images de bord peuvent être créées facilement, mais deux paramètres (principalement) doivent être ajustés pour une utilisation correcte.

Page officielle: Documentチュートリアル

Personne cible

J'ai essayé d'utiliser cv2.Canny () tout en ajustant le seuil d'une manière ou d'une autre, mais cela n'a pas fonctionné comme prévu. Je ne sais pas si l'image est limitée ou mal ajustée. Comprenons bien la signification des paramètres.

Deux paramètres de réglage

cv2.Canny(gray_img, threshold1, threshold2)

Simplement, «seuil1» et «seuil2» représentent le seuil pour déterminer si un bord est présent. ** Plus la valeur est élevée, plus il est difficile de détecter le bord, et plus la valeur est petite, plus il est facile de détecter le bord. ** ** (Si le seuil est grand, il sera jugé comme un bord uniquement lorsque la luminosité augmente.)

import cv2
gray_img = cv2.imread('sample.jpg', cv2.IMREAD_GRAYSCALE)

threshold1 = 0
threshold2 = 360
edge_img = cv2.Canny(gray_img, threshold1, threshold2)
cv2.imwrite('sample_edge.jpg', edge_img)

threshold2: maxVal seuil2 est la valeur la plus intuitive **, le seuil lui-même pour déterminer s'il s'agit d'un front **.

Si vous réduisez progressivement le seuil2, ce sera comme suit. (Pour faciliter la compréhension, le seuil1 a la même valeur que le seuil2.)

threshold2.gif

threshold1: minVal Comme prémisse de l'explication de l'argument, la méthode de Canny considère l'arête comme une longue ligne, et ** la partie adjacente à l'arête a tendance à être une arête **. (Reportez-vous à la figure ci-dessous)

スクリーンショット 2020-02-09 3.42.44.png

À partir de cette idée, nous avons introduit un deuxième seuil (seuil1), et en termes simples, le rôle est "** Un seuil lâche pour juger s'il s'agit ou non d'une arête dans la partie adjacente à une autre arête (la partie qui tend à devenir une arête) * * ".

En d'autres termes, même si vous essayez de rendre le seuil 1 plus lâche (plus petit), les bords ne seront pas détectés aux endroits où rien n'a été détecté à l'origine.

En le desserrant, la partie adjacente du bord détecté à l'origine par seuil2 a tendance à devenir un bord, c'est-à-dire intuitivement, on a l'impression de prolonger la ligne du bord détecté à l'origine par seuil2 **. ..

Si vous réduisez progressivement le seuil 1, ce sera comme suit.

threshold1.gif

Résumé

cv2.Canny(gray_img, threshold1, threshold2)

--seuil 1: seuil lâche pour juger s'il s'agit ou non d'une arête dans une partie adjacente à une autre arête (une partie qui a tendance à être une arête) --threshold2: Seuil lui-même pour juger s'il s'agit d'un front

Rendre les réglages des paramètres de détection de bord agréables

De ce qui précède, l'ordre comme expliqué ci-dessus est recommandé.

1.Donnez à threhsold1 la même valeur que threshold2. 2. Ajustez le seuil2 pour que le bord apparaisse là où vous voulez qu'il soit détecté. 3. Utilisez seuil1 pour agrandir les bords.

Recommended Posts

cv2.Canny (): Rend le réglage de la détection de bord par la méthode Canny agréable
La méthode de copie de pandas.DataFrame est une copie profonde par défaut
Détection des bords (Laplacien, Sobel, Canny)
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance
Trouvez le ratio de la superficie du lac Biwa par la méthode de Monte Carlo