2016-04-07 17 views
0

Ich habe eine Reihe von Bildern, auf denen ich Fan Beam Projektion und Rekonstruktion von MATLAB durchführen muss. Aber für diese Bilder habe ich seltsame Artefakte.Fan Beam Rekonstruktion Artefakte in MATLAB

Im Anschluss an die Dokumentation auf ifanbeam() Funktion habe ich den folgenden Code geschrieben:

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

Und es hat gut funktioniert:

enter image description here

Aber dann habe ich versucht, explizit das Phantombild zu speichern Auf dem Laufwerk (anstatt es von MATLAB selbst zu laden), laden Sie es vom Laufwerk und führen Sie die gleiche Operation durch.

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) 

Und das Ergebnis von seltsamen Artefakte litt:

enter image description here

Warum passiert das das? Was ändert sich genau im Bild, so ändert sich das Ergebnis dieser Funktion auch so dramatisch?

Antwort

2

Das Problem ist, dass imshow (standardmäßig) erwartet, dass die Eingabedaten Werte zwischen 0 und 1 haben. Dies gilt, wenn Sie zuerst das Phantom erstellen.

ph = phantom(100); 
min(ph) 

    0 

max(ph) 

    1 

Aber wenn man es wieder aus der Datei laden sie diese Werte zwischen 0 und 255 haben wird, ist, weil sie gespeichert wurde und zurückgeladen in als unsigned 8-Bit-Integer:

ph = imread('phtnom.png'); 

class(ph) 

    uint8 

min(ph) 

    0 

max(ph) 

    255 

Und wenn Sie imshow mit der Standard-Farbskalierung verwenden, wird immer noch [0,1] sein, was den extremen Kontrast verursacht, den Sie sehen.

Sie können [] als second input to imshow verwenden, um sicherzustellen, dass der volle Dynamikbereich des Bildes angezeigt wird.

imshow(fan_reproj, []) 

enter image description here

+0

Ich erwarte, dass das Problem nicht von dieser Seite kommen. Vielen Dank für die Hilfe. – kazarey