Se, por algum motivo, você estiver limitado a usar operações morfológicas, considere usar um "esquema de votação" de operações orientadas a fechamento.
Um problema com operações morfológicas é que elas realmente não levam em consideração a direcionalidade. Para o pixel central, um bairro como este
1 0 0
1 1 0
0 1 1
realmente não é diferente de um bairro como este
0 1 0
1 1 0
1 1 0
Isso pode causar problemas, pois a dilatação e a erosão não são direcionadas direcionalmente, quando você gostaria que elas fossem. Então, uma coisa que você pode fazer é encontrar a operação morfológica com orientação direcional mais apropriada usando kernels, algo como:
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 . . .
Isso seria melhor com kernels 5 x 5, mas acho que a idéia é clara o suficiente. Basicamente, a idéia de um kernel de detecção de canto é um pouco extenso, de modo que é um kernel de detecção de segmento de linha. Você também pode usá-lo para encontrar as curvas mais adequadas:
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
Obviamente, isso leva a um grande número de kernels, mas se a idéia básica funcionar mostra promessa para você, há uma maneira de otimizar a técnica para que o kernel mais adequado seja encontrado em uma única passagem.
De qualquer forma, se você usar vários kernels e alguma lógica, cada operação em (x, y) exigirá mais cálculos do que uma etapa morfológica tradicional:
- Em cada pixel (x, y), aplique cada um dos vários operadores morfológicos. Para cada operador, calcule o resultado da operação morfológica E o grau em que a entrada corresponde ao kernel. ("Grau" = número de pixels correspondentes)
- Escolha o resultado morfológico para o kernel que mais se aproxima da configuração real de pixel ativado / desativado.
O tamanho do kernel deve corresponder ao tamanho da entrada. Em vez de usar um kernel maior, você pode usar um kernel "spread" para reduzir o número de operações. O kernel a seguir é apenas um kernel 3 x 3 com um raio maior que 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