2010-01-18 20 views
5

C# 'da bazı görüntü işleme kodları yapıyorum, ancak herhangi bir kütüphaneyi veya GNU gibi kodu kullanamıyorum.Fourier işlevleri olmadan kodlama UnsharpMask

UnsharpMask işlevi, sırayla Fourier Dönüşümlerine bağlı olan Gauss bulanıklığına bağlıdır. Tüm bunlar için kod yazdım ve işler çalışıyor, ancak uzun bir hikaye yazmak için FFT işlevlerini kaldırmam gerekiyor. Keskin olmayan maskeyi başka bir şekilde FFT'ye ihtiyaç duymayacak şekilde yapmanın bir yolu var mı?

+0

Bunu kullanarak kazanacağınız devasa hızları dikkate alarak, neden fourier dönüşümlerini kullanamadığınızı bilmek ilginç olacaktır. –

+0

Temel olarak birim testine geliyor. UnsharpMask'ı eski nedenlerden dolayı saklıyorum ve nadiren kullanılıyor. Ancak, böyle bir işlevi desteklemek için, karmaşık sayı formatı görüntülerini ve FFT işlevselliğini ele almak için oldukça büyük bir sınıf oluşturmam gerekti, testlerle tamamlandı. Bu FFT'leri test eden birim gerçek bir acıdır, ancak hiç bir zaman UnsharpMask'ı kullansaydık sorun olmaz. – Jono

+0

FFT'yi başka bir şeyle değiştirmek yerine Gauss'un bulanıklığını başka bir şeyle değiştirmek ve yine UnsharpMask'ı yapmak mümkün olabilir mi? – Jono

cevap

2

aşağıdaki benim ihtiyaçlarına uygun bir çözüm buldum öneririm.

Birkaç hızlı ve kirli bulanıklaştırma algoritması denedim ve yeterli olması için Box Blur ve Stack Blur öğelerini buldum. Yığın Bulanıklık daha temiz bir bulanıklığa ve Kutu Bulanıklığı'na sahiptir ve Gaussian'dan birkaç kat daha hızlıdır. Yani Gaussian'ın yerine birini kullanabilirim.

Artık tüm FFT kod karmaşasından kurtulabiliyor ve daha kolay yönetilebilir bir şeyle değiştirebiliyorum. Bu çözüm herkes için geçerli olmayabilir, fakat UnsharpMask bulanıklığa dayandığından beri, bunun bir bilimin tam olduğunu hissetmedim.

Bu arada, Gimp'in Gauss'un bulanıklığı FFT'lerden de kaçınıyor gibi görünüyor.

+0

I ' ve genellikle otomatik olarak çok sayıda görüntüyü kaldırmam gerektiğinde hızlı bir şekilde kaba bir bulanıklık elde etmek için kutu bulanıklığını iki kez veya üç kez kullanmışlardır. – DarenW

+0

GIMP'in Gauss Bulanıklığı için IIR yaklaşımını kullandığını düşünüyorum. – Royi

3

Bir Gauss bulanıklığının Fourier dönüşümü parçası, Gauss çekirdeği ile konvolüsyonu gerçekleştirmenin etkili bir yoludur. Bunu, standart sapmanın ve boyutun (standart sapmanın yaklaşık 5-6 katı civarında olan tek boyutlu bir kernel) yaklaşık bir Gauss çekirdeği ile düz ileri dönüşümü kullanarak yapabilirsiniz.

Bkz. Convolution on Wikipedia.

+0

İyi cevap. O (n * n) algoritması (doğrudan konvolüsyon) için bir O (nn nn) algoritması değiştiriyorsunuz - dolayısı ile de doğrudan konvolüsyona sahip 2D görüntüleri yumuşatmak çok daha yavaş olacaktır. Hız bir sorun olduğunda FFT algoritmasını Sayısal Tarifelerden kolayca kopyalayabilirsiniz. – Paul

+0

NR kodunun ticari kullanım için ücretsiz olmadığına inanıyorum (op belirtmezse de GNU kodunun bir sorun olup olmadığını tahmin ediyorum, NR lisansı da olabilir). –

0

Herhangi bir kütüphaneyi veya GNU şeyini kullanamıyor olsanız bile, onların uygulamalarına bakabilir ve gereksinimleriniz için benzer kodları çoğaltmaya çalışabilir misiniz?

openCV işlev listesi. Buradaki işlev ayrıntılarını ve daha sonra başlık dosyalarındaki uygulama ayrıntılarını kontrol edin. C# tabanlı uygulamada ilgileniyorsanız http://opencv.willowgarage.com/documentation/genindex.html

Ayrıca ben http://aforgenet.com/framework/

+0

openCV çalışabilir. Aforge, kullanamadığım LGPL'dir. Ayrıca, Gauss'un The Gimp'taki bulanıklığın FFT: http://git.gnome.org/browse/gimp/tree/plug-ins/common/blur-gauss.c adresinde görünmediğini fark ettim. – Jono

İlgili konular