[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

[FFTW] Problem ze zmiennoprzecinkowymi wartosciami FFT

Damian Sobota

3/12/2007 11:47:00 PM

Witam.

W swoim programie licze FFT dla czarnobia3ego obrazu za pomoc? biblioteki
FFTW. Po wyliczeniu FFT otrzymuje warto?ci w double'ach. Chcia3bym móc
wy?wietlia obraz transformaty, jednak?e nie wiem, jak przeskalowaa warto?ci
zmiennoprzecinkowe typu double do przedzia3u liczb ca3kowitych [0,255], który
reprezentuje odcienie szaro?ci.

Jakie? pomys3y? (Od razu mówie, ?e dzielenie, przez DBL_MAX z float.h czy tym
podobne historie nie dzia3aj? ;) -- tu trzeba sprytniejszej metody).
Podejrzewam, ?e wiele osób sie z tym ju? zetkne3o i wie jak temu zaradzia.

Pozdrawiam,
Damian Sobota.

--
Wys3ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta....
6 Answers

Damian Sobota

3/13/2007 1:59:00 AM

0

Damian Sobota <damsob@NOSPAM.gazeta.pl> napisa3(a):
> Jakie? pomys3y?

Dobra. Na te chwile wystarcza mi proste rzutowanie do typu unsigned char. Nie
jest to mo?e rozwi?zanie idealne, ale jako? dzia3a.

> (Od razu mówie, ?e dzielenie, przez DBL_MAX z float.h czy tym
> podobne historie nie dzia3aj? ;) -- tu trzeba sprytniejszej metody).

A skalowanie przez podzielenie przez DBL_MAX i pomno?enie przez 255 nie
dzia3a3o, bo w czasie tego skalowania zbyt wiele informacji by3o tracone i w
efekcie obraz by3 czarny.

S? jakie? inne (lepsze!) metody?

(BTW, gwoli ?cis3o?ci, ja wy?wietlam cze?a rzeczywist? otrzymanej transformaty
-- to tak gdyby kto? pyta3.)


Dobranoc.


DS.

--
Wys3ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta....

Tomek

3/13/2007 7:15:00 AM

0

Damian Sobota napisa3(a):
> Witam.
>
> W swoim programie licze FFT dla czarnobia3ego obrazu za pomoc? biblioteki
> FFTW. Po wyliczeniu FFT otrzymuje warto?ci w double'ach. Chcia3bym móc
> wy?wietlia obraz transformaty, jednak?e nie wiem, jak przeskalowaa warto?ci
> zmiennoprzecinkowe typu double do przedzia3u liczb ca3kowitych [0,255], który
> reprezentuje odcienie szaro?ci.

a jakie warto?ci podajesz do FFTW. Double?
Najlepiej to by by3o wybraa warto?a max i warto?a min z tego co
otrzymujesz a nastepnie od wszystkich warto?ci odj?a warto?a min, masz
warto?ci od [0, max - min] co ci ma odpowiadaa warto?ciom [0,255] i tu
juz sobie mo?esz wyliczya "wspó3czynnik skalowania" sc = 255/ (max -
min) a nastepnie wszystkie warto?ci mno?ysz przez ten wspó3czynnik. Jak
czego? nie pomiesza3em to powinno to dzia3aa.

Pawel

3/13/2007 9:14:00 AM

0

Witam.

Skoro juz mowa o FFT, to podepne sie pod watek.

Otoz mam napisac program do umieszczania znakow wodnych w obrazkach (w
szczegolnosci tekstu). Znalazlem taki algorytm:

1) Obraz dzielony jest na bloki o rozmiarze 8x8 punktów.
2) Dla każdego bloku wyznaczane jest FFT. WspóÅ?czynniki FFT z
bloku sÄ? sortowane w kolejnoÅ?ci malejÄ?cej (wg moduÅ?u)
3)Bit znaku wodnego jest umieszczany we wspóÅ?czynniku FFT, który
posiada najwiÄ?kszy moduÅ? (z pominiÄ?ciem skÅ?adowej staÅ?ej DC),
zgodnie z zależnoÅ?ciÄ?: Y(i)=X(i)*(1+α*W(i)), gdzie α=0.5

