Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Vijesti
  • Analogna i diskretna metoda kodiranja. Fourierova obrada digitalnih slika

Analogna i diskretna metoda kodiranja. Fourierova obrada digitalnih slika

Slike koje se sastoje od diskretnih elemenata, od kojih svaki može uzeti samo konačan broj prepoznatljivih vrijednosti koje se mijenjaju u konačnom vremenu, nazivaju se diskretnim. Treba naglasiti da elementi diskretne slike, općenito govoreći, mogu imati nejednaku površinu i svaki od njih može imati nejednak broj prepoznatljivih gradacija.

Kao što je pokazano u prvom poglavlju, retina prenosi diskretne slike do viših dijelova vizualnog analizatora.

Njihov prividni kontinuitet samo je jedna od iluzija vizije. Ova "kvantizacija" prvobitno kontinuiranih slika nije određena ograničenjima povezanim s rezolucijom optički sistem oči pa čak ni morfološke strukturni elementi vizuelni sistem, i funkcionalna organizacija nervne mreže.

Slika je podijeljena na diskretne elemente receptivnim poljima koja ujedinjuju jedan ili drugi broj fotoreceptora. Receptivna polja proizvode primarni izbor korisnih svjetlosni signal prostornim i vremenskim sumiranjem.

Središnji dio retine (fovea) zauzimaju samo čunjići, a na periferiji izvan fovee nalaze se i čunjići i štapići. U uslovima noćnog vida, konusna polja u centralnom delu mrežnjače imaju približno istu veličinu (oko 5" u ugaonoj meri). Broj takvih polja u fovei, čije su ugaone dimenzije oko 90", je oko 200. Glavnu ulogu u uvjetima noćnog vida imaju polja štapića, koja zauzimaju cijelu preostalu površinu mrežnice. Imaju kutnu veličinu od oko 1° na cijeloj površini mrežnice. Broj takvih polja u mrežnjači je oko 3000. Ne samo detekciju, već i gledanje slabo osvijetljenih objekata u ovim uslovima obavljaju periferna područja mrežnjače.

Kako se osvjetljenje povećava, drugi sistem skladišnih ćelija - konusna receptivna polja - počinje da igra glavnu ulogu. U fovei, povećanje osvjetljenja uzrokuje postepeno smanjenje efektivne jačine polja sve dok se pri svjetlini od oko 100 asb ne smanji na jedan konus. Na periferiji, sa povećanjem osvjetljenja, polja štapa se postepeno gase (usporavaju) i stupaju u akciju. Konusna polja na periferiji, kao i fovealna polja, imaju sposobnost smanjenja u zavisnosti od svjetlosne energije koja pada na njih. Najveća količinačunjići, koje konusna receptivna polja mogu imati sa povećanjem osvjetljenja, rastu od centra do rubova mrežnice i na kutnoj udaljenosti od 50-60° od centra dostižu približno 90°.

Može se izračunati da u dobrim uslovima dnevno svjetlo broj receptivnih polja dostiže oko 800 hiljada Ova vrijednost približno odgovara broju vlakana u ljudskom optičkom živcu. Diskriminacija (razlučivanje) objekata u dnevnom vidu vrši se uglavnom preko fovee, gdje se receptivno polje može svesti na jedan konus, a sami čunjići su najgušće smješteni.

Ako se broj skladišnih ćelija retine može odrediti na zadovoljavajuću aproksimaciju, tada još nema dovoljno podataka za određivanje broja mogućih stanja receptivnih polja. Na osnovu proučavanja diferencijalnih pragova receptivnih polja mogu se napraviti samo neke procjene. Kontrast praga u fovealnim receptivnim poljima u određenom opsegu operativnog osvjetljenja je reda veličine 1. U ovom slučaju, broj prepoznatljivih gradacija je mali. U cijelom rasponu restrukturiranja receptivnog polja konusnog foveala razlikuje se 8-9 gradacija.

Period akumulacije u receptivnom polju - takozvano kritično trajanje - određuje se u prosjeku vrijednošću od oko 0,1 sekunde, ali na visoki nivoi osvjetljenje se očigledno može značajno smanjiti.

Zapravo, model koji opisuje diskretnu strukturu prenesene slike, trebalo bi da bude još teže. Moralo bi se uzeti u obzir odnos između veličina receptivnog polja, pragova i kritičnog trajanja, kao i statističke prirode vizuelnih pragova. Ali za sada nema potrebe za ovim. Dovoljno je zamisliti kao model slike skup elemenata jednake površine, čije su ugaone dimenzije manje od ugaonih dimenzija najmanjeg detalja razlučenog okom, čiji je broj prepoznatljivih stanja veći od maksimalan broj prepoznatljive gradacije svjetline, a vrijeme diskretne promjene koje je manje od perioda treperenja na kritičnoj frekvenciji trepereće fuzije.

Ako slike stvarnih kontinuiranih objekata vanjskog svijeta zamijenite takvim diskretnim slikama, oko neće primijetiti zamjenu.* Slijedom toga, diskretne slike ove vrste sadrže najmanje ništa manje informacija nego što ih vizuelni sistem percipira. **

* Slike u boji i zapremine se takođe mogu zameniti diskretnim modelom.
** Problem zamjene kontinuiranih slika diskretnim je važan za filmsku i televizijsku tehnologiju. Vremenska kvantizacija je osnova ove tehnike. U televizijskim sistemima s pulsnim kodom, slika je također podijeljena na diskretne elemente i kvantizirana prema svjetlini.

Recite i pokažite na primjeru Pascala: 1) Šta je apsolutno i čemu služi? 2) Šta je asm i čemu služi? 3) Šta je

