Почему 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,...)

Другие вопросы по тегам