Sürekli zaman / boşluk / frekansta tanımlanan sinyal işleme algoritmaları tipik olarak sinyali ayrı bir ızgarada örneklemek ve integralleri toplamlara (ve türevleri farklılıklara) dönüştürmek suretiyle uygulanır. Uzamsal filtreler, bir evrişim çekirdeğiyle (yani komşuların ağırlıklı toplamı) evrişim yoluyla uygulanır.
Örneklenmiş zaman alanı sinyallerinin filtrelenmesi hakkında büyük bir bilgi birikimi vardır; zaman alanı filtreleri, sonlu dürtü yanıt filtreleri olarak uygulanır ; burada geçerli çıktı örneği, önceki N giriş örneklerinin ağırlıklı toplamı olarak hesaplanır; veya akım çıkışının önceki girişlerin ve önceki çıkışların ağırlıklı toplamı olduğu sonsuz dürtü tepki filtreleri . Biçimsel olarak, ayrık zaman filtreleri , Laplace dönüşümünün ayrık zamanlı analogu olan z-dönüşümü kullanılarak açıklanmaktadır . Bilinear dönüşümü Haritalar başka bir tane ( ve Matlab).c2d
d2c
İşlevleri keyfi noktalarda nasıl değerlendirirsiniz?
Doğrudan örnekleme ızgarasında bulunmayan bir noktada bir sinyalin değerine ihtiyacınız olduğunda , değerini yakındaki noktalardan enterpolasyon yaparsınız . İnterpolasyon, en yakın numuneyi seçmek, en yakın numunelerin ağırlıklı ortalamasını hesaplamak veya örneklenen verilere keyfi olarak karmaşık bir analitik fonksiyon yerleştirmek ve bu fonksiyonu gerekli koordinatlarda değerlendirmek kadar basit olabilir. Düzgün bir ince ızgara üzerine enterpolasyon yapmak örnekleme işlemidir . Orijinal (sürekli) sinyaliniz örnekleme ızgarasının yarısından daha ince ayrıntılar (yani frekanslar) içermiyorsa, sürekli işlev örneklenen sürümden ( Nyquist-Shannon örnekleme teoremi ) mükemmel şekilde yeniden oluşturulabilir . 2D'de enterpolasyon yapabileceğinize ilişkin bir örnek için bkz.bilinear enterpolasyon .
Matlab olarak kullanmak olabilir interp1
ya da interp2
1D ya da düzenli olarak örneklenmiş 2B verileri (sırasıyla), ya da sokmak için griddata
düzensiz örneklenmiş 2B verilerden dayalı olarak çalışır.
Her vokselden geçen ve karşılık gelen formülü hesaplayan bir for-loopunuz var mı?
Evet kesinlikle.
Matlab, matrisler ve vektörler (yani çok boyutlu diziler) üzerinde çalışmak üzere tasarlandığından, bunu açık for-loop'larla yapmak zorunda kalmaz. Matlab'da buna "vektörleştirme" denir. Belirli integral ile yaklaşık olabilir sum
, cumsum
, trapz
, cumtrapz
, vb
Gonzalez ve Woods'un "Dijital Görüntü İşleme" kitabını okudum ama hala kayıptayım. Ayrıca Sayısal Tarifler kitap serisi hakkında okudum. Doğru yol bu mu?
Evet, Sayısal Tarifler harika bir başlangıç olurdu. Çok pratiktir ve ihtiyaç duyacağınız sayısal yöntemlerin çoğunu kapsar. (Matlab'ın ihtiyacınız olan her şeyi zaten uyguladığını göreceksiniz, ancak Sayısal Tarifler mükemmel bir arka plan sağlayacaktır.)
"Algoritmalar ve veri yapıları" dersini aldım, ancak orada sunulan materyal ile bilimsel algoritmaların uygulanması arasındaki ilişkiyi görmüyorum.
"Algoritmalar ve veri yapıları" derslerinde işlenen materyaller, tamsayılar veya dizeler içeren listeler, diziler, ağaçlar ve grafikler ve sıralama ve seçme gibi işlemler gibi yapılara konsantre olma eğilimindedir: tipik olarak tek bir doğru sonucun olduğu problemler. Bilimsel algoritmalar söz konusu olduğunda, bu hikayenin sadece yarısıdır. Diğer yarısı, gerçek sayıları ve analitik fonksiyonları tahmin etme yöntemleri ile ilgilidir. Sen "Sayısal Yöntemler" (veya "Sayısal Analizi" başlıklı bir kursta bu bulacaksınız; gibi bu bir- slaytlar için aşağı kaydırın): özel işlevlerin nasıl tahmin edileceği, integrallerin ve türevlerin nasıl tahmin edileceği, vb. Burada ana görevlerden biri sonucunuzun doğruluğunu tahmin etmektir ve ortak bir model, yeterince doğru olana kadar tahmin edin. (Kendinize Matlab'ın sin(x)
bazıları için değerini tahmin etmek kadar basit bir şeyi nasıl yapacağını nasıl bildiğini sorabilirsiniz x
.)
Basit bir örnek olarak, Matlab'daki bir görüntünün radon dönüşümünü hesaplayan kısa bir komut dosyası. Radon dönüşümü bir görüntünün projeksiyonlarını bir dizi projeksiyon açısı üzerinden alır. Yansıtmayı keyfi bir açı boyunca hesaplamaya çalışmak yerine, tüm görüntüyü kullanarak döndürürüm imrotate
, böylece yansıtma çekimi her zaman dikey olur. Daha sonra, sadece kullanarak çıkıntı sunar sum
, çünkü sum
matris, her sütun üzerinden toplamı içeren bir vektör ile döner.
Kendi yazabilirsiniz imrotate
İsterseniz kullanarak interp2
.
%%# Home-made Radon Tranform
%# load a density map (image).
A = phantom;
n_pixels = size(A, 1); %# image width (assume square)
%# At what rotation angles do we want to take projections?
n_thetas = 101;
thetas = linspace(0, 180, n_thetas);
result = zeros(n_thetas, n_pixels);
%# Loop over angles
for ii=1:length(thetas)
theta = thetas(ii);
rotated_image = imrotate(A, theta, 'crop');
result(ii, :) = sum(rotated_image);
end
%# display the result
imagesc(thetas, 1:n_pixels, result.');
xlabel('projection angle [degrees]');
Bir zamanlar bir ışın boyunca yoğunluğun bir integrali olan şey, artık orijinal görüntüyü dönüştürülmüş bir koordinat sistemi üzerinde enterpolasyon yoluyla bulunan, ayrı olarak örneklenmiş bir görüntünün bir sütununun bir toplamıdır.