konstruktor i destruktor i čemu služi?

4) Šta je implementacija i čemu služi?

5) Imenujte Pascal module (u redu Koristi, na primjer crt) i koje mogućnosti ovaj modul pruža?

6) Koja je to vrsta varijable: pokazivač

7) I na kraju: šta znači simbol @, #, $, ^?

1. Šta je objekat?2. Šta je sistem?3. Koje je uobičajeno ime objekta? Navedite primjer.4. Šta je naziv jednog objekta? Navedite primjer.5.

Navedite primjer prirodnog sistema.6. Navedite primjer tehničkog sistema.7. Navedite primjer mješovitog sistema.8. Navedite primjer nematerijalnog sistema.9. Šta je klasifikacija?10. Šta je klasa objekata?

1. Pitanje 23 - navedite načine rada pristupne baze podataka:

Kreiranje tablice u modu dizajna;
-kreiranje tabele pomoću čarobnjaka;
-kreiranje tabele unosom podataka.

2. šta je to vektorski format?

3. Da li se sljedeće mogu klasificirati kao uslužni programi:
a) programi za održavanje diska (kopiranje, dezinfekcija, formatiranje, itd.)
b) kompresiju fajlova na diskovima (arhivatori)
c) borba protiv kompjuterskih virusa i još mnogo toga.
Ja lično mislim da je ovdje odgovor B - tačno ili pogrešno?

4. što se tiče osobina algoritma (a. diskretnost, b. efektivnost c. masovnost, d. sigurnost, d. izvodljivost i razumljivost) - ovdje mislim da su sve opcije ispravne. U pravu ili ne?

testirajte 7 jednostavnih pitanja sa više odgovora

13. Radni takt procesora je:

A. broj binarnih operacija koje je izvršio procesor po jedinici vremena

B. broj generiranih impulsa u sekundi koji sinhronizuju rad računarskih čvorova

C. broj mogućih pristupa procesoru ram memorija po jedinici vremena

D. brzina razmjene informacija između procesora i ulazno/izlaznih uređaja

14. Odredite minimum potreban set uređaji dizajnirani za rad računara:

A. štampač, sistemska jedinica, tastatura

B. procesor, RAM, monitor, tastatura

C. procesor, streamer, hard disk

D. monitor, sistemska jedinica, tastatura

15. Šta je mikroprocesor?

A. integralno kolo, koji izvršava komande primljene na svom ulazu i kontroliše

Rad računara

B. uređaj za pohranjivanje podataka koji se često koristi na poslu

C. uređaj za prikazivanje tekstualnih ili grafičkih informacija

D. uređaj za izlaz alfanumeričkih podataka

16. Interakcija korisnika sa softversko okruženje izvedeno korištenjem:

A. operativni sistem

B. sistem datoteka

C. Prijave

D. upravitelj datotekama

17. Direktna kontrola softver korisnik može izvršiti sa

Autor:

A. operativni sistem

B. GUI

C. Korisničko sučelje

D. upravitelj datotekama

