[JAVA] Normalizacja i Wyrównywanie Histogramu RGB w BufferedImage

0

Witam.
Pisze projekt w javie (SWING, BufferedImage, Graphics2d) o treści:
Wyrównywanie i normalizacja histogramu dla 24-bitowych kolorowych map bitowych:

  • rysowanie histogramu RGB i jasności dla wskazanego prostokąta obrazu
  • wybór kanałów (RGB) których ma dotyczyć operacja
  • regulacja intensywności działania efektu (w procentach 0-100)
  • ogarniczenie obszaru działania filtra dla wskazanej elipsy (opisanej prostokątem)

Napisałem już:

  • wczytywanie obrazka, sprawdzenie czy obraz jest 24 bitowy, zapis do pliku, normalizacja całego obrazka, wyrównywanie całego obrazka, rysowanie osobnego histogramu RGB dla każdej składowej.
    Normalizacja działa na zasadzie wzoru (osobno dla każdego kanału): Pn(x,y)=(255/(Hmax-Hmin))*(P(x,y)-Hmin),

gdzie:
P(x, y) – wejściowy kolor piksela
Pn(x, y) – wynikowy kolor piksela
Hmin – minimalna wartość histogramu
Hmax – maksymalna wartość histogramu

Wyrównywanie działa na podstawie wyliczenia tablicy LUT.

I tu pojawia się problem. Nie mogę znaleźć informacji odnośnie procentowej regulacji nasycenia efektów, a znalezione i wykorzystane przeze mnie materiały pozwalają jedynie na maksymalne wyrównywanie, bądź też maksymalną normalizację histogramu.

Kolejne pytanie, na które też nie mogę znaleźć odpowiedzi, to w jaki sposób narysować histogram jasności. Z tego co wywnioskowałem, chodzi tu o pobranie składowej RGB dla każdego pixela i przeliczenie jej na konkretną wartość int, zsumowanie wartości pixeli i naniesienie na wykres. W jaki sposób to zrobić, kiedy pomocą funkcji getRGB() otrzymujemy wartość na której zakodowane są wszystkie 3 składowe? W jaki sposób przeliczyć te wartości na jedną wartość typu int, by nanieść to na wykres?

Proszę o pomoc.

0

http://en.wikipedia.org/wiki/Luma_(video)
Tu jest przykładowy wzorek na liczenie luminancji.

Więcej wzorków zna pewnie polaczek17, autor PhotoYebatora vel PhotoPOL :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1