Почему iradon возвращает отрицательные значения пикселей?
Я сделал 200 проекций под углом 1,8 градуса, используя программное обеспечение LabVIEW. Размер изображения 2748 x 2748 пикселей, uint16. Затем с помощью Matlab я загружаю проекционные изображения, выполняю коррекцию плоского поля, изменяю размер изображения на 1/3 и сохраняю изображения в виде файла.mat. Затем я запускаю приведенный ниже код для отфильтрованной обратной проекции.
interp='linear'; %set interpolation: nearest, linear, spline, pchip, v5cubic
filter='Hann'; %set filter: Ram-Lak, Shepp-Logan, Cosine, Hamming, Hann, None
for s=1:916
for i=1:200
a(i,:)=proj065(:,s,i);
end
a=a';
%figure(3), imagesc(a)
b=iradon(a,1.8,interp,filter);
imagesc(b);
recon(:,:,s)=b;
s
clear a
end
Если я использовал фильтр в этом коде, я получу отрицательные значения пикселей.
Но если я запускаю код без фильтра, я получу положительные значения пикселей.
Есть идеи, почему iradon возвращает отрицательные значения пикселей в отфильтрованной обратной проекции?
Спасибо.
Нурул
1 ответ
Да, алгоритм FBP (отфильтрованная обратная проекция) сделает это. Он может неправильно реконструировать воксели как имеющие отрицательные значения из-за шума и дискретности данных. Вы ничего не можете с этим поделать, как просто обрезать эти значения в целом.
Поскольку моя кандидатская диссертация посвящена алгоритмам реконструкции томографии, я чувствую себя обязанным по контракту (шутка) предложить использование итерационных алгоритмов для получения более качественных изображений (никогда не хуже, часто значительно лучше). Проверьте SART/SIRT или CGLS для этой проблемы.
Однако вы неправильно вызываете свою функцию! В томографии размер шага недостаточен для восстановления изображения, вам обычно нужны точные углы, таким образом iradon
не принимает размер шага в качестве входных данных, он принимает массив углов.
в твоем случае, theta
должно быть theta=linspace(0,360-200/360,200)
и вам следует позвонить iradon(a,theta,...)