2012-06-29 24 views
5

Chcę uzyskać wartości RGB obrazu w wielu warunkach oświetleniowych. Aby uzyskać jakiś neutralny scenariusz, chcę znormalizować wartości RGB z wartościami RGB niektórych predefiniowanych obrazów.Jak znormalizować wartość RGB z referencyjnymi wartościami RGB

Pozwól mi wyjaśnić. Mam 6 predefiniowanych obrazów i znam ich dokładne średnie wartości RGB. Teraz zrobię zdjęcie nieznanego obrazu w różnych warunkach oświetleniowych. Ja również wykonam zdjęcia predefiniowanych 6 zdjęć w tych samych warunkach. Teraz moim celem jest zdefiniowanie formuły normalizacyjnej poprzez porównanie znanych referencyjnych wartości rgb predefiniowanych obrazów z wartościami obliczonymi na podstawie obrazu z kamery. z tym parametrem normalizacji dokonam kalibracji wartości RGB nieznanego obrazu. Aby uzyskać średnią wartość RGB z nieznanego obrazu w neutralny sposób, niezależnie od warunków oświetlenia.

Jak mogę to łatwo osiągnąć w Javie.

Odpowiedz

0

W różnych sytuacjach oświetleniowych wystarczy liniowa korekcja RGB. Po prostu pomnóż każdą z wartości R, G, B przez stałą wyprowadzoną dla każdego kanału.

Jeśli był tylko jeden kolor odniesienia, byłby łatwy - pomnożyć przez kolor odniesienia i podzielić przez przechwycony kolor. Na przykład, jeśli twój kolor odniesienia był (240,201,120), ale obraz mierzony (250,190,150) - pomnożyłbyś kolor czerwony przez 240/250, zielony przez 200/190, a niebieski przez 120/150. Użyj tych samych stałych dla każdego piksela na obrazie.

Przy wielu kolorach do dopasowania musisz wyliczyć współczynniki korekcji, aby uzyskać pojedynczy zestaw stałych. Aby uzyskać jaśniejsze kolory, należy nadać większą wagę, na przykład w przypadku odniesienia (200, 150, 20) i pomiaru (190, 140, 10), próbujesz podwoić ilość koloru niebieskiego, która może być bardzo odległa. Najprostszą metodą byłoby zsumowanie wszystkich wartości referencyjnych i podzielenie przez sumę zmierzonych wartości.

+0

Witam Używam twojej metody. Teraz zamiast wartości RGB używam przestrzeni kolorów HSI i tylko normalizującej macierzy intensywności. –

+0

@P basak - innymi słowy, zasadniczo robisz to, co zaproponowałem, ale z HSI zamiast YUV.Innymi słowy po prostu chciałeś normalizacji czegoś bardzo podobnego do kanału jasności !!! – trumpetlicks

+0

@Mark - Więc zasadniczo to, co proponujesz, to średnie dla każdego kanału, a następnie użycie tych średnich jako współczynnika normalizacji dla nowych obrazów. – trumpetlicks

1

Czy robisz to, aby naprawdę znormalizować RGB, czy też próbujesz normalizować obrazy, aby miały podobną jasność. Ponieważ jeśli twoim celem jest po prostu jasność, to chciałbym przekonwertować na standard kolorów, który ma komponent jasności i normalizować tylko komponent jasności.

Stamtąd można wziąć nowy obraz w innym standardzie komponentu koloru i przekonwertować z powrotem na RGB, jeśli chcesz.

Kroki (ale nie w Javie):

1) Convert - RGBImage --> YUVImage 
2) Normalize RGBImage using the Y component 
3) Convert - Normalized(YUVImage) --> Normalized(RGBImage) 

W ten sposób można zaimplementować normalizację jasności używając algorithm described here.

ELSE, można uśrednić średnie dla każdego kanału i użyć ich jako licznika dla współczynników normalizacji dla nowych obrazów, obliczając każdy kanał osobno.

+0

Witam Chcę naprawdę normalizować rgb. –

+0

Chcę czegoś takiego jak kalibracja. Chcę obliczyć odchylenie od obrazów odniesienia i zastosować to odchylenie od nieznanego obrazu, aby uzyskać wartości neutralne. –

+0

Konwertowałem na przestrzeń kolorów HSI. Teraz szukam sposobu na znormalizowanie I indeksu z referencją. –