Quais técnicas de processamento de imagem são ideais para essa correspondência invariável de modelo de mudança / escala em particular?

17

Um problema que discuti originalmente aqui evoluiu e pode ter se tornado um pouco mais simples ao estudá-lo um pouco mais e obter novas informações.

Resumindo, eu gostaria de poder detectar esse padrão mostrado aqui, usando técnicas de visão por computador / processamento de imagem. Como você pode ver, o padrão ideal é composto de quatro 'pings'. O reconhecimento de objeto deve ser:

  • Invariante de Mudança
    • Horizontalmente, a imagem será cíclica. (ou seja, pressione para a direita, saia à esquerda e vice-versa).
    • (Felizmente) Verticalmente, não é cíclico. (ou seja, pressione para cima ou para baixo e ele irá parar).
  • Escala invariável (os pings podem variar em 'espessura' como você pode ver.)

Eu poderia continuar, mas anexei imagens que cobrem o que quero dizer, veja abaixo:

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Obviamente, eles também podem estar em uma 'escala' diferente, como pode ser visto nesta família:

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

E, finalmente, aqui estão alguns cenários 'realistas' do que eu realmente poderia receber, onde haveria barulho, as linhas poderiam 'desaparecer' conforme você avançasse para o fundo e, é claro, a imagem terá muitas linhas falsas, artefatos etc.

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

E, é claro, como uma grande final, existe a possibilidade distinta desse cenário "extremo":

insira a descrição da imagem aqui

Então, mais uma vez, eu gostaria de pedir algumas orientações sobre quais técnicas de visão computador-máquina devo usar aqui para detectar melhor a ocorrência do meu padrão, onde eu preciso ser invariável para mudar e escalar, como você pode ver, e também será capaz de obter resultados decentes para os cenários realistas. (A boa notícia é que eu NÃO preciso que ele seja rotacionalmente invariável). A única idéia que consegui sugerir até agora é uma correlação bidimensional.

Devo acrescentar que, na realidade, NÃO tenho imagens coloridas - receberei apenas uma mistura de números, então suponho que estamos falando de 'escala de cinza'.

Desde já, obrigado!

PS Pelo que vale a pena, provavelmente usarei C V. aberto

EDIT # 1:

Com base nos comentários, adicionei os detalhes solicitados aqui:

Para características que definem os dados, podemos assumir o seguinte:

  • O comprimento horizontal de cada ping pode variar, mas eu sei os limites superior e inferior dele. SIM para qualquer coisa dentro deste limite, NÃO para qualquer coisa fora. (Por exemplo, eu sei que a duração dos pings pode estar entre 1 e 3 segundos, por exemplo).

  • Todos os pings precisam estar 'visíveis' para YES; no entanto, a última linha pode estar ausente e ainda assim quer dizer 'YES'. Caso contrário, NÃO.

  • O comprimento vertical (a 'espessura') de cada ping pode variar, mas, novamente, também sabemos os limites superior e inferior. (Semelhante ao que você vê nessas imagens). SIM para qualquer coisa dentro desse limite. NÃO para qualquer coisa lá fora.

  • A altura entre cada ping deve sempre ser a mesma para YES. Se não estiverem, NÃO. (Exemplo, você pode ver como todos os pings têm a mesma altura em relação um ao outro, ~ 110 no eixo vertical). Portanto, 110 +/- 5 pode ser SIM, qualquer outra coisa deve ser NÃO.

Eu acho que é sobre isso - mas deixe-me saber o que mais posso adicionar ... (Além disso, tudo o que é mostrado aqui deve ser registrado como SIM, aliás).

Spacey
fonte
O que você quer dizer quando diz detect this pattern shown here? Você está interessado apenas em isolar a linha vermelha / amarela ou deseja uma expressão que calcule o relacionamento entre essas linhas. Somente a localização de linhas poderia exigir apenas um limiar ou segmentação. O que você realmente quer?
Dipan Mehta 14/03/12
@DipanMehta Desculpe pela confusão. O que eu quero fazer é o seguinte: primeiro, não preste atenção às cores (é apenas a palavra que elas foram plotadas), o que terei é apenas uma matriz de números, tão em escala de cinza. Segunda coisa: como não há cores, eu apenas me preocupo com o 'padrão' que você vê lá com os 4 pings que está vendo repetir. Portanto, o detector verá variantes desse modelo de imagem, como mostrado nas imagens acima, e dirá 'sim, esse padrão existe'. Desculpe pela confusão, deixe-me saber se posso esclarecer mais alguma coisa. Obrigado!
Spacey
Ok, então, se eu entendi corretamente, uma vez que existe a primeira linha no topo, você deseja descobrir se a balança também está no mesmo lugar. Nesse caso, você concluiria que o padrão existe! Certo?
Dipan Mehta
@DipanMehta Sim, basicamente, seja capaz de detectar se o padrão mostrado acima existe, robusto o suficiente para lidar com a invariância de escala e robusto o suficiente para lidar com a invariância de mudança. Isso faz sentido? Obrigado,
Spacey
1
O que eu entendo é se você tem acesso aos dados de origem no sistema real em que está trabalhando. Se o fizer, pode haver uma abordagem melhor que funcione diretamente nos dados originais, em vez do formato intermediário do espectrograma em que você se concentrou.
Jason R /

