Jak usunąć odblaski i jasność obrazu (Wstępne przetwarzanie obrazu)?

19

Mam obraz

wprowadź opis zdjęcia tutaj

Czy jest jakiś sposób na usunięcie jasnych białych plam? Proszę o pomoc dzięki

Edytować:

Po pracy z gaussianem, a następnie wyświetleniu za pomocą imagesc uzyskaj następujący wynik, który wyraźnie pokazuje jasne czerwone plamy Jak się ich pozbyć

wprowadź opis zdjęcia tutaj

Czerwony kanał:

wprowadź opis zdjęcia tutaj

Kanał zielony:

wprowadź opis zdjęcia tutaj

Niebieski kanał:

wprowadź opis zdjęcia tutaj

Edycja 2:

Wykrywanie defektów za pomocą filtra Gabor

wprowadź opis zdjęcia tutaj

Jego histogram:

wprowadź opis zdjęcia tutaj

Jak obliczyć odpowiednio odpowiedni próg.?

vini
źródło
Czy znana jest konfiguracja świateł?
nav
Nie, czy nie ma możliwości usunięcia ich do miejsc poprzez filtrowanie itp.?
vini
4
Ogólnie jest to źle postawiony problem. Masz zbyt wiele niewiadomych i będziesz musiał uciekać się do rozwiązania opartego na heurystyce. Powodzenia w wyborze odpowiedzi.
nav

Odpowiedzi:

19

Załóżmy, że obszary olśnienia są jedynymi nasyconymi obszarami obrazu. Wykrywanie można przeprowadzić, ustawiając próg intensywności (kod w Mathematica):

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

wprowadź opis zdjęcia tutaj

Następnie wystarczy tylko wymienić części obrazu wokół maski nasycenia (powiększenie maski odbywa się za pomocą funkcji morfologicznej Dilation). Malowanie za pomocą syntezy tekstur (za pomocą funkcji Inpaint) wydaje się działać dobrze w tym przykładzie, chociaż nie mogę go przetestować jako danych wejściowych do algorytmu wykrywania defektów:

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

wprowadź opis zdjęcia tutaj

Matthias Odisio
źródło
czy w Matlabie jest niepomalowana metoda?
vini
Przepraszam, nie znam odpowiedzi na to.
Matthias Odisio
Wykrywanie defektów jest idealne, jednak malowanie musi być wdrożone, ponieważ w MATLAB nie ma wbudowanej funkcji
vini
1
Cieszę się, że odpowiedź rozwiązała problem. Jeśli chodzi o malowanie w Matlabie, to prawdopodobnie dobrze pasuje do niezależnego pytania na temat SO. Zobacz stackoverflow.com/search?q=matlab+inainting na początek.
Matthias Odisio
2
Malowanie można wykonać za pomocą tego, co jest powszechnie znane jako „Mieszanie obrazu Poissona” tutaj , kod Matlab i przykłady tutaj .
Maurits
4

To może być nieco uproszczona odpowiedź, ale czy możesz po prostu przekroczyć próg? na przykład:

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

prowadzi do:

spłaszczony obraz

Oczywiście lepiej byłoby wybrać próg adaptacyjnie. Na przykład możesz spojrzeć na histogram obrazu:

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

histogram

i spróbuj na tej podstawie wybrać odpowiedni próg.

tdc
źródło
proszę sprawdzić moją edycję 2
dniu
@vini Spróbuj przyjrzeć się granicy, w której wyjaśniono 90% sygnału
tdc
mógłbym po prostu przekroczyć próg, ale moim ostatecznym celem jest wykrycie defektu .. co nie pomaga w żaden sposób, jeśli przekroczę próg
vini
3
Ale twoje pytanie brzmi: „Jak usunąć odblaski i jasność obrazu (Wstępne przetwarzanie obrazu)?” nie jak wykrywać defekty, co jest kolejnym (trudniejszym) pytaniem. Wydaje się, że @mrkulk poniżej udzielił prawie pełnej odpowiedzi na to pytanie również poniżej.
tdc
tak, moje pytanie brzmi: jak teraz wykrywać defekty, jednak blask utrudnia wynik
vini
2

