Wie entferne ich Blendung und Helligkeit in einem Bild (Bildvorverarbeitung)?

19

Ich habe ein Bild

Bildbeschreibung hier eingeben

Gibt es eine Möglichkeit, die hellen weißen Flecken zu entfernen? Bitte helfen Sie danke

Bearbeiten:

Nach dem Betrieb mit Gauß und der Anzeige mit Bildernc erhalten Sie die folgende Ausgabe, die die hellen roten Flecken deutlich zeigt. Wie entferne ich sie?

Bildbeschreibung hier eingeben

Roter Kanal:

Bildbeschreibung hier eingeben

Grüner Kanal:

Bildbeschreibung hier eingeben

Blauer Kanal:

Bildbeschreibung hier eingeben

Bearbeiten 2:

Fehlererkennung mittels Gabor-Filter

Bildbeschreibung hier eingeben

Sein Histogramm:

Bildbeschreibung hier eingeben

Wie berechnet man adaptiv die passende Schwelle?

vini
quelle
Ist der Aufbau der Lichter bekannt?
nav
Nein, gibt es keine Möglichkeit, diese durch Filtern usw. zu entfernen?
Vini
4
Im Allgemeinen ist dies ein schlecht gestelltes Problem. Sie haben zu viele Unbekannte und müssen auf eine heuristische Lösung zurückgreifen. Viel Glück bei der Beantwortung.
nav

Antworten:

19

Angenommen, Blendungsbereiche sind die einzigen gesättigten Bereiche im Bild. Die Erkennung kann durch Schwellwertbildung der Intensität erfolgen (Code in Mathematica):

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

Bildbeschreibung hier eingeben

Dann müssen wir nur die Teile des Bildes um die Sättigungsmaske herum ersetzen (die Vergrößerung der Maske erfolgt durch die morphologische Funktion Dilation). Das Inpainting mithilfe der Textur-Synthese (mithilfe der Funktion Inpaint) scheint in diesem Beispiel gut zu funktionieren, obwohl ich es nicht als Eingabe für Ihren Fehlererkennungsalgorithmus testen kann:

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

Bildbeschreibung hier eingeben

Matthias Odisio
quelle
Gibt es eine Inpaint-Methode in Matlab?
Vini
Entschuldigung, ich kenne die Antwort darauf nicht.
Matthias Odisio
Die Fehlererkennung ist perfekt, es muss jedoch ein Inpainting implementiert werden, da in MATLAB
vini
1
Ich bin froh, dass die Antwort das Problem gelöst hat. Das Inpainting in Matlab eignet sich wahrscheinlich gut für eine unabhängige Frage zu SO. Sehen Sie sich zunächst stackoverflow.com/search?q=matlab+inpainting an.
Matthias Odisio
2
Das Malen kann mit dem Tutorial "Poisson image blending" hier , Matlab-Code und Beispielen hier durchgeführt werden .
Maurits
4

Dies mag eine etwas vereinfachende Antwort sein, aber könnten Sie nur eine Schwelle setzen? z.B:

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

Ergebnisse in:

abgeflachtes Bild

Es wäre natürlich besser, die Schwelle adaptiv zu wählen. Sie können sich beispielsweise das Bildhistogramm ansehen:

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

Histogramm

und versuchen Sie, darauf basierend einen geeigneten Schwellenwert auszuwählen.

tdc
quelle
Bitte überprüfen Sie meine Bearbeitung 2
vini
@vini Schauen Sie sich den Cutoff an, in dem 90% des Signals erklärt werden
tdc
Ich könnte nur Schwelle, aber mein ultimatives Ziel ist die Erkennung von Defekten .. was in keiner Weise hilft, wenn ich es Schwelle
vini
3
Ihre Frage lautet jedoch "So entfernen Sie die Blendung und Helligkeit in einem Bild (Bildvorverarbeitung)". nicht, wie man Fehler erkennt, was eine andere (schwierigere) Frage ist. @mrkulk scheint auch unten eine fast vollständige Antwort auf diese Frage geliefert zu haben.
TTC
ja meine frage ist, dass ich jetzt, wie man defekte erkennt, aber diese blendung behindert das ergebnis
vini
2