18. Metode pohranjivanja podataka na fizički mediji definira:

A. operativni sistem

B. aplikativni softver

C. sistem datoteka

D. upravitelj datotekama

19. Grafičko okruženje na kojem se prikazuju objekti i kontrole Windows sistemi,

Kreirano za praktičnost korisnika:

A. hardverski interfejs

B. korisnički interfejs

C. desktop

D. softverski interfejs

20. Brzina računara zavisi od:

A. frekvencija sata procesor

B. prisustvo ili odsustvo povezanog štampača

C. organizacija interfejsa operativnog sistema

D. eksterni kapacitet skladištenja

Analogna i diskretna slika. Grafičke informacije mogu biti predstavljeni u analognom ili diskretnom obliku. Primjer analogna slika može biti slika čija se boja kontinuirano mijenja i primjer diskretne slike štampane pomoću inkjet štampač crtež koji se sastoji od pojedinačnih poena različite boje. Analogno (uljano slikarstvo). Diskretno.

Slajd 11 sa prezentacije "Kodiranje i obrada informacija". Veličina arhive sa prezentacijom je 445 KB.

Računarstvo 9. razred

sažetak druge prezentacije

“Algoritmi strukture grananja” - uslov AKO, ONDA akcija. šta mi znamo? Struktura lekcije. Algoritam grananja. Dovršite algoritam i popunite tabelu. Učenik koji osvoji od 85 do zaključno 100 bodova prolazi u drugi krug takmičenja. Unesite broj bodova i odredite da li je prošao u drugi krug. Pronađite najveći broj između a i b. Napišite program u programskom jeziku. Algoritam grananja je algoritam u kojem se, ovisno o uvjetu, izvodi jedan ili drugi niz radnji.

“Stvaranje umjetne inteligencije” - Simulacijski pristup. Pristupi izgradnji sistema veštačke inteligencije. Evolucijski pristup. Umjetna inteligencija. Može kohabitirati sa mnogim ljudima, pomažući da se nosi sa njima lične probleme. Strukturalni pristup. Logičan pristup. Problemi tokom razvoja. Perspektive razvoja i područja primjene.

“Ciklični programi” - Digitalni. Petlja s preduvjetom. Pronađite iznos. Petlja s postuvjetom. Petlja s parametrom. Euklidov algoritam. Ciklični programi. Pronađite iznos prirodni brojevi. Koncept ciklusa. Početna naknada. Tabela funkcija. Izračunati. Primjer. Razdjelnici. Računarska nauka. Pronađite broj brojeva. Nađi. Pronađite broj trocifrenih prirodnih brojeva. Trocifreni brojevi. Pronađite skup vrijednosti funkcije. Tabela konverzije dolara.

“Šta je e-pošta” - pošiljalac. E-mail adresa. Istorija e-pošte. Pitanje izgleda e-pošte. Struktura slova. Usmjeravanje pošte. Pismo. Email. Kopiraj. Datum. X-mailer. Email. Kako to radi Email.

“Rad sa e-poštom” - Email adresa. Mailbox. Email protokol. Mreža za dijeljenje datoteka. Razdvajanje adresa. Prednosti e-pošte. Mail klijenti. Izumitelj e-pošte. Adresa. Email. Softver za rad sa emailom. Kako e-mail funkcionira. Telekonferencija. Mail server. Dijeljenje datoteka.

“Obrada u Photoshopu” - Cool momci. Kako razlikovati lažnjak. Raster i vektorske slike. Uvod. Top mesta. Adobe program Photoshop. Retuširanje. Takmičenja u radu sa Photoshopom. Podešavanje svjetline. Moji prijatelji. Praktični dio. Slični programi. Glavni dio. Dizajn. Neobične životinje. Montaža više slika.

U prethodnom poglavlju proučavali smo linearne prostorno invarijantne sisteme u kontinuiranom dvodimenzionalnom domenu. U praksi imamo posla sa slikama koje imaju ograničene dimenzije i istovremeno se mjere u diskretnom skupu tačaka. Stoga je do sada razvijene metode potrebno prilagoditi, proširiti i modificirati kako bi se mogle primijeniti na takvom području. Pojavljuje se i nekoliko novih tačaka koje zahtijevaju pažljivo razmatranje.

