[C++] FFT na bitmapie

0

Witam.
Muszę wyświetlić wykres widma fragmentu pliku bmp (np. początkowe 1000 sampli) za pomocą szybkiej transformacji Fouriera. Czy są jakieś biblioteki do tego może? Ma ktoś jakieś sugestie? Proszę o pomoc. Pozdrawiam

0

http://www.alglib.net/

to jest proste w obsłudze, 3 linijki kodu + dorzucenie źródeł do projektu

0

BASS ma dwuwymiarowe FFT? a jeśli tak, to PO CO w bibliotece do dźwięku?

0

W alglib jest tylko jednowymiarowa fft. A jak załadować próbki do tablicy? Wiem jak odczytać informację z nagłówka. Ale gdzie są zapisane pixele i w jakiej formie?

0

BASS chyba tez ma tylko jednowymiarową

0

w alglib 1d: (using namespace alglib)
real_1d_array wejscie;
complex_1d_array wyjscie;
double tab[4] = {...};
wejscie.setcontent(4, tab);
fftr1d(wejscie,wyjscie);

wyjscie uzywasz jak zwyklej tablicy, z tym ze elementy sa strukturami typu alglib::complex ktora posiada pola double x,y;

0

Mam tablice 1000 na 3. W niej 1000 pixeli w postaci RGB. Potrzebuję wyświetlić wykres widma. Która biblioteka da radę?

0

to co to jest, jedna linia pikseli?

widmo dwuwymiarowego obrazka jest dwuwymiarowe. to nie to samo co widmo każdej z linii czy z kolumn z osobna.

co do RGB - to raczej należy bitmapę rozdzielić na trzy osobne kanały R, G i B i traktować je oddzielnie.

w przypadku 1D (czy też 3 x 1D) można teoretycznie użyć dowolnej biblioteki, tylko że biblioteki wyspecjalizowane w dźwięku będą ci to przeliczać na herce i decybele, co niekoniecznie będzie miało sens.

w przypadku 2D (albo 3 x 2D) robi się transformację kolejno liniami (czyli można użyć funkcji do jednowymiarowego FFT), a potem na takim pośrednim obrazku znowu kolejno kolumnami. można też najpierw kolumny a potem linie.

0

Ok czyli mam trzy tablice (R,G,B) 100x10. Robię najpierw na każdym wierszu transformacje a potem na każdej kolumnie. I tak z trzema tablicami. Po wszystkim mam je połączyć ?

0

mam wrażenie, że sam nie wiesz co chcesz zrobić.

0

:) coś w tym jest... Mam za zadanie przygotować aplikację dekodującą informacje zawarte w nagłówku (1) pliku graficznego (2) pliku dźwiękowego, w zadanym formacie (np. wav, jpg, itp., do wyboru).
Pokozać atrybuty pliku (rozmiar, głębię koloru, częstotliwość próbkowania, itp.). Następnie wyświetlić wykres widma fragmentu pliku (np. początkowe 1000 sampli) za pomocą szybkiej transformaty fouriera (FFT). Z pierwszą częścią nie mam problemu. Mam wczytane wszystkie informację z nagłówka i dane. Nie wiem jak zrobić część drugą... Byłbym bardzo wdzięczny za jakieś sugestię.

0

o ile dla dźwięku widmo mówi o częstotliwościach jakie składają się na dźwięk o tyle dla obrazu ciężko powiedzieć co ono ma przedstawiać. W zasadzie wg. mnie jeśli jest to zadanie na studiach to możesz wyświetlić cokolwiek (np. randoma) i w dowolnym fragmencie kodu użyć jakiejś funkcji co liczy fft z czegokolwiek :P

0

o ile dla dźwięku widmo mówi o częstotliwościach jakie składają się na dźwięk o tyle dla obrazu ciężko powiedzieć co ono ma przedstawiać.
mówi to samo: przedstawia zbiór amplitud i faz poszczególnych częstotliwości fal składowych. tylko ponieważ sygnał jest dwuwymiarowy, to i fale są dwuwymiarowe (ściślej: są funkcjami liczb zespolonych a nie rzeczywistych).

PS. bardzo fajny artykuł:
http://homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm
tutaj wpływ modyfikacji widma na oryginalny obraz:
http://homepages.inf.ed.ac.uk/rbf/HIPR2/freqfilt.htm

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