
Si on fait un calcul avec un noyau de taille NxN, il faut définir ce que l'on veut obtenir pour les calculs en bord d'image.
On peut décider de ne traiter que les pixels de l'image pour lequel le noyau ne déborde pas de cette image, mais l'image finale sera alors de taille plus petite.
Mais si on traite tous les pixels de l'image, il faut définir ce que doivent être les pixels du "bord", cad les pixels hors de l'image dont le noyau a besoin. Les principaux cas de figure sont les suivants :
- soit on fixe tous ces pixels à une valeur donnée (zéro, ou la valeur max pour le pixel),
- soit on recopie le pixel le plus proche dans l'image,
- soit on utilise les pixels qui se trouvent à l'opposé de l'image (pour boucler l'image sur elle même).
Le problème est que dans sa version actuelle, OpenCV ne permet pas de changer le "Border Mode", qui est fixé au mode "replication border type".
Pour obtenir un bord à zéro, on peut utiliser la commande "
CopyMakeBorder" spécialement prévue pour. Elle est décrite dans ce document :
http://opencvlibrary.sourceforge.net/CvReferencePetite citation :
The function cvCopyMakeBorder copies the source 2D array into interior of destination array and makes a border of the specified type around the copied area. The function is useful when one needs to emulate border type that is different from the one embedded into a specific algorithm implementation. For example, morphological functions, as well as most of other filtering functions in OpenCV, internally use replication border type, while the user may need zero border or a border, filled with 1's or 255's.