CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [bcb] Szybka transformacja Fouriera

[bcb] Szybka transformacja Fouriera

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

[bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » środa, 12 września 2012, 16:35

Witam
błagam o pomoc
potrzebuje kod Szybka transformacja Fouriera 2-wymiarowej. Potrzebuje to do mojego programu do pracy dyplomowej który mam oddac w piątek a promotor stwierdził że dobrze by było jakby bylo:D czyli jednym słowem potrzebuje wstawić do swojego programu Szybka transformacja Fouriera.
Mogą być jakieś podpowiedzi
Błagam.
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows 7Chrome

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez Cyfrowy Baron » środa, 12 września 2012, 17:09

Implementacja FFT (FFTW) w języku C/C++ w Visual Studio

Co prawda dla Visula Studio, ale język ten sam, więc nie będzie problemów. Ja z algorytmów jestem kiepski więc nie rozgryzę tego.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » środa, 12 września 2012, 17:36

ja wiem że dla VS jest szczególnie jak się podepnie biblioteki. Ja w borlandzie z 5 dni próbowałem podpiąć OpenCV aby mi działało i się nie udało. Dlatego cały program mam ręcznie napisany, każda najmniejsza czynność :X Heh a istnieje jakaś możliwość abym napisał to w Visualu potem podpoił pod borlanda i podczas wymaganej czynności aby zrobiła się fft i odesłała wynik do borlanda:X
kurde muszę kombinować i to na "chama" bo chce się obronić teraz. Szukałem jakiś "gotowych kodów" w necie dla fft ale ciężko. są w c dość przystępne ( o ile to może się nazywać przystępne bo ja ich nie rozumiem). może da się do borlanda jakoś kod z c podpiąć jako biblioteka. odwołać się do niej wysłać to co potrzeba odebrać wynik i będzie hulać??
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows 7Chrome

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez Cyfrowy Baron » środa, 12 września 2012, 18:12

Z Visuala nie podepniesz bo biblioteki nie będą pasować. Z c możesz przepisać na c++, nie powinno być problemu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez polymorphism » środa, 12 września 2012, 19:50

Dlaczego nie podepnie? Tam są jakieś DLL-ki do ściągnięcia, włącznie z tym jak wygenerować biblioteki importów dla nich na podstawie plików .def w IDE borlanda. Oczywiście trzeba jeszcze ściągnąć nagłówki i odpowiednio ustawić ścieżki.

--- dodane ---

Chyba wystarczy jeden nagłówek do tych bibliotek -> szukać fftw3.h
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez Cyfrowy Baron » środa, 12 września 2012, 21:02

Próba wygenerowania plików lib w oparciu o pliki def kończy się niepowodzeniem:


Invalid character in DEF file



Gdy zmieniłem wpis w pliku libfftw3-3.def z: LIBRARY libfftw3-3.dll na LIBRARY "libfftw3-3.dll", udało się utworzyć plik libfftw3-3.lib.
W ten sam sposób należałoby postąpić z plikami: libfftw3f-3.def; libfftw3l-3.def - zmiana wpisu trzeba po prostu ująć nazwę biblioteki w cudzysłowy.

użyłem polecenia:

KOD text:     UKRYJ  
implib libfftw3-3.lib libfftw3-3.def


polymorphism napisał(a):Chyba wystarczy jeden nagłówek do tych bibliotek -> szukać fftw3.h


Tylko jeden jest dostępny.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez polymorphism » środa, 12 września 2012, 21:41

Tylko jeden jest dostępny.

I chyba więcej nie trzeba, bo zawiera definicje dla trzech precyzji -> float, double i long double (na jedną DLL-kę przypada jedna z wymienionych precyzji).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » środa, 12 września 2012, 21:42

ha :D jestem debilem :D
oki 1 etap zakończony. Wcześniej tez próbowałem się z tym bawić ale implib mi nie działał. zmieniałem jego zgodność pod xp ale dalej nie działał. ale skoro mówicie że działa to dodałem jeszcze 254 kolory i udało się go odpalić. mam już lib.
teraz aby borland go widział mam:
wczytać do mojego projekt
#include fftw3.h
i będzie działać??
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows 7Chrome

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez polymorphism » środa, 12 września 2012, 21:46

Bibliotekę LIB musisz dodać do projektu (add to project lub coś w tym stylu).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » środa, 12 września 2012, 23:25

dlaczego mi wywala
[Linker Error] Unresolved external '_fftw_plan_dft_2d' referenced from ??
coś pominąłem??
oki pominąłem -a.
teraz pytanie z innej beczki jak pod winda 7 uruchomić implib. od 6 godzin próbuje go włączyć (na virtualu xp tez się sypie).
Raz mi sie udało a teraz za Chiny ludowe:x.
cała noc a ja próbuje program uruchomić :X
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows 7Chrome

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez Cyfrowy Baron » czwartek, 13 września 2012, 04:57

Może problem bierze się z tego, że uruchamiasz ten program w środowisku 64-bitowym. Ze swej strony mogę tylko podesłać tobie te biblioteki LIB.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » czwartek, 13 września 2012, 23:26

dzięki niestety nie podeszły mi. ale uruchomiłem swojego starego kompa no i lib się zrobiło ale reszta nie :/


Chyba udało mi się to zrobić FFT 2d oraz dolnoprzepustowy filtr. Jednak mam problem ponieważ nie wyświetla mi rezultatu. Uważam że źle wprowadzam dane do tablicy FFT
pod cv wygląda to tak:
KOD cpp:     UKRYJ  
in[k][0] = ((uchar*)(img1->imageData + i * img1->widthStep))[j];
in[k][1] = 0.;
 


ja nie mam cv więc rozwiązałem to jakoś inaczej ale niestety nie wydaje wartości

inne metody wprowadzania danych wywalały mi blad w kompilatorze w "double[*]{*]"

Jak to można inaczej zapisać?
mój kod:
KOD cpp:     UKRYJ  
void __fastcall TForm1::FFTW(TObject *Sender)
{
fftw_complex* in, * dft;
fftw_plan plan_f, plan_i;
int i, j, k, w, h, N;
int outwidth;

//wczytanie parametrów
w = Bufor->Picture->Bitmap->Width;
h = Bufor->Picture->Bitmap->Height;
N = w * h;
outwidth = w/2+1;
//alokacja pamieci
in   = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
dft  = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
  ProgressBar1->Max =  Obraz->Picture->Bitmap->Width;

plan_f = fftw_plan_dft_2d(w, h, in, dft, FFTW_FORWARD, FFTW_ESTIMATE);

for (i = 0, k = 0; i < h; i++)
    {
        for (j = 0; j < w; j++, k++)
        {
            in[k][0] = Obraz->Picture->Bitmap->Canvas->Pixels[((Obraz->Picture->Bitmap->Canvas->Pixels[ i][j] + i * Obraz->Picture->Bitmap->Width))][j]; // <----
            in[k][1] = 0.;
                        ProgressBar1->Position = i;
        }
    }
         ProgressBar1->Position = 0 ;
  fftw_execute(plan_f);

//filtr dolnoprzepustowy
 LowPass(dft,outwidth,h,3);
// fft odwrotna
plan_i = fftw_plan_dft_2d(w, h, dft, in, FFTW_BACKWARD, FFTW_ESTIMATE);
  fftw_execute(plan_i);
wczytanie wartości po filtracji
for (i = 0, k = 0; i < h; i++)
    {
        for (j = 0; j < w; j++, k++)
    Wynik->Picture->Bitmap->Canvas->Pixels[((Wynik->Picture->Bitmap->Canvas->Pixels[i][j] + i * Wynik->Picture->Bitmap->Width))][j] = dft[k][0]; // <----
 fftw_destroy_plan(plan_f);
  fftw_destroy_plan(plan_i);
    fftw_free(in);
    fftw_free(dft);
 }}
LowPass(fftw_complex *outp, int outwidth, int height, int spacing)
{


    int w,h;
    float fh,fw,f;

    float invcutx = 1.0 / (2.0*(float)(spacing)*outwidth);
    float invcuty = 1.0 / (2.0*(float)(spacing)*height);

    for (h=0; h < height/2; h++) {

        {
            fh = float(h)*invcuty;
            fh *= fh;
            for (w = 0; w < outwidth; w++) {
                fw = float(w)*invcutx;
                fw *= fw;
                f = 1/(1 + fh + fw);
                outp[w][0] *= f;
                outp[w][1] *= f;
            }
        }

        outp += outwidth;
    }

    for (h=height/2; h < height; h++) {

        {
            fh = float(height-h-1)*invcuty;
            fh *= fh;
            for (w = 0; w < outwidth; w++) {
                fw = float(w)*invcutx;
                fw *= fw;
                f = 1/(1 + fh + fw);
                outp[w][0] *= f;
                outp[w][1] *= f;
            }
        }

        outp += outwidth;
    }

}
 
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows 7Chrome

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » niedziela, 16 września 2012, 19:47

spróbuje jeszcze raz OpenCV wgrać tym razem na win xp. może się uda. a jak nie:X nie ma jakiejś metod aby uzyskać Imagedata w borland?
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez polymorphism » niedziela, 16 września 2012, 20:15

Jeśli to Imagedata ma oznaczać po prostu pamięć z danymi opisującymi kolory poszczególnych pikseli, to TBitmap ma właściwość ScanLine, dzięki której masz bezpośredni dostęp do bufora bitmapy.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [bcb] Szybka transformacja Fouriera

Nowy postprzez kubawodzu » niedziela, 16 września 2012, 21:48

a o tego jak się można dostać widthStep??
Avatar użytkownika
kubawodzu
Bladawiec
Bladawiec
 
Posty: 28
Dołączył(a): piątek, 13 lipca 2012, 14:14
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Winda 7 pro 64
Kompilator: Borland C++ 6
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 9 gości

cron