Vous devriez faire confiance à la documentation! (Bien, la plupart du temps ... :-)
Le masque est plus large de 2 pixels et plus grand que l'image d'entrée, mais une bande de pixels est utilisée en haut/à gauche de l'image, et l'autre en bas/droite de l'image.
Comme vous le dites correctement, pendant le remplissage, toutes les coordonnées d'entréeImage sont traduites pour masquer les coordonnées en sommant (1,1).
Par exemple, en atteignant un point quelconque sur le bord gauche de l'image située au point de coordonnées x = 0, y = y0
, l'algorithme vérifie dans le masque 8 points centrés autour des coordonnées x = 1, y = y0 + 1
, qui comprend le point x = 0, y = y0 + 1
(immédiatement à gauche) . Si vous n'aviez pas la somme 1, vous quitteriez les limites de l'image.
En atteignant le bord droit de l'image située au point de coordonnées x = inputImage.cols -1, y = y0
, l'algorithme va vérifier dans le masque 8 points centrés autour des coordonnées x = inputImage.cols, y = y0 + 1
, qui comprend le point x = inputImage.cols + 1, y = y0 + 1
(immédiatement à droite). Si votre masque n'est pas plus large de 2 pixels que l'image d'origine, vous quitterez les limites de l'image. C'est pourquoi vous avez besoin d'une image de masque de 2 pixels plus large que l'image d'entrée, tout en additionnant (1,1) pour transformer les coordonnées de l'image en masque. Toutes ces considérations valent bien sûr pour la coordonnée y
, pour expliquer pourquoi le masque doit être supérieur de 2 pixels à l'image d'entrée.
Remarque: les considérations sont les mêmes si vous utilisez un voisinage 4 au lieu d'un voisinage 8.
merci pour votre explication. – zumma
@holazollil Si vous êtes satisfait de ma réponse, veuillez vérifier [comment l'accepter] (http://meta.stackexchange.com/a/5235/225842). – Antonio