• Sürekli sinyallerden ve dönüşümlerden ayrık sinyallere geçiş. Analog ve ayrık görüntüleme

    Analog ve ayrık görüntü. Grafik Bilgisi analog veya ayrık formda temsil edilebilir. Analog görüntüye bir örnek, rengi sürekli değişen bir tablo ve ayrık bir görüntü örneğidir. mürekkep püskürtmeli yazıcı farklı renkteki ayrı noktalardan oluşan bir desen. Analog (yağlı boya). Ayrık.

    slayt 11 sunumdan "Bilgilerin kodlanması ve işlenmesi". Sunumlu arşivin boyutu 445 KB'dir.

    Bilişim 9. Sınıf

    diğer sunumların özeti

    "Dallanma yapısı algoritmaları" - EĞER koşul, SONRA eylem. Biz ne biliyoruz. Ders yapısı. Dallanma algoritması. Algoritmayı çalıştırın ve tabloyu doldurun. 85'ten 100'e kadar puan alan öğrenci yarışmanın ikinci tura geçer. Puan sayısını girin ve ikinci tura geçip geçmediğini belirleyin. a ve b arasındaki en büyük sayıyı bulun. Bir programlama dilinde program yazın. Bir dallanma algoritması, duruma bağlı olarak bir veya daha fazla eylem dizisinin gerçekleştirildiği bir algoritmadır.

    "Yapay Zeka Yaratmak" - Simülasyon Yaklaşımı. Yapay zeka sistemlerinin inşasına yönelik yaklaşımlar. evrimsel yaklaşım Yapay zeka. Birçok insanla birlikte yaşayabilir, başa çıkmasına yardımcı olur kişisel sorunlar. Yapısal yaklaşım. mantıksal yaklaşım. Geliştirme sırasındaki sorunlar. Geliştirme ve kapsam için beklentiler.

    "Döngüsel programlar" - Rakam. Önkoşullu döngü. Miktarı bulun. Son koşullu döngü. Bir parametre ile döngü. Öklid'in algoritması. Döngüsel programlar. Doğal sayıların toplamını bulun. Döngü kavramı. Başlangıç ​​ücreti. Fonksiyon tablosu. Hesaplamak. Örnek. Bölücüler. Bilgisayar Bilimi. sayıların sayısını bulun. Bulmak. Üç basamaklı doğal sayıların sayısını bulun. Üç haneli sayılar. Fonksiyon değerleri kümesini bulun. Dolar dönüştürme tablosu.

    "E-posta nedir" - Gönderen. E-posta adresi. E-posta geçmişi. E-posta sorunu. Mektubun yapısı. Posta yönlendirme. Mektup. E-posta. Kopyala. Tarihi. X postası. E-posta. O nasıl çalışır E-posta.

    "E-posta ile çalışma" - E-posta adresi. Posta kutusu. E-posta protokolü. dosya paylaşım ağı. Adreslerin ayrılması. E-postanın faydaları. E-posta istemcileri. E-posta Mucidi. Adres. E-posta. E-posta yazılımı. E-posta nasıl çalışır? Tele konferans. Posta sunucusu. Dosya paylaşımı.

    "Photoshop'ta işleme" - Harika çocuklar. Sahte nasıl ayırt edilir. Raster ve vektör görüntüleri. Giriiş. En iyi yerler. Adobe programı Photoshop. Rötuş. Photoshop Yarışmaları. Parlaklık ayarı. Arkadaşlarım. Pratik kısım. benzer programlar. Ana bölüm. Tasarım. Sıra dışı hayvanlar. Çoklu görüntü montajı.

    Bir önceki bölümde, sürekli iki boyutlu bir alanda lineer uzamsal olarak değişmeyen sistemleri inceledik. Uygulamada, sınırlı boyutlara sahip ve aynı zamanda ayrı bir noktalar kümesinde sayılan görüntülerle uğraşıyoruz. Bu nedenle, bugüne kadar geliştirilen yöntemlerin bu alanda uygulanabilmesi için uyarlanması, genişletilmesi ve değiştirilmesi gerekmektedir. Dikkatle değerlendirilmesi gereken birkaç yeni nokta da var.

    Örnekleme teoremi, hangi koşullar altında sürekli bir görüntünün ayrı bir değer kümesinden doğru bir şekilde geri yüklenebileceğini söyler. Uygulanabilirlik koşulları sağlanmadığında ne olduğunu da öğreneceğiz. Bütün bunlar doğrudan görsel sistemlerin gelişimi ile ilgilidir.

    Frekans alanına gitmeyi gerektiren teknikler, kısmen hızlı hesaplama algoritmaları nedeniyle popüler hale geldi. ayrık dönüşüm Fourier. Ancak, bu yöntemler içerdiğinden dikkatli olunmalıdır. periyodik sinyal. Bu şartın nasıl karşılanabileceğini ve onu ihlal etmenin sonuçlarını tartışacağız.

    7.1. Görüntü Boyutu Sınırı

    Uygulamada, görüntülerin her zaman sonlu boyutları vardır. Genişliği ve yüksekliği R olan dikdörtgen bir görüntü düşünün. Artık Fourier dönüşümünde sonsuz limitlerde integral almaya gerek yok:

    Merakla, işlevi eski haline getirmek için tüm frekanslarda bilmemize gerek yok. Ne olduğunu bilmek zor bir kısıtlamadır. Başka bir deyişle, görüntü düzleminin yalnızca sınırlı bir bölgesinde sıfır olmayan bir işlev, bu özelliğe sahip olmayan bir işleve göre çok daha az bilgi içerir.

    Bunu doğrulamak için ekran düzleminin kopyalarla kaplı olduğunu hayal edin. verilen görüntü. Başka bir deyişle, imajımızı her iki yönde de periyodik olan bir fonksiyona genişletiyoruz.

    Burada x'ten küçük en büyük tam sayıdır. Böyle bir çarpılmış görüntünün Fourier dönüşümü şu şekildedir:

    Kullanarak uygun şekildeörneğin seçilmiş yakınsama faktörleri. 7.1 kanıtlanmıştır

    Buradan,

    dolayısıyla ayrık bir frekans grubu dışında her yerde sıfıra eşit olduğunu görüyoruz, bu nedenle bulmak için bu noktaları bilmemiz yeterli. Bununla birlikte, işlev, hangi bölümün basit bir şekilde kırpılmasından elde edilir? Bu nedenle, geri yüklemek için sadece herkes için bilmemiz yeterlidir, bu sayılabilir bir sayılar kümesidir.

    Periyodik fonksiyonun dönüşümünün ayrık olduğuna dikkat edin. Ters dönüşüm, bir dizi olarak temsil edilebilir, çünkü

    Görüntü ayrıklaştırma.

    Sürekli bir görüntü düşünün - iki uzamsal değişkenin bir fonksiyonu X 1 ve X 2 F(X 1 , X 2) sınırlı bir dikdörtgen alan üzerinde (Şekil 3.1).

    Şekil 3.1 - Sürekli bir görüntüden ayrık bir görüntüye geçiş

    Uzamsal değişkene göre ayrıklaştırma adımı Δ 1 kavramını tanıtalım X 1 ve Δ 2 değişkene göre X 2. Örneğin, noktalarda olduğunu hayal edebilirsiniz. uzak arkadaş eksen boyunca Δ 1 mesafede birbirinden X 1 nokta video sensörleri yer almaktadır. Bu tür video sensörleri tüm dikdörtgen alana kurulursa, görüntü iki boyutlu bir kafes üzerinde verilecektir.

    Gösterimi kısaltmak için,

    İşlev F(N 1 , N 2) iki ayrı değişkenin bir fonksiyonudur ve iki boyutlu dizi olarak adlandırılır. Yani, görüntünün uzamsal değişkenler açısından ayrıklaştırılması, onu bir örnek değerler tablosuna çevirir. Tablonun boyutu (satır ve sütun sayısı), orijinal dikdörtgen alanın geometrik boyutları ve formüle göre ayrıklaştırma adımının seçimi ile belirlenir.

    Nerede köşeli parantez[…] bir sayının tamsayı kısmını gösterir.

    Sürekli görüntünün etki alanı bir kare ise L 1 = L 2 = L ve örnekleme adımı eksenler boyunca aynı olacak şekilde seçilir X 1 ve X 2 (Δ 1 = Δ 2 = Δ), sonra

    ve tablonun boyutu N 2 .

    Bir görüntünün örneklenmesiyle elde edilen bir tablonun elemanına " denir. piksel" veya " Geri sayım". Bir piksel düşünün F(N 1 , N 2). Bu sayı sürekli değerler alır. Bilgisayar belleği yalnızca ayrık sayıları saklayabilir. Bu nedenle, bir bellek girişi için sürekli bir değer F tabi tutulmalı analogdan dijitale dönüştürme adım D ile F(bkz. şekil 3.2).

    Şekil 3.2 - Sürekli bir niceliğin kuantizasyonu

    Analogdan dijitale dönüştürme işlemi (sürekli bir değerin seviyeye göre ayrıklaştırılması) genellikle kuantizasyon. Parlaklık fonksiyonunun değerlerinin _____ _ ____ ___ aralığında olması koşuluyla niceleme seviyelerinin sayısı şuna eşittir:

    Görüntü işlemenin pratik problemlerinde, değer Q büyük ölçüde değişir Q= 2 ("ikili" veya "siyah beyaz" resimler) Q= 210 veya daha fazla (neredeyse sürekli parlaklık değerleri). En sık seçilen Q= 28, görüntü pikseli bir bayt dijital veri ile kodlanırken. Yukarıdakilerin hepsinden, bilgisayarın belleğinde depolanan piksellerin, orijinal sürekli görüntünün bağımsız değişkenler (koordinatlar?) ve düzeyler açısından ayrıklaştırılmasının sonucu olduğu sonucuna vardık. (Nerede ve ne kadar ve her şey ayrıktır) Ayrıklaştırma adımlarının Δ 1 olduğu açıktır. , Δ 2, örnekleme hatasının ihmal edilebilir olması ve dijital temsilin görüntü hakkındaki temel bilgileri muhafaza etmesi için yeterince küçük seçilmelidir.

    Aynı zamanda, örnekleme ve niceleme adımı ne kadar küçük olursa, bilgisayarın belleğine kaydedilmesi gereken görüntü verisi miktarının o kadar fazla olduğu unutulmamalıdır. Bu ifadenin bir örneği olarak, kullanılarak belleğe girilen 50×50 mm'lik bir slayt üzerindeki bir görüntüyü düşünün. dijital metre optik yoğunluk (mikrodensitometre). Giriş üzerine, mikrodensitometrenin doğrusal çözünürlüğü (uzaysal değişkenler açısından örnekleme adımı) 100 mikron ise, o zaman bellek yazılır iki boyutlu dizi boyut pikselleri N 2 = 500×500 = 25∙10 4 . Adım 25 mikrona düşürülürse, dizinin boyutu 16 kat artacak ve N 2 = 2000×2000 = 4∙10 6 . 256 seviyeli niceleme kullanarak, yani bulunan pikseli bir bayta kodlayarak, ilk durumda kayıt için 0,25 megabayt ve ikinci durumda 4 megabayt bellek gerektiğini elde ederiz.

    Her biri sonlu bir zamanda değişen, yalnızca sonlu sayıda ayırt edilebilir değer alabilen ayrık öğelerden oluşan görüntülere ayrık denir. Genel olarak konuşursak, ayrı bir görüntünün öğelerinin eşit olmayan bir alana sahip olabileceği ve her birinin eşit olmayan sayıda ayırt edilebilir derecelendirmeye sahip olabileceği vurgulanmalıdır.

    İlk bölümde gösterildiği gibi, retina ayrık görüntüleri görsel analizörün üst kısımlarına iletir.

    Görünürdeki süreklilikleri, gözün yanılsamalarından yalnızca biridir. Başlangıçta sürekli görüntülerin bu "kuantizasyonu", çözünürlükle ilişkili sınırlamalar tarafından belirlenmez. optik sistem gözler ve görsel sistemin morfolojik yapısal öğeleri bile değil, sinir ağlarının işlevsel organizasyonu.

    Görüntü, bir veya daha fazla sayıda fotoreseptörü birleştiren alıcı alanlar tarafından ayrık öğelere bölünür. Alıcı alanlar, yararlı olanların birincil seçimini üretir. ışık sinyali mekansal ve zamansal toplama yoluyla.

    Retinanın orta kısmı (fovea) sadece koniler tarafından işgal edilir, fovea dışındaki çevrede hem koniler hem de çubuklar vardır. Gece görüşü koşullarında, retinanın orta kısmındaki koni alanları yaklaşık olarak aynı büyüklüktedir (açısal olarak yaklaşık 5 "). Açısal boyutları yaklaşık 90" olan foveadaki bu tür alanların sayısı yaklaşık 200. Gece görüşü koşullarındaki ana rol, retina yüzeyinin geri kalanını kaplayan çubuk alanları tarafından oynanır. Retinanın tüm yüzeyinde yaklaşık 1° açısal boyuta sahiptirler. Retinadaki bu tür alanların sayısı 3.000 civarındadır.Bu koşullar altında loş nesnelerin sadece tespiti değil, incelenmesi de retinanın periferik bölgeleri tarafından gerçekleştirilir.

    Aydınlatmanın artmasıyla, başka bir depolama hücresi sistemi olan koni alıcı alanlar ana rolü oynamaya başlar. Fovea'da aydınlatmadaki bir artış, yaklaşık 100 asb'lik bir parlaklıkta bir koniye düşene kadar etkili alan kuvvetinde kademeli bir azalmaya neden olur. Çevrede aydınlatmanın artmasıyla birlikte çubuk alanlar yavaş yavaş kapanır (yavaşlar) ve koni alanlar devreye girer. Çevredeki koni alanları, foveal olanlar gibi üzerlerine gelen ışık enerjisine bağlı olarak azalma özelliğine sahiptir. en büyük sayı Artan aydınlatma ile alıcı alanların sahip olabileceği koni sayısı, merkezden retinanın kenarlarına doğru büyür ve merkezden 50-60 ° açısal bir mesafede yaklaşık 90'a ulaşır.

    İyi gün ışığı koşullarında alıcı alan sayısının yaklaşık 800 bine ulaştığı hesaplanabilir, bu değer yaklaşık olarak insan optik sinirindeki lif sayısına karşılık gelir. Gündüz görüşünde nesnelerin ayırt edilmesi (çözünürlüğü), esas olarak, alıcı alanın bir koniye indirgenebildiği ve konilerin kendilerinin en yoğun şekilde yerleştirildiği foveada gerçekleştirilir.

    Retinadaki depolama hücrelerinin sayısı tatmin edici bir yaklaşımla belirlenebilse de, alıcı alanların olası durumlarının sayısını belirlemek için hala yeterli veri yoktur. Alıcı alanların diferansiyel eşiklerinin incelenmesine dayalı olarak yalnızca bazı tahminler yapılabilir. Belirli bir aydınlatma çalışma aralığında foveal alıcı alanlarda eşik kontrastı 1 mertebesindedir. Bu durumda, ayırt edilebilir tonlamaların sayısı azdır. Koni foveal alıcı alanın tüm yeniden düzenleme aralığında, 8-9 derece farklıdır.

    Alıcı alandaki birikim süresi - sözde kritik süre - ortalama olarak 0,1 saniyelik bir değerle belirlenir, ancak yüksek seviyeler görünüşe göre aydınlatma önemli ölçüde azaltılabilir.

    Aslında, ayrık yapıyı tanımlayan model iletilen görüntüler, daha da zor olmalı. Alıcı alanın boyutları, eşikler ve kritik süre arasındaki ilişkinin yanı sıra görsel eşiklerin istatistiksel doğasının da hesaba katılması gerekli olacaktır. Ancak şimdilik bu gerekli değil. Bir görüntü modeli olarak, açısal boyutları, gözle çözülebilen en küçük detayın açısal boyutlarından daha küçük olan, ayırt edilebilir durumlarının sayısı maksimum sayıdan daha büyük olan, aynı alanda bir dizi eleman hayal etmek yeterlidir. ayırt edilebilir parlaklık tonlamaları ve ayrık değişim süresi, kritik titreme füzyon frekansındaki titreme süresinden daha kısadır.

    Dış dünyadaki gerçek sürekli nesnelerin görüntüleri bu tür ayrık görüntülerle değiştirilirse, göz bu ikameyi fark etmeyecektir.* Bu nedenle, bu tür ayrık görüntüler en az görsel sistemin algıladığı kadar bilgi içerir. **

    * Renkli ve hacimsel görseller ayrık model ile de değiştirilebilir.
    ** Sürekli görüntülerin ayrık olanlarla değiştirilmesi sorunu, film ve televizyon teknolojisi için büyük önem taşımaktadır. Zaman kuantizasyonu bu tekniğin merkezinde yer alır. Darbe kodlu televizyon sistemlerinde, görüntü ayrıca ayrı öğelere bölünür ve parlaklık ile nicelenir.

    Dijital fotoğrafçılık veya başka türlü bit eşlem iki boyutlu bir düzlemde parlaklık seviyesi sensörleri tarafından yakalanan bir sayı dizisidir. Matematiksel açıdan bakıldığında, ince bir merceğin odak düzlemlerine yerleştirilmiş görüntülerin Fourier dönüşümünü gerçekleştirdiğini bilerek, klasik bir optik sistemdeki görüntü işlemeye benzer görüntü işleme algoritmaları oluşturmak mümkündür.

    Bu tür algoritmaların formülü şöyle görünecektir:

    1. Z=FFT(X) – doğrudan iki boyutlu Fourier dönüşümü
    2. Z′=T(Z) – görüntünün Fourier görüntüsüne bir işlev veya saydamlık uygulaması
    3. Y=BFT(Z′) – ters iki boyutlu Fourier dönüşümü
    Fourier dönüşümleri, hızlı ayrık Fourier dönüşüm algoritmaları kullanılarak hesaplanır. Merceklerin optik sistemi, argümanın sürekli aralığı ve sürekli spektrum için Fourier dönüşümünü gerçekleştirmesine rağmen, ancak geçiş yaparken dijital işleme veriler, Fourier dönüşümü formülleri, ayrık Fourier dönüşümü formülleri ile değiştirilebilir.

    Uygulama örnekleri

    • Görüntü Bulanıklığı Algoritması
    Uygulanan algoritmalar, bir açık kaynak kitaplığının parçasıdır. kaynak kodu FFT Araçları. İnternet adresi: github.com/dprotopopov/FFTTools

    Görüntü Bulanıklığı Algoritması

    Optik sistemlerde odak düzleminde bulunan açıklık, ekrandaki basit bir deliktir. geçmesi sonucunda ışık akısı diyaframdan, yüksek frekanslı dalgalar (daha kısa dalga boylarına sahip) engelin içinden geçer ve dalgalar düşük frekanslar(daha uzun dalga boylarında) ekran tarafından kesilir. Bu, ortaya çıkan görüntünün keskinliğini artırır. Ekrandaki deliği ekrandaki bir engelle değiştirirsek sonuç şöyle olur. Bulanık görüntü, çünkü büyük uzunluktaki dalgaların frekanslarından oluşacaktır.

    Algoritma:

    1. Z'=T(Z) dizisini hesaplayın, burada T, yüksek frekanslara 5 karşılık gelen matris argümanının verilen iç alanlarında bulunan satır ve sütunların sıfırlanmasıdır (yani, karşılık gelen Fourier genişleme katsayılarının sıfırlanması) ile yüksek frekanslar)

    Görüntü keskinleştirme algoritması

    Optik sistemlerde odak düzleminde bulunan açıklık, ekrandaki basit bir deliktir. Işık akısının diyaframdan geçmesi sonucunda yüksek frekanslı dalgalar (kısa dalga boyuna sahip) engelin içinden geçer ve düşük frekanslı dalgalar (uzun dalga boyuna sahip) ekran tarafından kesilir. Bu, ortaya çıkan görüntünün keskinliğini artırır.

    Algoritma:

    1. X(N1,N2) bir görüntü piksel parlaklığı dizisi olsun.
    2. X dizisindeki piksellerin Px = ortalama (rms) parlaklığını hesaplayın
    3. Z=FT(X) dizisini hesaplayın - doğrudan iki boyutlu ayrık Fourier dönüşümü
    4. Orijinal görüntüdeki piksellerin ortalama parlaklığına karşılık gelen L=Z(0,0) değerini kaydedin
    5. Z'=T(Z) dizisini hesaplayın, burada T, düşük frekanslara karşılık gelen bağımsız değişken matrisinin verilen dış bölgelerinde bulunan satır ve sütunların sıfırlanmasıdır (yani, karşılık gelen Fourier genişleme katsayılarının sıfırlanması). düşük frekanslar)
    6. Orijinal görüntü piksellerinin ortalama parlaklığına karşılık gelen Z'(0,0)=L değerini geri yükleyin
    7. Y=RFT(Z′) dizisini hesaplayın – ters 2B ayrık Fourier dönüşümü
    8. Py = Y dizisindeki piksellerin ortalama (rms) parlaklığını hesaplayın
    9. Y(N1,N2) dizisini ortalama parlaklık düzeyi Px/Py ile normalleştirin

    Görüntü ölçekleme algoritması

    Optik sistemlerde, sistemin odak düzlemindeki ışık akısı, orijinal görüntünün Fourier dönüşümüdür. Optik sistemin çıkışında elde edilen görüntünün boyutu, objektif ve oküler odak uzaklıklarının oranı ile belirlenir.

    Algoritma:

    1. X(N1,N2) bir görüntü piksel parlaklığı dizisi olsun.
    2. X dizisindeki piksellerin Px = ortalama (rms) parlaklığını hesaplayın
    3. Z=FT(X) dizisini hesaplayın - doğrudan iki boyutlu ayrık Fourier dönüşümü
    4. Z'=T(Z) dizisini hesaplayın; burada T, son görüntünün gerekli boyutunu elde etmek için matrisin yüksek frekanslara karşılık gelen sıfır satır ve sütunlarını ekliyor veya matrisin yüksek frekanslara karşılık gelen satırlarını ve sütunlarını siliyor
    5. Y=RFT(Z′) dizisini hesaplayın – ters 2B ayrık Fourier dönüşümü
    6. Py = Y dizisindeki piksellerin ortalama (rms) parlaklığını hesaplayın
    7. Y(M1,M2) dizisini ortalama parlaklık seviyesi Px/Py ile normalleştirin
    Kullanılan yazılım
    • Microsoft görsel stüdyo 2013 C# - ortam ve programlama dili
    • EmguCV/OpenCV - Görüntü işleme için C++ yapı ve algoritma kitaplığı
    • FFTWSharp/FFTW – Hızlı ayrık Fourier dönüşüm algoritmalarını uygulayan C++ kitaplığı

    Görüntü Bulanıklığı Algoritması

    Algoritma kodu

    ///

    /// Dizinin iç bölgesini temizle /// /// değer dizisi /// Dahili kör bölge boyutu 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. Maks(0, (n0 - boyut.Yükseklik)/2); int s1 = Matematik.Maks(0, (n1 - boyut.Genişlik)/2); int e0 = Matematik.Min((n0 + boyut.Yükseklik)/ 2, n0); int e1 = Math.Min((n1 + boyut.Genişlik)/2, n1); for (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); } } /// /// En Hızlı Fourier Dönüşümü ile bitmap'i bulanıklaştırın /// /// Mavileştirilmiş bit eşlem genel Bitmap Bulanıklığı(Bitmap bitmap) ( (var image = new Image kullanarak) (bitmap)) ( int uzunluk = image.Data.Length; int n0 = image.Data.GetLength(0); int n1 = image.Data.GetLength(1); int n2 = image.Data.GetLength(2); var çiftler = yeni çift;Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double));double güç = Math.Sqrt(doubles.Average(x => x*x));var girişi = new fftw_complexarray(doubles.Select(x => new Complex(x, 0))).ToArray()); var output = new fftw_complexarray(uzunluk); fftw_plan.dft_3d(n0, n1, n2, girdi, çıktı, fftw_yön. İleri, fftw_flags.Estimate).Execute(); karmaşık karmaşık= output.GetData_Complex(); var veri = yeni Kompleks; varbuffer = yeni çift; GCHandle karmaşıkHandle = GCHandle.Alloc(karmaşık, GCHandleType.Pinned); GCHandle dataHandle = GCHandle.Alloc(veri, GCHandleType.Pinned); IntPtr karmaşıkPtr = karmaşıkHandle.AddrOfPinnedObject(); IntPtr dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(complexPtr, arabellek, 0, arabellek.Uzunluk); Marshal.Copy(buffer, 0, dataPtr, buffer.Length); Blind(veri, _blinderSize); Marshal.Copy(dataPtr, arabellek, 0, arabellek.Uzunluk); Marshal.Copy(arabellek, 0, karmaşıkPtr, arabellek.Uzunluk); ComplexHandle.Free(); dataHandle.Free(); input.SetData(karmaşık); fftw_plan.dft_3d(n0, n1, n2, girdi, çıktı, fftw_yön.Geri, fftw_flags.Tahmin).Yürüt(); çift ​​dizi2 = output.GetData_Complex().Select(x => x.Magnitude).ToArray(); çift ​​kuvvet2 = Math.Sqrt(dizi2.Average(x => x*x)); çiftler = dizi2.Seç(x =>

    Görüntü keskinleştirme algoritması

    Algoritma kodu

    ///

    /// Dizinin dış bölgesini temizle /// /// değer dizisi /// Dış kör bölge boyutu 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. Maks(0, (n0 - boyut.Yükseklik)/2); int s1 = Matematik.Maks(0, (n1 - boyut.Genişlik)/2); int e0 = Matematik.Min((n0 + boyut.Yükseklik)/ 2, n0); int e1 = Math.Min((n1 + boyut.Genişlik)/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); } } /// /// En Hızlı Fourier Dönüşümü ile net bitmap /// /// keskinleştirilmiş bit eşlem genel Bitmap Sharp(Bitmap bitmap) ( (var image = new Image kullanarak) (bitmap)) ( int uzunluk = image.Data.Length; int n0 = image.Data.GetLength(0); int n1 = image.Data.GetLength(1); int n2 = image.Data.GetLength(2); var çiftler = yeni çift;Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double));double güç = Math.Sqrt(doubles.Average(x => x*x));var girişi = new fftw_complexarray(doubles.Select(x => new Complex(x, 0))).ToArray()); var output = new fftw_complexarray(uzunluk); fftw_plan.dft_3d(n0, n1, n2, girdi, çıktı, fftw_yön. İleri, fftw_flags.Estimate).Execute(); Karmaşık karmaşık = output.GetData_Complex(); Karmaşık düzey = karmaşık; var data = yeni Karmaşık; var tampon = yeni çift; GCHandle karmaşıkHandle = GCHandle.Alloc(karmaşık, GCHandleType.Pinned) ; GCHandle dataHandle = GCHandle.Alloc(veri, GCHandleType.Pinned); IntPtr karmaşıkPtr = karmaşıkHandle.AddrOfPinnedObject(); IntPtr dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(complexPtr, tampon, 0, tampon.Length); Marshal. Kopyala(arabellek, 0, veriPtr, arabellek.Uzunluk); Blind(veri, _blinderSize); Marshal.Copy(dataPtr, arabellek, 0, arabellek.Uzunluk); Marshal.Copy(arabellek, 0, karmaşıkPtr, arabellek.Uzunluk); ComplexHandle.Free(); dataHandle.Free(); karmaşık = seviye; input.SetData(karmaşık); fftw_plan.dft_3d(n0, n1, n2, girdi, çıktı, fftw_yön.Geri, fftw_flags.Tahmin).Yürüt(); çift ​​dizi2 = output.GetData_Complex().Select(x => x.Magnitude).ToArray(); çift ​​kuvvet2 = Math.Sqrt(dizi2.Average(x => x*x)); çiftler = dizi2.Seç(x => x*güç/güç2).ToArray(); Buffer.BlockCopy(doubles, 0, image.Data, 0, length*sizeof (double)); resim döndür.Bitmap; ) )

    Görüntü ölçekleme algoritması

    Algoritma kodu

    ///

    /// Dizileri kopyala /// /// giriş dizisi /// çıkış dizisiözel statik boşluk Kopyala(Karmaşık[,] girdi, Karmaşık[,] çıktı) ( int n0 = girdi.GetLength(0); int n1 = girdi.GetLength(1); int n2 = girdi.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; } } } } /// /// Bitmap'i En Hızlı Fourier Dönüşümü ile yeniden boyutlandırın /// /// Yeniden boyutlandırılmış bit eşlem public Bitmap Stretch(Bitmap bitmap) ( (var image = new Image kullanarak) (bitmap)) ( int uzunluk = image.Data.Length; int n0 = image.Data.GetLength(0); int n1 = image.Data.GetLength(1); int n2 = image.Data.GetLength(2); var çiftler = yeni çift;Buffer.BlockCopy(image.Data, 0, doubles, 0, length*sizeof (double));double güç = Math.Sqrt(doubles.Average(x => x*x));var girişi = new fftw_complexarray(doubles.Select(x => new Complex(x, 0))).ToArray()); var output = new fftw_complexarray(uzunluk); fftw_plan.dft_3d(n0, n1, n2, girdi, çıktı, fftw_yön. İleri, fftw_flags.Estimate).Execute(); Karmaşık karmaşık = output.GetData_Complex(); kullanarak (var image2 = yeni Görüntü (_newSize)) ( int uzunluk2 = image2.Data.Length; int m0 ​​= image2.Data.GetLength(0); int m1 = image2.Data.GetLength(1); int m2 = image2.Data.GetLength(2) ); var karmaşık2 = yeni Karmaşık; var veri = yeni Karmaşık; var veri2 = yeni Karmaşık; var tampon = yeni çift; GCHandle karmaşıkHandle = GCHandle.Alloc(karmaşık, GCHandleType.Pinned); GCHandle dataHandle = GCHandle.Alloc(veri, GCHandleType) .Sabitlenmiş); IntPtr karmaşıkPtr = karmaşıkHandle.AddrOfPinnedObject(); IntPtr dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(complexPtr, tampon, 0, tampon.Length); Marshal.Copy(buffer, 0, dataPtr, tampon.Length ); ComplexHandle.Free(); dataHandle.Free(); Copy(data, data2); buffer = new double; ComplexHandle = GCHandle.Alloc(complex2, GCHandleType.Pinned); dataHandle = GCHandle.Alloc(data2, GCHandleType.Pinned) ); karmaşıkPtr = karmaşıkHandle.AddrOfPinnedObject(); dataPtr = dataHandle.AddrOfPinnedObject(); Marshal.Copy(dataPtr, arabellek, 0, arabellek.Uzunluk); Marshal.Copy(arabellek, 0, karmaşıkPtr, arabellek.Uzunluk); ComplexHandle.Free(); dataHandle.Free(); var girdi2 = yeni fftw_complexarray(complex2); var output2 = new fftw_complexarray(uzunluk2); fftw_plan.dft_3d(m0, m1, m2, girdi2, çıktı2, fftw_yön.Geri, fftw_flags.Tahmin).Yürüt(); çift ​​dizi2 = output2.GetData_Complex().Select(x => x.Magnitude).ToArray(); çift ​​kuvvet2 = Math.Sqrt(dizi2.Average(x => x*x)); double doubles2 = dizi2.Select(x => x*power/power2).ToArray(); Buffer.BlockCopy(doubles2, 0, image2.Data, 0, length2*sizeof (double)); image2.Bitmap'i döndür; ) ) )