Bildbeschreibung hier eingebenOhne Lichtinformation ist es schwierig. Wenn jedoch die Form des Objekts im Bild bekannt ist, können Sie eine Formvorlage für den weißen Glanz (Gauß) einrichten und ein Schiebefenster ausführen, um einen möglichen Glanz zu erkennen (gefolgt von einer Farbüberblendung aus dem angrenzenden Bereich). Perzeptiv leiten wir die 3D-Form mithilfe von Schattierungen aus Bildern ab. Wenn die Form der Schattierung den Oberflächengradienten ergeben kann, können wir ein Schiebefenster erstellen und an jeder Stelle unsere Blendungsschablone überprüfen.

Nach der Erkennung einer scharfen Kante: -

Bildbeschreibung hier eingeben

Grundsätzlich ist die Überlappung (maximaler Überlappungsbereich) zwischen Bild Nr. 1 und Nr. 2 der Defekt.

mrkulk
quelle
Beschreiben, was ich versuche - Ich verwende einen Gabor-Filter, der hauptsächlich zur Segmentierung von Texturen verwendet wird, um Fehler in Früchten zu finden. Die Blendung stellt jedoch ein Problem dar, da der Filter die beiden weißen Flecken auch als potenziellen Fehler anzeigt, den ich nicht idealerweise möchte
Vini
Haben Sie versucht, nur einzelne Kanäle (von RGB oder YUV) zu nehmen und sie nur zu bearbeiten?
Mrkulk
Das strahlendste Bild ist das im grünen Kanal. Wie bediene und korrigiere ich es?
Vini
Ich habe versucht, das Kantenbild (canny) mit einer Schwelle von 0,5 aufzunehmen. Wie erwartet habe ich den Glanz im Bild nicht gesehen. Dies sollte Ihnen eine starke Priorität für Regionen geben, die KEINE Blendung enthalten.
Mrkulk
Wie kann ich ein blendfreies Bild erzeugen?
Vini
0

Meiner Meinung nach handelt es sich hierbei um ein Bildverarbeitungsproblem, bei dem Sie die Beleuchtung steuern und eine gute Vorstellung von der maximalen Helligkeit eines blendfreien Pixels im Bild haben sollten. Die Fehlererkennung ist im Allgemeinen eher ein Bildverarbeitungsproblem als ein Bildverarbeitungsproblem.

Was wir als Ergebnis der Beleuchtung sehen, ist eine Hinzufügung von spiegelnden und diffusen Lichtreflexionen (plus einer gewissen Emission, die hier jedoch vernachlässigbar ist).

Die spiegelnde Komponente ist die Blendung, auf glänzender Oberfläche wie bei diesem Apfel ist es viel mehr als die diffuse Reflexion (> 10x)

Das bedeutet, wenn Sie zuvor Ihre Beleuchtung, Verstärkung und Belichtung auf einer diffusen Oberfläche einstellen, können Sie sicher sein, dass nichts auch nur annähernd gesättigt ist. Daher ist die Verwendung eines festen Schwellenwerts die bevorzugte Lösung, sofern Sie mit genügend Daten nachgewiesen haben, dass "keine nicht blendenden Pixel" über dem Schwellenwert liegen. Im Wesentlichen richten Sie die Beleuchtungsbedingungen und Kameraparameter so ein, dass die Klassifizierung eines Pixels trivial wird. In diesem Fall erfolgt die Klassifizierung durch einen einfachen Schwellenwert und nicht durch eine komplexere maschinell erlernte Funktion von Pixeln in der Umgebung.

Ich mag den Ansatz von "vini", keine Notwendigkeit, die RGB-Ebenen zu zeigen. Hier würde eigentlich nur eine einfache Graustufenschwelle funktionieren.

1- Sie bestimmen die Lichtverhältnisse, nicht die Umgebungsbedingungen

2- machen den Klassifizierungsjob extrem trivial (Schwellenwert)

3- Messen Sie die Funktion

4- Vergleiche mit Toleranz

Denis
quelle
0

Zuerst in den Laborfarbraum konvertieren, Mapminmax, dann den ersten Helligkeitskanal verwenden. Das reduziert die Farbprobleme. Verwenden Sie dann einen Schwellenwert für das oberste 80% hellste Pixel. Überprüfen und testen Sie, ob das Histogramm fehlerhaft ist. Der beste Schwellenwert befindet sich in der Nähe des Grunds des Fehlers. Wenn es in dieser Region kein lokales Minimum gibt, weist Ihr Bild wahrscheinlich minimale Reflexionen auf. Martin

Mart
quelle