Teorema uzorkovanja govori pod kojim uvjetima je moguće precizno rekonstruirati iz diskretnog skupa vrijednosti kontinuirana slika. Takođe ćemo naučiti šta se dešava kada se ne ispune uslovi njegove primenljivosti. Sve ovo ima direktan uticaj na razvoj vizuelnih sistema.

Metode koje zahtijevaju prijelaz na frekvencijski domen, postao popularan dijelom zbog brzih algoritama proračuna diskretna transformacija Fourier. Međutim, treba biti oprezan jer ove metode zahtijevaju prisustvo periodični signal. Razgovarat ćemo o tome kako se ovaj zahtjev može ispuniti i koje su posljedice njegovog kršenja.

7.1. Ograničenje veličine slike

U praksi, slike uvijek imaju konačne dimenzije. Razmotrimo pravokutnu sliku širine i visine H. Sada nema potrebe za uzimanjem integrala u Fourierovoj transformaciji preko beskonačnih granica:

Zanimljivo je da ne moramo znati nikakve frekvencije da bismo vratili funkciju. Znati da at predstavlja teško ograničenje. Drugim riječima, funkcija koja je različita od nule samo u ograničenom području ravni slike sadrži mnogo manje informacija od funkcije koja nema ovo svojstvo.

Da biste to vidjeli, zamislite da je ravan ekrana prekriven kopijama data slika. Drugim riječima, širimo našu sliku na funkciju koja je periodična u oba smjera

Ovdje je najveći cijeli broj koji ne prelazi x. Fourierova transformacija takve umnožene slike ima oblik

Korišćenjem na odgovarajući način odabrani faktori konvergencije u pr. 7.1 dokazano je da

dakle,

odakle vidimo da je svuda jednaka nuli osim za diskretni skup frekvencija.Zato da bismo ga pronašli, dovoljno nam je da znamo u tim tačkama. Međutim, funkcija se dobiva jednostavnim odsijecanjem dijela za koji . Stoga, da bismo ga obnovili, dovoljno je da znamo samo za sve. Ovo je prebrojiv skup brojeva.

Imajte na umu da se transformacija periodične funkcije pokazuje diskretnom. Reverzna konverzija može se predstaviti kao serija, pošto

Digitalna fotografija ili drugo rasterska slika je niz brojeva snimljenih senzorima nivoa svjetline u dvodimenzionalnoj ravni. Znajući da, sa matematičke tačke gledišta, tanko sočivo vrši Fourierovu transformaciju slika smeštenih u fokalne ravni, moguće je kreirati algoritme za obradu slike koji su analogni obradi slike klasičnim optičkim sistemom.

Formula za takve algoritme će izgledati ovako:

  1. Z=FFT(X) – direktna dvodimenzionalna Fourierova transformacija
  2. Z′=T(Z) – primjena funkcije ili transparentnosti na Fourierovu transformaciju slike
  3. Y=BFT(Z′) – inverzna dvodimenzionalna Fourierova transformacija
Za izračunavanje Fourierovih transformacija koriste se brzi diskretni Fourierovi algoritmi transformacije. Iako optički sistem sočiva izvodi Fourierovu transformaciju na kontinuiranom rasponu argumenta i za kontinuirani spektar, ali kada se kreće na digitalna obrada podataka, formule Fourierove transformacije mogu se zamijeniti diskretnim formulama Fourierove transformacije.

Primjeri implementacije

  • Algoritam zamućenja slike
Implementirani algoritmi su dio biblioteke otvorenog koda izvorni kod FFTTools. Internet adresa: github.com/dprotopopov/FFTTools

Algoritam zamućenja slike

U optičkim sistemima, dijafragma, koja se nalazi u fokalnoj ravni, je jednostavna rupa na ekranu. Kao rezultat prolaska svjetlosni tok kroz dijafragmu, visokofrekventni talasi (kraće talasne dužine) prolaze kroz prepreku, a talasi niske frekvencije (duže talasne dužine) su odsečeni ekranom. Ovo povećava oštrinu rezultirajuće slike. Ako rupu na ekranu zamijenite preprekom na ekranu, rezultat će biti zamućena slika, jer će se formirati od frekvencija dugih talasnih dužina.

algoritam:

  1. Izračunajte niz Z′=T(Z), gdje je T nuliranje redova i stupaca koji se nalaze u datim unutrašnjim područjima matrice argumenata koji odgovaraju visokim 5. frekvencijama (tj. nuliranje koeficijenata Fourierove ekspanzije koji odgovaraju visoke frekvencije)

