Műveletek komplex számokkal - képfeldolgozás

Műveletek komplex számokkal - képfeldolgozás
2013-04-23T17:31:32+02:00
2013-04-27T06:28:56+02:00
2022-11-28T22:15:45+01:00
HunZolka
Üdv,

talán elsőre úgy tűnik, hogy nem ide illő témát nyitottam, de mindjárt tiszta lesz, hogy miért is passzol ide a matekozás.

Most tanulmányozom a különböző digitális képfeldolgozási módszereket, de egynél elakadtam, és nem tudok kit megkérdezni a témában.

Konkrétan a Fourier-térben való számításokkal kapcsolatosan merült fel a komplex számok kérdése:
a tárgyalt exp() exponenciális függvényekben végül Re valós résszel szorzott cos(), és Im imaginárius résszel szorzott sin() tényezők fordulnak elő, ezekkel sajnos nem igazán tudom, hogy konkrét számolás esetén mit is kell kezdeni?
Annyit értek hogy komplex számnak van egy 'Re' valós összetevője, meg egy Im imaginárius összetevő, amit ha négyzetre emelünk, akkor kapunk (-1)-et.

A kérdésem tehát, hogy mit kell behelyettesíteni a 'Re' és az 'Im' helyére, ha ezeket látom egy függvényben?

