Como remover um determinado fundo da imagem?


11

laranja

Esta foi a imagem obtida após a filtragem Gabor ... Existe alguma maneira de remover as linhas dentro da imagem, exceto o defeito arredondado em branco brilhante.

Tentei outra orientação do filtro gabor e obtive o seguinte resultado:

insira a descrição da imagem aqui

Após o limiar: o que é bom o suficiente, mas não ótimo

insira a descrição da imagem aqui

Após a filtragem mediana:

insira a descrição da imagem aqui

desde já, obrigado


2
Bom trabalho com o filtro mediano. Você está bem no seu caminho.
Rethunk

Este parece ser um bom cenário para a aplicação de um filtro de difusão. Além disso, tente perguntar: <br/> dsp.stackexchange.com/ <br> photo.stackexchange.com/ <br>
Danny Varod

Você aplicou o filtro mediano após o limite? Nesse caso, tente sem o limite.
precisa saber é o seguinte

Sim, eu tentei depois do limiar e obtive quase o mesmo resultado quando o fiz antes
vini

Respostas:


12

Se a saída do seu filtro Gábor for confiável e a variação nos dados da imagem não for tão alta que o resultado pareça completamente diferente, você poderá usar a seguinte abordagem (partes dela já mencionadas):

  1. Binarize sua segunda imagem com qualquer algoritmo de limiar automático. O intervalo de limites que funcionará é grande como você verá.

  2. Use um algoritmo de rotulagem de componentes para rotular cada região conectada de pixel com um valor exclusivo.

  3. Calcule para cada componente de sua imagem uma propriedade que descreva o quão próximo seu objeto está de um círculo preenchido. Para isso, você pode usar, por exemplo, a compacidade . Usei abaixo da fração de pixels dentro do raio equivalente do disco . Esse raio é o raio de um disco com a mesma área que seu objeto teria.

    1. Área é simplesmente contar o número de pixels do seu objeto
    2. O cálculo do raio de um círculo, dada sua área, também deve ser administrável
    3. Para o pixel dentro desse raio, você precisa do centro de cada objeto de imagem, mas esta é apenas a média de todas as posições dos pixels do objeto. Se você é físico, conhece o centro de massa de várias massas pontuais. Isso é equivalente.
    4. Agora você calcula para cada pixel de cada objeto a distância do centro e verifica se é menor ou menor que o raio do círculo. Dividindo os dois números, você obtém a fração de pixel interno e externo.
  4. Pegue o objeto com a fração mais alta. Nota: objetos com apenas um pixel obterão o valor 1. Portanto, você deve definir um limite de tamanho e aumentar apenas os objetos, digamos 10 pixels.

Para ver que uma binarização automática deve funcionar, eis os resultados para um limite muito baixo e muito alto:

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

Atualizar rotulagem de componentes

A escolha da etiqueta do componente não é crítica para a sua aplicação. Eu sugeriria, se você precisar implementá-lo por conta própria, usar um método muito simples. A versão de uma passagem do site da Wikipedia é muito fácil. Basicamente, você repete sua imagem binária e, quando encontra um pixel branco e ainda não está rotulado, usa um novo rótulo para esse objeto e começa com esse pixel.

O processo de rotular esse objeto com um rótulo é basicamente semelhante a um preenchimento de inundação. Este é o site da Wikipedia, as etapas internas 1-4 do algoritmo. Você começa com esse pixel rotulado e coloca todos os seus vizinhos em uma pilha (eles usaram um vetor ). Para um pixel na pilha, verifique se ele está em primeiro plano e se ainda não está identificado. Se você precisar rotulá-lo, coloque novamente todos os seus vizinhos na pilha. Faça isso até que sua pilha esteja vazia.

Então você continua sua digitalização através da imagem. Diferente da descrição no site Wiki, você não precisa remover um pixel da imagem original, apenas pula quando tem um valor diferente de 0 na imagem da etiqueta.


qual algoritmo de rotulagem ae você está referindo aqui?
vini

1
@vini, atualizei meu post. Phonon, obrigado. Usamos muitas medidas morfológicas e, especialmente, a compactação foi muito útil há um tempo atrás.

yup ótimo entendi :)
vini

6

Algumas idéias:

  1. Filtre as arestas com base na densidade das forças da aresta. Usando uma aproximação de um núcleo circular, encontre a resistência média da aresta (ou alguma outra medida). Passe pelas bordas iguais ou superiores ao valor do limite, defina como preto as bordas abaixo do limite.
  2. Use uma operação morfológica de "fechamento" (dilate seguido de erosão) para limpar a imagem e use um algoritmo de identificação de região (também conhecido como componente conectado, blobs) para encontrar todos os blobs. Filtre os dados do blob de acordo com o tamanho, a proporção do eixo maior para o menor, etc.
  3. Experimente o desfoque gaussiano, encontre um limite de binarização para segmentar a luz do escuro e depois filtre os blobs como descrito na etapa 2 acima. (Para uma rápida aproximação de um desfoque gaussiano, feche bem as pálpebras e feche os olhos para a imagem.)
  4. Experimente alguns filtros no Photoshop ou GIMP.

EDIT: após sua etapa de filtragem mediana, você está na maior parte do caminho. Bom trabalho! O item 2 que sugeri acima (fechar e depois etiquetar a região) é uma técnica para levá-lo ao resto do caminho.


yup vai tentar que vai deixar você saber o que acontece
382 vini

1

Você pode tentar contornos ativos. Embora talvez lento, ele pode lidar com casos complicados como este.

Ou você pode usar algum conhecimento prévio para processar esta imagem. Por exemplo, você sabe que a coisa do blob é 'grande' e 'conectada'. Assim, quando você conta o número de cada região conectada, pode encontrá-lo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.