2016-04-07 39 views
0

Üzerinde MATLAB tarafından Fan Beam projeksiyonu ve yeniden yapılandırması gerçekleştirmem gereken bir resim setim var. Ama bu resimler için garip eserlerim var. ifanbeam() dökümantasyonundan ardındanFan Işınındaki yeniden yapılanma yapaylıkları MATLAB

, ben şu kodu yazdık:

ph = phantom(100); 
d = 100; 
fan_proj = fanbeam(ph,d); 
fan_reproj = ifanbeam(fan_proj,d); 
imshow(fan_reproj) 

Ve iyi çalıştı:

enter image description here

Ama sonra açıkça hayali görüntüsünü kurtarmaya çalıştı sürücüde (onu MATLAB'dan yüklemek yerine) sürücüyü yükleyin ve aynı işlemi yapın.

ph = phantom(100); 
imwrite(ph, 'phantom.png'); 
clear; 

ph = imread('phantom.png'); 
d = 100; 
fan_proj = fanbeam(ph,d); 
fan_reproj = ifanbeam(fan_proj,d); 
imshow(fan_reproj) 

Ve sonuç garip eserler acı:

enter image description here

Bunun nedeni nedir? Görüntüde tam olarak ne değişiyor bu yüzden bu fonksiyonun sonucu da önemli ölçüde değişiyor?

cevap

2

Sorun, imshow (varsayılan olarak), giriş verilerinin 0 ile 1 arasında değerlere sahip olmasını beklemesidir. Bu, ilk önce fantomu oluşturduğunuzda doğrudur.

ph = phantom(100); 
min(ph) 

    0 

max(ph) 

    1 

Ama geri o 0 ile 255 arasında değerlere sahip olacaktır dosyadan yüklemek, bu kaydedilip işaretsiz 8 bit tamsayı olarak geri yüklendi çünkü:

ph = imread('phtnom.png'); 

class(ph) 

    uint8 

min(ph) 

    0 

max(ph) 

    255 

Ve varsayılan renk ölçeklendirmesiyle'u kullandığınızda, hala olacaktır [0,1], gördüğünüz aşırı kontrasta neden olur.

Görüntünün tam dinamik aralığının görüntülendiğinden emin olmak için 'u second input to imshow olarak kullanabilirsiniz.

imshow(fan_reproj, []) 

enter image description here

+0

Ben sorunu bu taraftan gelmesini beklemiyorduk. Yardım için çok teşekkür ederim. – kazarey