Respostas:

6

De um modo geral, existem duas abordagens principais para resolver esse problema:

uma. correspondência de modelo ou
b. combinando com um modelo parametrizado.

Pessoalmente, dada a simplicidade do modelo, eu preferiria a segunda abordagem para esse problema.

Etapa 1: identificar os blobs de ping

Como primeiro passo, extraia as "Caixas" - essencialmente os quadrados amarelo / azul. Um método mais simples aqui pode ser apenas limitar a imagem. Não parece haver muitas variações no fundo, exceto que, à medida que o ruído aumenta, ele tende a ser bastante semelhante aos pings. Portanto, o limite pode ser global em toda a imagem - e eu acho que você será capaz de obter um limite decente que funcione em todas as imagens. O limite, no entanto, deve ser inteligente para que você possa usar algo como o método de Otsu. Veja isto e isto para mais referência.

Melhoria dos blocos

Uma das coisas boas que você pode fazer para remover pontos espúrios, que se assemelham ao primeiro plano de ping, onde alguns pixels dentro dos pings também são azuis. Você precisa aqui de uma operação morfológica chamada "Abertura". Aqui está uma das referências do HIPR . Esse tipo de operação requer uma forma inteligente que ajuda a preservar formas semelhantes e remover outras. No seu caso, você pode escolher linhas horizontais. No final, você tem pixels de plano de fundo e primeiro plano que separam os pings sem tocar um no outro.

Etapa 2: marcar / registrar blocos

Agora que você obteve os blobs mais limpos possíveis, é hora de marcá-los como 1,2,3,4 ou A, B, C, D etc. Isso geralmente é realizado pelo que é chamado de algoritmo simples. Percorra cada pixel e, se ele estiver tocando com qualquer região marcada, e também estiver em primeiro plano, atribua-o a esse segmento e crie um novo. Se você encontrar mais de 4 segmentos importantes, precisará escolher os mais relevantes. Aplique aqui alguma heurística, em vez de qualquer algoritmo teórico.

Etapa 3: Modelagem de parâmetros

Agora, depois de obtermos os quatro candidatos mais prováveis ​​dos quatro pings correspondentes, é possível identificar as caixas delimitadoras - essencialmente os cantos superior esquerdo e inferior direito (ou mais pixels esquerdo e direito, bem como as linhas superior e inferior do blob) . Encontre a caixa delimitadora, você pode multar o centróide de cada caixa de ping.

Ci where i{1,2,3,4}C1C1

portanto, distâncias entre centróides agora podem ser calculadas:

C1Eu[x,y]={C1[x]-CEu[x],C1[y]-CEu[y]}

euEu Onde Eu{1,2,3,4}

Essencialmente, você tem 8 parâmetros vecoter:

1{C1[x],C1[y]}2..4C1Eu[x,y]5..8euEu

Etapa 4: Classificação
Na última etapa, agora precisamos ter classificação se existe um padrão de ping sim ou não.

Para algo assim, você pode ter uma boa estrutura classificadora bayesiana.

Existem duas hipóteses que você tem

H0: O padrão de ping existe.
H1: O padrão de ping não existe

C1,Eu[x]

Primeiro, você estuda muitas imagens onde sabe que elas pertencem à imagem. Agora, você pode plotar vários histogramas ou aplicar algum método de estimativa de densidade. Leia Classificação de Padrão por Duda Hart.

C1,Eu[x]μ=20,σ=.1

C1,EuH0 0P[C1,Eu[x]|H0 0]

Agora, a partir dos dados de teste

P[H0 0|C1,Eu[x]=x1]C1[x]x1H0 0

Portanto, você pode calcular

P[H0 0 |C1,Eu[x]]=P[C1,Eu[x]|H0 0]P[H0 0]P[C1,Eu[x]]

Você precisa combinar essa expressão para a expressão vetorial e precisa fazer muito esforço para colocar exatamente a estimativa do parâmetro a ser feita. Mas estou deixando você com uma abordagem básica aqui.

Faça suas próprias contas, isso será demorado, mas ainda deve ser bastante intuitivo.

P[H0 0|todos os parâmetros]>1/2

EDITAR
Como você já está definindo os critérios específicos de 110 +/- 5 pixels, a última etapa pode ser mais simples. Você provavelmente não precisará calcular todas essas probabilidades se seus critérios de classificação forem fixos.

Dipan Mehta
fonte
Muito obrigado! Vou ter que digerir isso e voltar para você.
Spacey
3

Esse problema me parece o problema da detecção do intervalo de repetição de pulso + estimativa. Precisarei desenvolver essa resposta ao longo do tempo, mas o tipo de algoritmo que funciona bem nesse problema é de máxima probabilidade em uma rede .

Peter K.
fonte
Obrigado, sim, ficarei feliz em ouvir seus pensamentos sobre isso. Enquanto isso, examinarei seu link.
Spacey
Peter, você já teve tempo para pensar nisso como mencionou? Eu estaria interessado em ouvir seus pensamentos sobre o assunto.
Spacey
Apenas comecei a mexer novamente (abril foi uma anulação). Eu poderia estar enganado: a maneira como o artigo de Clarkson formula o problema é diferente ... deixe-me cavar um pouco mais.
Peter K.