[Grafika 2d, bitmapy] Wyrównywanie i normalizacja histogramu

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

chodzi ci o przemnozenie nowej jasnosci piksela przez oryginalny piksel?

0

Nie, chodzi mi o:

  1. Procentowa regulacja nasycenia efektu (normalizacji i wyrównania), czyli że np pod histogramem jest pasek, przesuwamy pasek i histogram normalizuje się nie od razu całkowicie tylko stopniowo.
  2. Pobranie składowej RGB (wartość na której zakodowane są składowe RGB) i przeliczenie ich na jedną wartość typu integer, co umożliwiłoby narysowanie zbiorczego histogramu jasności.
0

Kurcze, zdawało mi się że już odpowiedziałem na tego posta....

W każdym razie co do drugiego problemu to tu masz przykładowy wzorek na policzenie postrzeganej jasności: http://en.wikipedia.org/wiki/YCbCr#JPEG_conversion

A co do pierwszego problemu to może napisz do usera polaczek17, on zrobił megawyjątkowy program PhotoYebator (AKA PhotoPOL) z mnóstwem funkcji :)

0

predzej niech sprecyzuje pytanie bo ja nie kumam o co mu chodzi

0

Ostatnio, przy okazji uczenia się algebry do OpenGLa, natknąłem się na dwie stronki:
http://www.songho.ca/dsp/luminance/luminance.html
http://www.songho.ca/dsp/histogram/histogram.html

Jak zrobić siłę efektu 0 % - 100 %? Ja bym po prostu blendował starą wartość piksela z nową wartością piksela. Tzn:
ostatecznaWartość = siła * nowaWartość + (1 - siła) * staraWartość;

0

..3 Proponuję nauczyć się czytać ze zrozumieniem.

Rozmawiałem z wykładowcą odnośnie mojego problemu, myślę że mam już rozwiązanie.

0

wiesz bardziej bys to sprecyzowal to bys juz dawno mial gotowy kod ale nie to nie :D zuj jaja

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