Si, pour une raison quelconque, vous êtes limité à l'utilisation d'opérations morphologiques, vous pouvez envisager d'utiliser un «schéma de vote» d'opérations de fermeture orientées.
Un problème avec les opérations morphologiques est qu'elles ne prennent pas vraiment en compte la directionnalité. Pour le pixel central, un quartier comme celui-ci
1 0 0
1 1 0
0 1 1
n'est vraiment pas différent d'un quartier comme celui-ci
0 1 0
1 1 0
1 1 0
Cela peut causer des problèmes, car la dilatation et l'érosion ne sont pas biaisées lorsque vous les aimeriez. Donc, une chose que vous pouvez faire est de trouver l'opération morphologique à biais directionnel la plus appropriée en utilisant des noyaux quelque chose comme ceux-ci:
1 1 0 1 0 0 1 0 0
0 1 0 1 1 0 1 1 0
0 1 1 0 1 1 0 1 1 . . .
Ce serait mieux avec 5 x 5 noyaux, mais je pense que l'idée est assez claire. Fondamentalement, l'idée d'un noyau de détection de coin est un peu extensible de sorte qu'il s'agit d'un noyau de détection de segment de ligne. Vous pouvez également l'utiliser pour trouver les courbes les plus adaptées:
0 0 0 1 1
0 0 1 1 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
Évidemment, cela conduit à un grand nombre de noyaux, mais si l'idée de base fonctionne, cela vous promet qu'il existe un moyen d'optimiser la technique afin que le noyau le mieux adapté se trouve en une seule passe.
Dans tous les cas, si vous utilisez plusieurs noyaux et une certaine logique, chaque opération en (x, y) nécessite plus de calculs qu'une étape morphologique traditionnelle:
- À chaque pixel (x, y), appliquez chacun de plusieurs opérateurs morphologiques. Pour chaque opérateur, calculez à la fois le résultat de l'opération morphologique ET le degré auquel l'entrée correspond au noyau. ("Degré" = nombre de pixels qui correspondent)
- Choisissez le résultat morphologique pour le noyau qui correspond le mieux à la configuration réelle des pixels marche / arrêt.
La taille du noyau doit correspondre à la taille de l'entrée. Plutôt que d'utiliser un noyau plus gros, vous pouvez utiliser un noyau "étalé" pour réduire le nombre d'opérations. Le noyau suivant est juste un noyau 3 x 3 avec un rayon supérieur à 1.
1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1