Se per qualche motivo sei limitato all'utilizzo di operazioni morfologiche, puoi prendere in considerazione l'uso di uno "schema di voto" di operazioni orientate ravvicinate.
Un problema con le operazioni morfologiche è che non tengono davvero conto della direzionalità. Per il pixel centrale, un quartiere come questo
1 0 0
1 1 0
0 1 1
non è davvero diverso da un quartiere come questo
0 1 0
1 1 0
1 1 0
Ciò può causare problemi poiché la dilatazione e l'erosione non sono orientate direzionalmente quando si potrebbe desiderare che lo siano. Quindi una cosa che puoi fare è trovare l'operazione morfologica orientata direzionalmente più appropriata usando i kernel qualcosa del genere:
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 . . .
Questo sarebbe meglio con 5 x 5 kernel, ma penso che l'idea sia abbastanza chiara. Fondamentalmente, l'idea di un kernel di rilevamento degli angoli è leggermente allungata in modo che sia un kernel di rilevamento del segmento di linea. Puoi anche usarlo per trovare le curve più adatte:
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
Ovviamente questo porta a un numero enorme di kernel, ma se l'idea di base funziona promettendo che c'è un modo per ottimizzare la tecnica in modo che il kernel più adatto si trovi in un unico passaggio.
In ogni caso, se usi più kernel e qualche logica, ogni operazione in (x, y) richiede più calcoli di un tradizionale passo morfologico:
- Ad ogni pixel (x, y), applicare ciascuno dei diversi operatori morfologici. Per ciascun operatore, calcolare sia il risultato dell'operazione morfologica sia il grado in cui l'input corrisponde al kernel. ("Grado" = numero di pixel corrispondenti)
- Scegli il risultato morfologico per il kernel che si avvicina maggiormente alla configurazione effettiva dei pixel on / off.
La dimensione del kernel deve corrispondere alla dimensione dell'input. Invece di utilizzare un kernel più grande, è possibile utilizzare un kernel "spread" per ridurre il numero di operazioni. Il kernel seguente è solo un kernel 3 x 3 con un raggio maggiore di 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