Como remover o ruído gaussiano de uma imagem sem destruir as bordas?

15

Qual é o melhor filtro para remover o ruído gaussiano sem destruir as bordas? Estou usando as imagens padrão do Lena com ruído gaussiano aditivo e quero fazer denoise antes de aplicar a difusão anisotrópica. Não quero filtrar mediana porque as bordas ficam borradas. Tentei a filtragem adaptativa, mas os resultados não foram satisfatórios.

Aviral Kumar
fonte
4
Mostre algum esforço, o que você tentou?
0x90
1
Na verdade, tenho uma imagem lena padrão corrompida com ruído gaussiano. Quero remover esse ruído antes de aplicar a difusão anisotrópica. Eu não quero ir para a filtragem mediana porque as bordas estão borradas. Dê alguma entrada.
Aviral Kumar 07/02
1
Não é realmente uma resposta, mas encontrei este link com uma variedade de papéis sobre esse assunto - tentando remover o ruído sem eliminar as informações de borda.
Spacey
1
Você pode postar algumas imagens e resultados, por favor, para que possamos entender melhor como seria um resultado (não) satisfatório? Por que você não executaria a difusão anisotrópica para suavizar a imagem, por exemplo?
Jonas

Respostas:

10

Você pode precisar considerar técnicas mais avançadas. Aqui estão dois artigos recentes sobre denoising de preservação de borda:

Nosso método é baseado em [análise de regressão de salto] e consiste em três etapas principais, descritas abaixo. Primeiro, os pixels de borda são detectados em todo o espaço de design por um detector de borda. Segundo, em uma vizinhança de um determinado pixel, uma curva linear por partes é estimada a partir dos pixels de borda detectados por um algoritmo simples, mas eficiente, para aproximar o segmento de borda subjacente nessa vizinhança. Finalmente, as intensidades de imagem observadas no mesmo lado do segmento de borda estimado, como o pixel fornecido, são calculadas em média pelo procedimento de suavização linear do núcleo local (cf., [35]), para estimar a intensidade real da imagem no pixel fornecido.

(Os modelos de regressão de salto incorporam descontinuidades usando funções de etapa. O autor principal possui um livro sobre esse assunto .)

Emre
fonte
2

Como ponto de partida, eu usaria uma técnica de retração não linear com algum tipo de transformação wavelet (embora eles não sejam específicos para transformações wavelet). As regras de retração são conceitualmente simples, rápidas e fáceis de implementar, enquanto produzem excelentes resultados.

A premissa é que o sinal desejado pode ser representado em algum domínio, de modo que a maior parte da energia seja concentrada em um pequeno número de coeficientes. Por outro lado, o ruído ainda está espalhado por todos os coeficientes (o que provavelmente é para AWGN). Você pode "encolher" os coeficientes - reduzindo seus valores de acordo com alguma regra não linear - de modo que o impacto no sinal seja pequeno comparado ao impacto no ruído.

As transformadas Wavelet são uma boa transformação para usar porque são boas para comprimir a energia em um pequeno número de coeficientes. Eu, pessoalmente, recomendo a DTCWT (Dual-tree complex wavelet transform) por suas propriedades adicionais agradáveis.

2 artigos muito bons sobre o assunto são este e este (ambos dos mesmos autores). Os artigos são um verdadeiro mimo em termos de legibilidade e clareza de explicação. (também há belas fotos de Lenna sendo denoised :)

Certamente existem artigos mais recentes, mas eles geralmente não acrescentam muita melhoria quantitativa às técnicas muito simples descritas nesses artigos.

Henry Gomersall
fonte
Esses documentos não tratam especificamente da preservação de bordas; eles são sobre denoising genérico de imagem.
Emre
As wavelets de poço são inerentemente boas em preservar bordas. A natureza das imagens naturais é que a maioria das informações salientes está nas bordas; portanto, discutir as bordas como um caso especial é supérfluo. Imagens naturais são definidas pelas bordas.
Henry Gomersall
É discutível se as wavelets convencionais são especialmente boas em preservar bordas. Esse problema é uma das motivações por trás da infinidade de extensões, incluindo barras de guia, feixes de luz, curvas e contornos.
Emre
De fato, as wavelets têm seus problemas, e foi por isso que sugeri usar algo diferente de wavelets de baunilha. Embora possa ser sugerido que eu tenho um viés em relação ao DTCWT, não é sem uma boa razão. Ambos os papéis mostram uma impressionante preservação das bordas. Como este artigo (veja as figuras 8 e 9 - comparando com as imagens barulhentas).
22612 Henry Gomersall
1

Embora todo desafio de processamento de sinal não exista uma solução adequada para todos, aqui está uma idéia:

  1. Como você está tentando preservar as bordas, descubra onde elas estão na imagem. Use um detector de borda inteligente para encontrar bordas na sua imagem.
  2. Dilatar / engordar os limites das bordas emitidas pela imagem (talvez 2 a 5 pixels de largura para cada borda) vamos chamar isso de "máscara"
  3. inverta a máscara.
  4. Aplique a máscara à sua imagem, ou seja, deixe apenas os itens que NÃO estão nas bordas.
  5. aplicar a técnica de remoção de gaussing
  6. use a máscara de aresta original para obter os valores de pixel da imagem onde existem arestas
  7. Coloque-os novamente na imagem de-gaussed

Como alternativa, você pode aplicar a técnica De-gaussing à imagem como um todo e apenas reintroduzir os pixels não-de-gaussed novamente na imagem.

CyberMen
fonte