W ten sposób zmianie ulega czÄ?Å?Ä? rzeczywista i urojona
wspóÅ?czynnika FFT.

Każdy znak z ciÄ?gu tekstowego rozkÅ?adany jest na 8 bit zgodnie ze
swojÄ? reprezentacjÄ? w kodzie ASCII, każdy bit umieszczany jest
niezależnie.


I teraz moje pytania:
- co to jest W(i)
- co w tym przypadku oznacza: skladowa stala DC

Pozdrawiam.

Jacek Czerwinski

3/13/2007 9:21:00 AM

0

Dnia Mon, 12 Mar 2007 23:46:40 +0000 (UTC), Damian Sobota napisa3(a):

> Witam.
>
> W swoim programie licze FFT dla czarnobia3ego obrazu za pomoc? biblioteki
> FFTW. Po wyliczeniu FFT otrzymuje warto?ci w double'ach. Chcia3bym móc
> wy?wietlia obraz transformaty, jednak?e nie wiem, jak przeskalowaa warto?ci
> zmiennoprzecinkowe typu double do przedzia3u liczb ca3kowitych [0,255], który
> reprezentuje odcienie szaro?ci.
>
> Jakie? pomys3y? (Od razu mówie, ?e dzielenie, przez DBL_MAX z float.h czy tym
> podobne historie nie dzia3aj? ;) -- tu trzeba sprytniejszej metody).
> Podejrzewam, ?e wiele osób sie z tym ju? zetkne3o i wie jak temu zaradzia.
Ostatni raz FFT dotyka3em na koncu studiów, ale...
obi3o mi sie o uszy (nie potrafie podaa konkretów), ?e sprzetowe
implementacje szybkiego Fouriera robi sie w typach sta3oprzecinkowych
(ca3kowitych), jako? tam przeskalowanych. Zas3yszane...

Seweryn Habdank-Wojewódzki

3/13/2007 10:29:00 AM

0

Witam

Tomek wrote:

>> W swoim programie licze FFT dla czarnobia3ego obrazu za pomoc? biblioteki
>> FFTW. Po wyliczeniu FFT otrzymuje warto?ci w double'ach. Chcia3bym móc
>> wy?wietlia obraz transformaty, jednak?e nie wiem, jak przeskalowaa
>> warto?ci zmiennoprzecinkowe typu double do przedzia3u liczb ca3kowitych
>> [0,255], który reprezentuje odcienie szaro?ci.
>
> a jakie warto?ci podajesz do FFTW. Double?
> Najlepiej to by by3o wybraa warto?a max i warto?a min z tego co
> otrzymujesz a nastepnie od wszystkich warto?ci odj?a warto?a min, masz
> warto?ci od [0, max - min] co ci ma odpowiadaa warto?ciom [0,255] i tu
> juz sobie mo?esz wyliczya "wspó3czynnik skalowania" sc = 255/ (max -
> min) a nastepnie wszystkie warto?ci mno?ysz przez ten wspó3czynnik. Jak
> czego? nie pomiesza3em to powinno to dzia3aa.

To zale?y co OP chce uzyskaa, bo IMHO to jest kiepskie rozwi?zanie, je?eli
ten obrazek FFT ma bya ogl?dalny.

Je?li ma bya ogl?dalny to lepiej pos3u?ya sie 20 * log10 ( ComplexAbs (
fft ) ) wyra?one w decybelach.

Je?li to ma bya dalej transformowalne to lepiej nic nie ruszaa, bo powstan?
grube b3edy numeryczne.

Pozdrawiam.

--
|\/\/|   Seweryn Habdank-Wojewódzki
\/\/

mgk

3/13/2007 12:39:00 PM

0

Na blockach 8x8 element [0][0] jest od 0 do 2040, a reszta od -1020 do
1020.