Quero reconstruir o texto da imagem a seguir da melhor maneira possível. A parte complicada é que eu quero fazê-lo usando apenas operações morfológicas na imagem
Tentei usar erosão, dilatação, abertura e fechamento, mas o resultado não é muito bom.
Isso é possível?
image-processing
morphological-operations
Jackobsen
fonte
fonte
Respostas:
Se você deseja adicionar / subtrair etc. imagens transformadas morfologicamente, pode contar quantos pixels de sinal estão nas proximidades de cada pixel e o limite com base nesse número.
Se você convoluir com uma máscara 3x3 com um orifício no meio, poderá obter algo assim:
fonte
Este é um problema bastante interessante para resolver! Tente um filtro mediano . Veja a referência aqui e aqui para mais detalhes.
Embora eu não tenha me esforçado para simular seu problema, esta é uma sugestão. Meu pressentimento diz que isso pode lhe proporcionar um grande benefício, pois é conhecido por combater o ruído do tipo sal-e-pimenta. No seu caso, as imagens possuem pontos brancos extras ao redor da borda, que serão convertidos em branco ou preto, dependendo do lado do alfabeto. Aqui está como ele cuida da filtragem mediana:
fonte
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
realmente não é diferente de um bairro como este
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:
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:
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:
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.
fonte