Como remover o brilho e o brilho de uma imagem (pré-processamento de imagem)?

19

Eu tenho uma imagem

insira a descrição da imagem aqui

Existe alguma maneira de remover as manchas brancas brilhantes? Por favor ajude obrigado

Editar:

Depois de operar com gaussian e depois exibir usando imagesc, obtenha a seguinte saída, que mostra claramente os pontos vermelhos brilhantes Como faço para me livrar deles

insira a descrição da imagem aqui

Canal vermelho:

insira a descrição da imagem aqui

Canal verde:

insira a descrição da imagem aqui

Canal azul:

insira a descrição da imagem aqui

Edição 2:

Detecção de defeitos usando o filtro Gabor

insira a descrição da imagem aqui

Seu histograma:

insira a descrição da imagem aqui

Como calcular adaptativamente o seu limite apropriado.

vini
fonte
A configuração das luzes é conhecida?
nav
Não, na verdade, não há como removê-los dos pontos através da filtragem etc?
vini
4
Em geral, esse é um problema incorreto. Você tem muitas incógnitas e precisará recorrer a uma solução baseada em heurística. Boa sorte para escolher uma resposta.
nav

Respostas:

19

Vamos supor que as porções ofuscantes sejam as únicas áreas saturadas da imagem. A detecção pode ser realizada limitando a intensidade (código no Mathematica):

saturated = Binarize[ColorConvert[img, "Grayscale"], .9]

insira a descrição da imagem aqui

Então, precisamos apenas substituir as partes da imagem ao redor da máscara de saturação (o aumento da máscara é feito pela função morfológica Dilation). Pintar usando a síntese de textura (usando a função Inpaint) parece funcionar bem neste exemplo, embora eu não possa testá-lo como entrada para o seu algoritmo de detecção de defeitos:

Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

insira a descrição da imagem aqui

Matthias Odisio
fonte
existe um método inpaint no matlab?
vini
Desculpe, não sei a resposta para isso.
Matthias Odisio
A detecção de defeitos é perfeito no entanto inpainting tem de ser implementado como não há é construído em função no MATLAB
vini
1
Fico feliz que a resposta tenha resolvido o problema. Quanto à pintura no matlab, isso provavelmente é adequado para uma pergunta independente sobre SO. Veja stackoverflow.com/search?q=matlab+inpainting como um começo.
Matthias Odisio 26/01
2
A pintura pode ser feita com o que é comumente conhecido como Tutorial "Poisson image blending" aqui , código do Matlab e exemplos aqui .
Maurits
4

Esta pode ser uma resposta um pouco simplista, mas você poderia simplesmente limitar? por exemplo:

img = imread('daRNS.png');
imflat = img; 
imflat(img>150) = 150; 
imagesc(imflat)

resulta em:

imagem achatada

Obviamente, seria melhor selecionar o limiar de forma adaptativa. Por exemplo, você pode olhar para o histograma da imagem:

hist(double(img(:)),0:255)

histograma

e tente selecionar um limite apropriado com base nisso.

tdc
fonte
pls verificar minha edição 2
vini
olhar Tente @vini no cut-off, onde 90% do sinal é explicado
tdc
eu poderia apenas limite, mas meu objetivo final é de detecção de defeitos .. que não ajuda em qualquer forma, se limite i-lo
vini
3
Mas sua pergunta é "Como remover o brilho e o brilho de uma imagem (pré-processamento de imagem)?" não como detectar defeitos, que é outra questão (mais difícil). @mrkulk abaixo parece ter fornecido uma resposta quase completa para essa pergunta também abaixo.
tdc 26/01/12
sim, minha pergunta é que eu agora como detectar defeitos no entanto isso dificulta brilho o resultado
vini
2

insira a descrição da imagem aquiSem informações de iluminação, é difícil. No entanto, se a forma do objeto na imagem for conhecida, você poderá configurar um modelo de forma do brilho branco (gaussiano) e fazer uma janela deslizante para encontrar a possível detecção do brilho (seguido pela mistura de cores da área adjacente). Perceptivelmente, inferimos a forma 3D a partir de imagens usando sombreamento. Se a forma do sombreamento for capaz de fornecer o gradiente da superfície, poderíamos fazer uma janela deslizante e verificar nosso modelo de ofuscamento em cada local.

Após a detecção de borda inteligente: -

insira a descrição da imagem aqui

Basicamente, a sobreposição (área de sobreposição máxima) entre as imagens 1 e 2 será o defeito.

mrkulk
fonte
Descrevendo o que estou tentando fazer - estou aplicando um filtro gabor que é usado principalmente para segmentação de textura para encontrar defeitos em frutas, mas o brilho apresenta um problema, pois o filtro exibe as duas manchas brancas também como um defeito em potencial que eu não gostaria idealmente
vini 24/01
você tentou apenas pegar canais individuais (de RGB ou YUV) e apenas operar neles?
mrkulk
A imagem mais nítida é a do canal verde. Como opero e a corrijo?
vini 24/01
Tentei tirar a imagem da borda (sagaz) com um limite de 0,5. Como esperado, eu não vi o brilho na imagem. Isso deve fornecer um forte prévio para regiões que NÃO contêm brilho.
mrkulk
como vai me ajudar a produzir uma imagem sem brilho?
vini
0

Minha opinião é que esse é um problema de visão de máquina no qual você deve controlar a iluminação e ter uma boa idéia do brilho máximo de um brilho de pixel não ofuscante na imagem. A detecção de defeitos geralmente é um problema de visão de máquina e não um problema de visão de computador.

O que vemos como resultado da iluminação é uma adição de reflexos especulares e difusos da luz (mais alguma emissão, mas aqui é insignificante).

O componente especular é o brilho, numa superfície brilhante como esta maçã, é muito mais do que a reflexão difusa (> 10x)

Isso significa que, se você configurar sua iluminação, ganho e exposição antes disso, em uma superfície difusa, poderá ter certeza de que nada ficará nem perto de saturado. Portanto, usar um limite fixo é realmente a solução preferida aqui, desde que você tenha comprovado com dados suficientes que "nenhum pixel sem brilho" estaria acima do limite. Em essência, você está configurando as condições de iluminação e os parâmetros da câmera para que a classificação de um pixel se torne trivial, neste caso realizada por um limiar simples, em vez de uma função aprendida por máquina mais complexa dos pixels ao redor.

Eu gosto da abordagem do "vini", não há necessidade real de mostrar os planos RGB. Apenas um simples limiar de escala de cinza realmente funcionaria aqui.

1- você projeta as condições de iluminação, não o ambiente

2- tornar o trabalho de classificação extremamente trivial (limiar)

3- medir o recurso

4- comparar com tolerância

Denis
fonte
0

Converta primeiro no espaço de cores do laboratório, mapminmax, depois use o primeiro canal de luminosidade. Isso reduz os problemas de cores. Em seguida, use alguns limites no pixel com 80% de brilho mais alto. Verifique e teste se há uma queda no histograma, o melhor limite está próximo da parte inferior da queda. Se não houver um mínimo local nesta região, sua imagem provavelmente terá reflexos mínimos ...... Martin

Mart
fonte