No meu projeto, preciso digitalizar uma imagem de ECG tirada com uma câmera normal (jpeg). Por exemplo, tenho a seguinte imagem capturada da câmera:
e eu quero algo assim: -
e então os dados digitalizados (pontos x, y), como neste vídeo sobre digitalização do ECG
Não tenho idéia de como fazê-lo, então procurei e consultei vários trabalhos de pesquisa. A abordagem geral dos algoritmos é como:
- mudar para a imagem no nível de cinza
- excluir linhas de grade
- adicionar pontos ausentes
- converter imagem 2D para imagem 1D
Estou preso ao segundo ponto, ou seja, excluindo as linhas de grade. Procurei mais algumas referências para fazer isso e achei que a análise de histograma pode ser útil.
Você pode me orientar sobre como fazer isso (estou usando o MATLAB 2010)? Qualquer ajuda seria apreciada.
image-processing
Deepak
fonte
fonte
Respostas:
Desculpe, eu uso o Mathematica, mas deve ser muito fácil implementar a ideia no Matlab. Eu dou o código de qualquer maneira, portanto, quando minha descrição não for detalhada o suficiente, você poderá obter o restante do código.
A idéia básica é: você olha sua imagem em colunas. Processe todas as colunas de pixels separadamente. Observe que no gráfico inverti os valores de cinza. Portanto, preto é 1 e branco é 0.
Se você plotar os valores de pixel de brilho (invertidos), terá basicamente apenas duas situações. O primeiro é quando sua coluna não está em uma linha de grade vertical. O enredo parece
A segunda situação é onde você está diretamente em uma linha de grade vertical. Então a linha de grade influencia o brilho de toda a coluna
Mas o que você vê é que seu EEG escuro parece ser sempre o máximo. Portanto, o algoritmo muito complexo é: Percorra todas as colunas e tome a posição do pixel mais preto.
Note que eu cortei um pouco do lado direito da sua imagem, uma vez que era completamente branco lá. O resultado é
Agora você pode juntar-se aos pontos ou interpolar-os da maneira que quiser e você obtém seu EEG
fonte
Você tem uma imagem colorida em que as linhas de grade são vermelhas e o traço é preto. simplesmente ignore os pixels vermelhos!
Se você não tiver certeza de que a imagem está exatamente alinhada, poderá usar as linhas de grade para calcular uma inclinação (simplesmente a inclinação da imagem em pixels / pixel à medida que você for para a direita).
Então, transformar o traço preto em um valor 1d é simples. Comece na primeira coluna na borda esquerda e encontre o pixel preto (ou centróide de um pequeno grupo de pixels conectado) - a posição vertical é o seu valor.
Faça isso para cada coluna na imagem.
Onde você tem um valor ausente, precisará interpolar entre os valores conhecidos antes e depois.
Para pontos extras, você pode definir um limite de quanto o traço pode mudar de coluna para coluna, para permitir que você encontre pontos aleatórios ou picos de ruído.
fonte