Algoritam za izoštravanje slike

U optičkim sistemima, dijafragma, koja se nalazi u fokalnoj ravni, je jednostavna rupa na ekranu. Kao rezultat prolaska svjetlosti kroz dijafragmu, visokofrekventni talasi (sa kraćim talasnim dužinama) prolaze kroz prepreku, a niskofrekventni talasi (sa većim talasnim dužinama) se presecaju ekranom. Ovo povećava oštrinu rezultirajuće slike.

algoritam:

  1. Neka je X(N1,N2) niz svjetlina piksela slike.
  2. Izračunajte Px = prosječnu (rms) svjetlinu piksela u nizu X
  3. Izračunati niz Z=FT(X) – direktna dvodimenzionalna diskretna Fourierova transformacija
  4. Sačuvajte vrijednost L=Z(0,0) – koja odgovara prosječnoj svjetlini piksela originalne slike
  5. Izračunajte niz Z′=T(Z), gdje je T nuliranje redova i stupaca koji se nalaze u datim vanjskim područjima matrice argumenata koji odgovaraju niskim 6. frekvencijama (tj. nuliranje koeficijenata Fourierove ekspanzije koji odgovaraju niskim frekvencijama )
  6. Vratite vrijednost Z’(0,0)=L – koja odgovara prosječnoj svjetlini piksela originalne slike
  7. Izračunaj niz Y=RFT(Z′) – inverzna dvodimenzionalna diskretna Fourierova transformacija
  8. Izračunajte Py = prosječnu (rms) svjetlinu piksela u nizu Y
  9. Normalizirajte niz Y(N1,N2) prosječnim nivoom svjetline Px/Py

Algoritam za skaliranje slike

U optičkim sistemima, svjetlosni tok u fokalnoj ravni sistema je Fourierova transformacija originalne slike. Veličina slike dobijene na izlazu optičkog sistema određena je odnosom žižnih daljina sočiva i okulara.

algoritam:

  1. Neka je X(N1,N2) niz svjetlina piksela slike.
  2. Izračunajte Px = prosječnu (rms) svjetlinu piksela u nizu X
  3. Izračunati niz Z=FT(X) – direktna dvodimenzionalna diskretna Fourierova transformacija
  4. Izračunajte niz Z′=T(Z), gdje je T ili dodavanje nula redova i stupaca matrice koji odgovaraju visokim frekvencijama, ili uklanjanje redova i stupaca matrice koji odgovaraju visokim frekvencijama da bi se dobila potrebna veličina konačne slike
  5. Izračunaj niz Y=RFT(Z′) – inverzna dvodimenzionalna diskretna Fourierova transformacija
  6. Izračunajte Py = prosječnu (rms) svjetlinu piksela u nizu Y
  7. Normalizirajte niz Y(M1,M2) prosječnim nivoom svjetline Px/Py
Korišćen softver
  • Microsoft Visual Studio 2013 C# - okruženje i programski jezik
  • EmguCV/OpenCV – C++ biblioteka struktura i algoritama za obradu slika
  • FFTWSharp/FFTW – C++ biblioteka koja implementira brze diskretne Fourierove algoritme transformacije

Algoritam zamućenja slike

Algoritamski kod

///