A válaszokat előre is köszönöm.
Mutasd a teljes hozzászólást!

  • Ezek függvények, mint pl a sin meg a cos: nem kell semmit 'behelyettesíteni', csak kiszámolni a függvények értékét.
    Saját komplex típust alkotsz, vagy egy kész komponenst használsz?
    Ha az utóbbi, akkor nyilván van Re és Im függvény; ha az előbbi, akkor a választott tárolási módtól függ az implementáció módja.
    Mutasd a teljes hozzászólást!
  • A Re(z) a z komplex szám valós(real) részét adja meg
    Az Im(z) a z komplex szám imaginárius részét adja meg(a j szorzóját)

    pl.

    z = 5 + 3j
    Re(z) = 5
    Im(z) = 3

    [j-vel jelöltem az imaginárius egységet, szokás még i-vel is jelölni)
    Mutasd a teljes hozzászólást!
  • ööö... egyelőre csak a könyvben szereplő függvényt szeretném értelmezni, és legfeljebb azután állnék neki tényleges programot írni. A könyvben a Fourier-térben használt függvények össze-vissza átalakítgatásait sem nagyon értem, de úgy látom hogy egy ponton megáll a (számomra értelmezhetetlen) átalakítgatásokkal, és végül kap egy függvényt.

    Ide nem igazán tudom normálisan beírni, kimásoltam a függvényeket egy .doc fájlba, ezen követhetők az átalakítások és a végső függvény. Sajnos egyáltalán nem értem hogy mit miért csinál, miért alakítgat ezt azzá, a könyvben található "magyarázat" kínaiul is lehetne, akkor se látnám kevesebb értelmét úgyhogy most csak az a kérdésem, hogy a végső függvényben szereplő Re(Dn) és Im(Dn) szorzatokkal mit kell csinálni? Be kell valamit helyettesíteni?

    Eléggé kétségbe vagyok már esve, mert nincs mást kérdeznem, és bármennyit nézem a könyvet, semmivel sem lesz érthetőbb

    Válaszod előre is köszönöm
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szóval ha ilyen van a függvényben akkor a Re(Dn)-ben a Dn által jelölt függvényt (ez alapján kiszámolható együtthatót) csak ki kell számolni, az Im(Dn)- t meg kiszámítás után még szorozzam meg (gyök -1)-gyel?
    Mutasd a teljes hozzászólást!
  • Nem egészen.

    Szét kell szedned az eredményed z = A + Bj alakban(ahol j = sqrt(-1)).
    Ezek után Re(z) = A ; Im(z) = B

    NÉZD MEG (főleg 8. elemi függvények)
    Én ebből tanultam komplex függvénytant és jól megérthető.
    KIDOLGOZOTT FELADATOK
    Mutasd a teljes hozzászólást!
  • A D a diszkrét frekvenciatartományban létrejövő Fourier együtthatókat jelöli. Az eredeti transzformációt a folytonosan változó frekvenciaértékekre írták fel, de mivel az időben csak adott (diszkrét) pontokban mintavételezzük a folytonos jelet, ezért a frekvencia spektrumban is csak diszkrét helyeken jelentkeznek az összetevők (D0..DN).
    A Re(Dn) az n-edik diszkrét Fourier összetevő valós része, az Im(Dn) pedig a képzetes része.
    A frekvenciafelbontás a mintavételi időből és a minták számából:
    df = 1 / (N*T)

    D0 pedig azért valós mert ez a jel 0 frekvenciás összetevője (vagyis az "egyenszint").
    Mutasd a teljes hozzászólást!
  • A Fourier eseteben a real es az imag osszetevok egyenranguak, pongyolan fogalmazva az a gyok-1-el szorzas az csak azert van ott hogy 'szetvalassza' a 2 komponenst.

    Hogy el tudd kepzelni a Re es az Im jelenteset a Fourier eseteben nezzuk meg ezt 1D-ben:

    Ott a Fourier eredmenye egy 1D tomb, ahol minden egyes elem egy konkret frekvenciaertekhez tartozik. A Re es az Im minden egyes frekvenciahoz megmondja, hogy
    - milyen eros az az adott frekvenciaju szinuszos jel
    - illetve, hogy milyen fazisú az.

    A jel ereje az a komplex szam magnitudoja, azaz sqrt(sqr(Re)+sqr(Im))
    A fazisa pedig atan2(Re,Im): ez az a fuggveny, a sin es a cos inverze, azaz atan2(sin(fazis),cos(fazis))=fazis.

    Es hogyan is a komplex szambol a szinuszos jel: Par pelda, ami alapjan hatha sikerul megerteni:
    re im func 1 0 1*sin(x) 2 0 2*sin(x) -1 0 -1*sin(x) vagy akár sin(x+pi) 0 1 cos(x) 0 -0.5 -0.5*cos(x) ------------------------- Eddig 90fokonkent sikerult mind a 4 fele fazist lefedni kulonfele magnitudokkal, nezzuk, milyen a 45 fokos fazis: re im func 0.707 0.707 0.707*sin(x)+0.707*cos(x) <- ez egy 45 fokos fazis ezt felirhattam volna ugy is, hogy Re Im 1*sin(pi/4) 1*cos(pi/4) -> 1*Sin(x+pi/4)

    Hogy a fazis es a magnitudo ertheto legyen:
    Kepzelj el egy TV-t, amin fuggoleges fekete/feher csikok valtakoznak.
    - Az, hogy mennyire sotet a fekete es mennyire vilagos a feher, az a az amplitudo, azaz a magnitude(Re,Im).
    - Az, hogy egy viszonyitasi ponthoz kepest fekete vagy feher csikkal kezdodik a kep, az pedig a fazis.
    Most kepzeld el, hogy szepen egyenletesen elkezd scrollozni a kep jobbra. Ez felel meg annak, amikor a fazis szep egyenletesen valtozik. Ekkor a Re es az Im osszetevok ugy valtoznak, hont sin es cos a fazis fuggvenyeben.

    Itt egy remek szemlelteto flash -> sinusoid Tudod rajta ellitgatni a frekvenciat es a Re es az Im osszetevoket. Ezen az oldalon van még egy rakás szemleltetoprogram, erdemes megnezni.

    Ez a Re,Im csak egy modja annak, hogy meghatarozz egy amlitudo*sin(x+fazis) fuggvenyt. Egy masik lehetoseg az, hogy polarkordinatakkal hatarozod meg (pont ugy, ahogy felirtam az elobb az(amplitudo,fazis) párossal). Csak hat az FFT komplex szamokon dolgozik.

    Amugy en is csak amulok azon, hogy a komplex aritmetika es a trigonometria kozott micsoda atjaras van .
    Mutasd a teljes hozzászólást!
  • Na megnéztem a linken levő anyagokat, eddig azokat olvasgattam, és... most ugyanott tartok, mintha nem csináltam volna semmit

    Azt írja, hogy:

    z = x + jy
    x = Re z
    y = Im z

    Tehát ha a függvényben ilyen van, hogy Re(Dn) és Im(Dn) akkor a Dn-t valahogy még szét kell szednem valós és imaginárius részre, mert úgy kell értelmezni hogy a Dn = z?

    Most a Dn = ... függvényben (korábban linkeltem a .doc fájlt) melyik melyik rész?
    Mutasd a teljes hozzászólást!
  • // Perform filtering int ydim = Image.Re.Ydim; int xdim = Image.Re.Xdim; for (int v = 0; v < ydim; v++) for (int u = 0; u < xdim; u++) { // Calculate distance to center int dv = (v < ydim / 2) ? v : v - ydim; int du = (u < xdim / 2) ? u : u - xdim; float dist1 = (float) ((cv-dv) * (cv-dv) + (cu-du) * (cu-du)); float dist2 = (float) ((-cv-dv) * (-cv-dv) + (-cu-du) * (-cu-du)); // Apply filter float filter1 = exp(dist1 / (-2 * freq * freq)); float filter2 = exp(dist2 / (-2 * freq * freq)); Image.Re.Data2D[v][u] *= (1 - filter1) * (1 - filter2); Image.Im.Data2D[v][u] *= (1 - filter1) * (1 - filter2); }

    Ááá, csak vicceltem

    Complexebbb
    Mutasd a teljes hozzászólást!
  • Valamit kezdjél el programozni, úgy könnyebb lesz.

    Pl:
    header:
    /* cplx.h */ #ifndef CPLX_H #define CPLX_H type struct cplx { double real; double imag; } cplx; void cplx_add (cplx *a, const cplx *b); double cplx_re (const cplx *a); double cplx_im (const cplx *a); #endif
    program:
    /* cplx.c */ #include "cplx.h" void cplx_add (cplx *a, const cplx *b) { a->real += b->real; a->imag += b->imag; } double cplx_re (const cplx *a) { return a->real; } double cplx_im (const cplx *a) { return a->imag; }

    most jöhet a többi művelet, kivonás, osztás szorzás, komplemens, szorzás valóssal, abszolút érték, irányszög... azután hatványozás egész kitevőre, azután valósra, komplexre, egyéb függvények... ezzel hetekig eldolgozgathatsz, és közben meg is tanulod.
    Mutasd a teljes hozzászólást!
  • Na azt hiszem értem a dolgot, azért csak rákérdezek:

    tehát a függvényben, ami az egyik hozzászólásomhoz csatolt .doc fájl végén található, van egy Re(Dn) és egy Im(Dn) szorzó tényező.

    A Dn együtthatóban szintén van egy exp(...) függvény, amit egy cosinusos és egy j*sinusos valós és imaginárius rész összegeként lehet felírni.

    A fő függvényben tehát a
    Re(Dn) helyére a Dn függvény cosinus-os, tehát valós részét,
    az Im(Dn) helyére pedig külön, csak a j*sin(...) részt kell behelyettesíteni?


    Másik kapcsolódó kérdés:

    A Fourier függvények használhatók pl. egy szűrési, elmosási, a képrögzítés során kiszámítható 'szóródásfüggvénnyel' rendelkező rendszer által okozott hiba kiküszöbölésére.

    A szűrési eljárás normál esetben konvolúcióval oldható meg, pixelenként kell használni az (A x M) szűrési eljárás mátrixát.
    Fourier-térben a konvolúció az eredeti kép és az eljárás függvényének transzformáltjainak szorzásával megegyező eredményt ad, az eljárás visszavonása pedig az osztási művelet (F(A) / F(M))

    Pl.:
    a 9 szomszédos képpont átlagolásához használt mátrix konvolúcióhoz az M:
    _____________
    |1/9 1/9 1/9|
    |1/9 1/9 1/9|
    |1/9 1/9 1/9|

    A kérdésem tehát, hogy mondjuk egy 8x8 együtthatót tartalmazó F(A)-t, és a 3x3-as F(M) együtthatóit hogyan osztom egymással? A könyv csak annyit ír, hogy a megfelelő mátrix elemeket kell egymással összevetni, de konkrétan nem írja hogy ez mit jelent a gyakorlatban.

    A válaszod előre is köszönöm.
    Mutasd a teljes hozzászólást!
  • ad1: igen, ha exp(a+bi) = exp(a)(cos(b) + isin(b)), akkor
    Re(exp(a+bi)) = exp(a)*cos(b)
    Im(exp(a+bi)) = exp(a)*sin(b)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd