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:
Obviamente, eles também podem estar em uma 'escala' diferente, como pode ser visto nesta família:
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.
E, é claro, como uma grande final, existe a possibilidade distinta desse cenário "extremo":
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).
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?