/// Obriši internu regiju niza /// /// Niz vrijednosti /// Veličina unutrašnjeg slijepog područja privatni static void Blind (složeni[,] podaci, Veličina veličine) ( int n0 = data.GetLength(0); int n1 = data.GetLength(1); int n2 = data.GetLength(2); int s0 = Math.Max(0, (n0 - veličina.Visina)/2 ); int s1 = Math.Max(0, (n1 - veličina.Širina)/2); int e0 = Math.Min((n0 + size.Height)/2, n0); int e1 = Math.Min(( n1 + veličina.Širina)/2, n1); za (int i = s0; i< e0; i++) { Array.Clear(data, i*n1*n2, n1*n2); } for (int i = 0; i < s0; i++) { Array.Clear(data, i*n1*n2 + s1*n2, (e1 - s1)*n2); } for (int i = e0; i < n0; i++) { Array.Clear(data, i*n1*n2 + s1*n2, (e1 - s1)*n2); } } /// /// Blur bitmap sa Najbrža Fourierova transformacija /// /// Zamućena bitmapa public Bitmap Blur(Bitmap bitmap) (koristeći (var image = new Image (bitmap)) ( int dužina = image.Data.Length; int n0 = image.Data.GetLength(0); int n1 = image.Data.GetLength(1); int n2 = image.Data.GetLength(2); var doubles = new double; Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double)); double power = Math.Sqrt(doubles.Average(x => x*x)); var input = novi fftw_complexarray(doubles.Select(x => new Complex(x, 0)).ToArray()); var output = novi fftw_complexarray(length); fftw_plan.dft_3d(n0, n1, n2, ulaz, izlaz, fftw_direction. Naprijed, fftw_flags.Estimate).Execute(); Complex complex = output.GetData_Complex(); var data = new Complex; var buffer = new double; GCHandle complexHandle = GCHandle.Alloc(complex, GCHandleType.Pinned); GCHandle dataHandle .Alloc(data, GCHandleType.Pinned); IntPtr complexPtr = complexHandle.AddrOfPinnedObject(); IntPtr dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(complexPtr, buffer, 0, buffer.Length, Marbuffer.Length); , dataPtr, buffer.Length);Blind(podaci, _blinderSize); Marshal.Copy(dataPtr, bafer, 0, buffer.Length); Marshal.Copy(buffer, 0, complexPtr, buffer.Length); complexHandle.Free(); dataHandle.Free(); input.SetData(kompleks); fftw_plan.dft_3d(n0, n1, n2, ulaz, izlaz, fftw_direction.Nazad, fftw_flags.Procjena).Izvrši(); dvostruki niz2 = output.GetData_Complex().Select(x => x.Magnitude).ToArray(); dvostruka snaga2 = Math.Sqrt(niz2.Prosjek(x => x*x)); doubles = array2.Select(x =>

Algoritam za izoštravanje slike

Algoritamski kod

///

/// Obriši vanjsku regiju niza /// /// Niz vrijednosti /// Veličina vanjskog slijepog područja private static void Blind(Complex[,] data, size size) (int n0 = data.GetLength(0); int n1 = data.GetLength(1); int n2 = data.GetLength(2); int s0 = Math. Max(0, (n0 - veličina.Visina)/2); int s1 = Math.Max(0, (n1 - veličina.Širina)/2); int e0 = Math.Min((n0 + veličina.Visina)/ 2, n0); int e1 = Math.Min((n1 + size.Width)/2, n1); for (int i = 0; i< s0; i++) { Array.Clear(data, i*n1*n2, s1*n2); Array.Clear(data, i*n1*n2 + e1*n2, (n1 - e1)*n2); } for (int i = e0; i < n0; i++) { Array.Clear(data, i*n1*n2, s1*n2); Array.Clear(data, i*n1*n2 + e1*n2, (n1 - e1)*n2); } } /// /// Oštra bitmapa s najbržom Fourierovom transformacijom /// /// oštra bitmapa javna Bitmap Sharp(Bitmap bitmap) (koristeći (var image = new Image (bitmap)) ( int dužina = image.Data.Length; int n0 = image.Data.GetLength(0); int n1 = image.Data.GetLength(1); int n2 = image.Data.GetLength(2); var doubles = new double; Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double)); double power = Math.Sqrt(doubles.Average(x => x*x)); var input = novi fftw_complexarray(doubles.Select(x => new Complex(x, 0)).ToArray()); var output = novi fftw_complexarray(length); fftw_plan.dft_3d(n0, n1, n2, ulaz, izlaz, fftw_direction. Naprijed, fftw_flags.Estimate).Execute(); Kompleks kompleks = output.GetData_Complex(); Kompleksni nivo = složen; var podaci = novi kompleks; var bafer = novi dupli; GCHandle complexHandle = GCHandle.Alloc(kompleks, GCHandleType.Pinned) ; GCHandle dataHandle = GCHandle.Alloc(data, GCHandleType.Pinned); IntPtr complexPtr = complexHandle.AddrOfPinnedObject(); IntPtr dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy, buffersLtr.buffers,Ltr. Kopiraj(bafer, 0, dataPtr, buffer.Length); Blind(podaci, _blinderSize); Marshal.Copy(dataPtr, bafer, 0, buffer.Length); Marshal.Copy(buffer, 0, complexPtr, buffer.Length); complexHandle.Free(); dataHandle.Free(); kompleks = nivo; input.SetData(kompleks); fftw_plan.dft_3d(n0, n1, n2, ulaz, izlaz, fftw_direction.Nazad, fftw_flags.Procjena).Izvrši(); dvostruki niz2 = output.GetData_Complex().Select(x => x.Magnitude).ToArray(); dvostruka snaga2 = Math.Sqrt(niz2.Prosjek(x => x*x)); doubles = array2.Select(x => x*power/power2).ToArray(); Buffer.BlockCopy(dvostruki, 0, image.Data, 0, length*sizeof (double)); return image.Bitmap; ) )