wprowadź opis zdjęcia tutajBez informacji o oświetleniu jest to trudne. Jeśli jednak kształt obiektu na obrazie jest znany, można ustawić szablon kształtu białego blasku (gaussa) i wykonać przesuwane okno, aby znaleźć możliwe wykrycie blasku (a następnie mieszanie kolorów z sąsiedniego obszaru). Percepcyjnie wnioskujemy o kształcie 3D na podstawie obrazów przy użyciu cieniowania. Jeśli kształt z cieniowania może dać gradient powierzchni, możemy zrobić przesuwne okno i sprawdzić nasz szablon olśnienia w każdym miejscu.

Po wykryciu ostrych krawędzi: -

wprowadź opis zdjęcia tutaj

Zasadniczo nakładanie się (maksymalny obszar nakładania się) między obrazami nr 1 i nr 2 będzie wadą.

mrkulk
źródło
Opisując, co próbuję zrobić - stosuję filtr gabor, który jest najczęściej używany do segmentacji tekstur w celu znalezienia defektów w owocach, jednak olśnienie stanowi problem, ponieważ filtr wyświetla dwie białe plamy również jako potencjalną wadę, której idealnie nie chcę
vini
próbowałeś po prostu wziąć poszczególne kanały (z RGB lub YUV) i po prostu operować nimi?
mrkulk
Najbardziej błyszczącym obrazem jest ten na zielonym kanale. Jak mam go obsługiwać i poprawiać?
vini
Próbowałem zrobić obraz krawędzi (sprytny) z progiem 0,5. Zgodnie z oczekiwaniami nie widziałem blasku na obrazie. To powinno dać ci mocną pozycję w regionach, które NIE zawierają olśnienia.
mrkulk
jak pomoże mi to w tworzeniu obrazu bez olśnień?
vini
0

Moim zdaniem jest to problem widzenia maszynowego, w którym powinieneś kontrolować oświetlenie i mieć dobre pojęcie o maksymalnej jasności jasności pikseli bez olśnienia na obrazie. Wykrywanie defektów jest na ogół problemem widzenia maszynowego, a nie problemem widzenia komputerowego.

To, co widzimy w wyniku oświetlenia, to dodatek odbłysków światła i światła rozproszonego (plus pewna emisja, ale tutaj jest znikoma).

Element zwierciadlany to blask, na błyszczącej powierzchni, takiej jak to jabłko, to znacznie więcej niż odbicie rozproszone (> 10x)

Oznacza to, że jeśli wcześniej ustawisz oświetlenie, wzmocnienie i ekspozycję na rozproszonej powierzchni, możesz być pewien, że nic nie będzie nawet bliskie nasycenia. Tak więc stosowanie ustalonego progu jest tak naprawdę preferowanym rozwiązaniem, o ile udowodniono wystarczającą ilością danych, że „żaden piksel nie zawierający odblasku” byłby powyżej progu. Zasadniczo konfigurujesz warunki oświetlenia, a parametry kamery powodują, że klasyfikacja piksela staje się banalna, w tym przypadku wykonywana za pomocą prostego progu, a nie przez bardziej złożoną, wyuczoną maszynowo funkcję otaczających go pikseli.

Lubię podejście „vini”, nie ma potrzeby pokazywania płaszczyzn RGB. Po prostu działałby tutaj prosty próg skali szarości.

1- projektujesz warunki oświetlenia, a nie otoczenia

2 - uczyń zadanie klasyfikacyjne wyjątkowo trywialnym (próg)

3- zmierzyć funkcję

4 - porównać z tolerancją

Denis
źródło
0

Najpierw przekonwertuj na laboratoryjną przestrzeń kolorów, mapminmax, a następnie użyj pierwszego kanału jasności. To zmniejsza problemy z kolorem. Następnie użyj progu dla górnego 80% najjaśniejszego piksela. Sprawdź i przetestuj zanurzenie na histogramie, najlepszy próg znajduje się blisko dolnej krawędzi spadku. Jeśli nie ma lokalnej wartości minimalnej w tym regionie, twój obraz prawdopodobnie ma minimalne odbicia ...... Martin

Targowisko
źródło