Comment supprimer l'éblouissement et la luminosité d'une image (prétraitement d'image)?

19

J'ai une image

entrez la description de l'image ici

Existe-t-il un moyen d'éliminer les taches blanches brillantes? S'il vous plaît aider merci

Éditer:

Après avoir opéré avec gaussien puis affiché à l'aide d'imagesc, obtenez la sortie suivante qui montre clairement les taches rouges vives Comment puis-je m'en débarrasser

entrez la description de l'image ici

Canal rouge:

entrez la description de l'image ici

Circuit Vert:

entrez la description de l'image ici

Canal bleu:

entrez la description de l'image ici

Modifier 2:

Détection de défauts à l'aide du filtre Gabor

entrez la description de l'image ici

Son histogramme:

entrez la description de l'image ici

Comment calculer son seuil approprié de manière adaptative.?

vini
la source
La configuration des lumières est-elle connue?
nav
Non, en fait, n'y a-t-il aucun moyen de les retirer des taches par filtrage, etc.
vini
4
En général, c'est un problème mal posé. Vous avez trop d'inconnues et devrez recourir à une solution heuristique. Bonne chance pour choisir une réponse.
nav

Réponses:

19

Supposons que les parties éblouissantes sont les seules zones saturées de l'image. La détection peut être effectuée en seuillant l'intensité (code dans Mathematica):

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

entrez la description de l'image ici

Ensuite, il suffit de remplacer les parties de l'image autour du masque de saturation (l'agrandissement du masque se fait par la fonction morphologique Dilation). Inpainting utilisant la synthèse de texture (en utilisant la fonction Inpaint) semble bien fonctionner dans cet exemple, bien que je ne puisse pas le tester en entrée de votre algorithme de détection de défaut:

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

entrez la description de l'image ici

Matthias Odisio
la source
y a-t-il une méthode inpaint dans matlab?
vini
Désolé, je ne connais pas la réponse à cela.
Matthias Odisio
La détection des défauts est parfaite mais la peinture doit être implémentée car il n'y a pas de fonction intégrée dans MATLAB
vini
1
Je suis heureux que la réponse ait résolu le problème. Quant à l'inpainting dans matlab, c'est probablement bien adapté à une question indépendante sur SO. Voir stackoverflow.com/search?q=matlab+inpainting pour commencer.
Matthias Odisio
2
Le repiquage peut être fait avec ce que l'on appelle communément le «mélange d'images de Poisson» ici , le code Matlab et des exemples ici .
Maurits
4

Cela peut être un peu une réponse simpliste, mais pourriez-vous simplement seuil? par exemple:

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

résulte en:

image aplatie

Il serait évidemment préférable de sélectionner le seuil de manière adaptative. Par exemple, vous pouvez regarder l'histogramme de l'image:

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

histogramme

et essayez de sélectionner un seuil approprié en fonction de cela.

tdc
la source
pls vérifier mon montage 2
vini
@vini Essayez de regarder la coupure où 90% du signal est expliqué
tdc
je pourrais juste seuil mais mon objectif ultime est de détection de défauts .. ce qui n'aide en rien si je le seuil
vini
3
Mais votre question est "Comment supprimer l'éblouissement et la luminosité d'une image (prétraitement d'image)?" pas comment détecter les défauts, ce qui est une autre question (plus difficile). @mrkulk ci-dessous semble avoir également fourni une réponse presque complète à cette question.
tdc
oui ma question est que maintenant je détecte les défauts mais cet éblouissement entrave le résultat
vini
2

entrez la description de l'image iciSans informations d'éclairage, c'est difficile. Cependant, si la forme de l'objet dans l'image est connue, vous pouvez configurer un modèle de forme de l'éblouissement blanc (gaussien) et faire une fenêtre coulissante pour trouver une détection possible de l'éblouissement (suivie d'un mélange des couleurs de la zone adjacente). Sur le plan de la perception, nous déduisons la forme 3D à partir d'images à l'aide d'un ombrage. Si la forme de l'ombrage est capable de donner le gradient de surface, nous pourrions faire une fenêtre coulissante et vérifier notre modèle d'éblouissement à chaque emplacement.

Après détection de bord rusé: -

entrez la description de l'image ici

Fondamentalement, le chevauchement (zone de chevauchement maximale) entre l'image # 1 et # 2 sera le défaut.

mrkulk
la source
Décrire ce que j'essaie de faire - j'applique un filtre gabor qui est principalement utilisé pour la segmentation de la texture pour trouver des défauts dans les fruits, mais l'éblouissement pose un problème car le filtre affiche également les deux points blancs comme un défaut potentiel que je ne souhaite pas idéalement
vini
avez-vous essayé de prendre des canaux individuels (à partir de RVB ou YUV) et de simplement les utiliser?
mrkulk
L'image la plus brillante est celle dans le canal vert. Comment puis-je l'utiliser et la corriger?
vini
J'ai essayé de prendre l'image de bord (rusé) avec un seuil de 0,5. Comme prévu, je n'ai pas vu les reflets sur l'image. Cela devrait vous donner une forte priorité pour les régions qui ne contiennent PAS d'éblouissement.
mrkulk
comment cela m'aidera-t-il à produire une image sans éblouissement?
vini
0

Mon avis est qu'il s'agit d'un problème de vision industrielle dans lequel vous devez contrôler l'éclairage et avoir une bonne idée de la luminosité maximale d'une luminosité de pixel non éblouissante dans l'image. La détection des défauts est généralement un problème de vision industrielle plutôt qu'un problème de vision par ordinateur.

Ce que nous voyons à la suite de l'éclairage est un ajout de réflexions de lumière spéculaires et diffuses (plus une certaine émittance mais son négligeable ici).

La composante spéculaire est l'éblouissement, sur une surface brillante comme cette pomme, c'est bien plus que la réflexion diffuse (> 10x)

Cela signifie que si vous configurez votre éclairage, gain et exposition avant cela, sur une surface diffuse, vous pouvez être sûr que rien ne sera même proche de saturé. Donc, utiliser un seuil fixe est en fait la solution préférée ici, tant que vous avez prouvé avec suffisamment de données qu '"aucun pixel ne contenant pas d'éblouissement" ne serait supérieur au seuil. Essentiellement, vous configurez les conditions d'éclairage et les paramètres de la caméra de telle sorte que la classification d'un pixel devient triviale, dans ce cas effectuée par un simple seuil, plutôt que par une fonction d'apprentissage machine plus complexe des pixels autour.

J'aime l'approche de "vini", pas vraiment besoin de montrer les plans RVB. Un simple seuil en niveaux de gris fonctionnerait réellement ici.

1- vous concevez les conditions d'éclairage, pas ambiantes

2- rendre le travail de classification extrêmement trivial (seuillage)

3- Mesurer la fonction

4- comparer à la tolérance

Denis
la source
0

Convertissez d'abord en espace colorimétrique de laboratoire, mapminmax, puis utilisez le premier canal de luminosité. Cela réduit les problèmes de couleur. Ensuite, utilisez un seuil sur les 80% de pixels les plus brillants. Vérifiez et testez un creux dans l'histogramme, le meilleur seuil est près du bas du creux. S'il n'y a pas de min local dans cette région, votre image a probablement des reflets minimes ...... Martin

Marché
la source