Algoritam za skaliranje slike

Algoritamski kod

///

/// Kopiraj nizove /// /// Ulazni niz /// Izlazni niz privatni statički void Copy(Complex[,] ulaz, Complex[,] izlaz) ( int n0 = input.GetLength(0); int n1 = input.GetLength(1); int n2 = input.GetLength(2); int m0 = output.GetLength(0); int m1 = output.GetLength(1); int m2 = output.GetLength(2); int ex0 = Math.Min(n0, m0)/2; int ex1 = Math.Min(n1 , m1)/2; int ex2 = Math.Min(n2, m2); Debug.Assert(n2 == m2); for (int k = 0; k< ex2; k++) { for (int i = 0; i <= ex0; i++) { for (int j = 0; j <= ex1; j++) { int ni = n0 - i - 1; int nj = n1 - j - 1; int mi = m0 - i - 1; int mj = m1 - j - 1; output = input; output = input; output = input; output = input; } } } } /// /// Promjena veličine bitmape uz najbržu Fourierovu transformaciju /// /// Promijenjena veličina bitmapa public Bitmap Stretch(Bitmap bitmap) (koristeći (var image = new Image (bitmap)) ( int length = image.Data.Length; int n0 = image.Data.GetLength(0); int n1 = image.Data.GetLength(1); int n2 = image.Data.GetLength(2); var doubles = new double; Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double)); double power = Math.Sqrt(doubles.Average(x => x*x)); var input = novi fftw_complexarray(doubles.Select(x => new Complex(x, 0)).ToArray()); var output = novi fftw_complexarray(length); fftw_plan.dft_3d(n0, n1, n2, ulaz, izlaz, fftw_direction. Naprijed, fftw_flags.Estimate).Execute(); Kompleksni kompleks = output.GetData_Complex(); koristeći (var image2 = nova slika (_newSize)) ( int length2 = image2.Data.Length; int m0 ​​= image2.Data.GetLength(0); int m1 = image2.Data.GetLength(1); int m2 = image2.Data.GetLength(2 ); var complex2 = novi kompleks; var data = novi kompleks; var data2 = novi kompleks; var buffer = novi dupli; GCHandle complexHandle = GCHandle.Alloc(complex, GCHandleType.Pinned); GCHandle dataHandle = GCHandle.Alloc(data, GCHandleType .Pinned ); IntPtr complexPtr = complexHandle.AddrOfPinnedObject(); IntPtr dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(complexPtr, buffer, 0, buffer.Length); Marshal.Copy(buffer, 0, buffer.) ); complexHandle.Free(); dataHandle.Free(); Copy(data, data2); buffer = new double; complexHandle = GCHandle.Alloc(complex2, GCHandleType.Pinned); dataHandle = GCHandle.Alloc(data2, GCHandleType.Pinned); );complexPtr = complexHandle.AddrOfPinnedObject(); dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(dataPtr, bafer, 0, buffer.Length); Marshal.Copy(buffer, 0, complexPtr, buffer.Length); complexHandle.Free(); dataHandle.Free(); var input2 = novi fftw_complexarray(complex2); var output2 = novi fftw_complexarray(length2); fftw_plan.dft_3d(m0, m1, m2, ulaz2, izlaz2, fftw_direction.Nazad, fftw_flags.Procjena).Izvrši(); dvostruki niz2 = output2.GetData_Complex().Select(x => x.Magnitude).ToArray(); dvostruka snaga2 = Math.Sqrt(niz2.Prosjek(x => x*x)); double doubles2 = array2.Select(x => x*power/power2).ToArray(); Buffer.BlockCopy(doubles2, 0, image2.Data, 0, length2*sizeof (double)); return image2.Bitmap; ) ) )

Najbolji članci na ovu temu