Реализация преобразования Радона в Matlab, выходной размер

В связи с характером моей проблемы, я хочу оценить численные реализации преобразования Радона в Matlab (то есть разные методы интерполяции дают разные числовые значения).

пытаясь закодировать свой собственный радон и сравнить его с выходом Matlab, я обнаружил, что мои размеры проекции радона отличаются от размеров Matlab.

Так что немного интуиции о том, как я вычисляю количество, если нужны образцы радона. Давайте сделаем 2D-случай.


Идея заключается в том, что максимальный размер будет при проекции диагональной (по крайней мере, в прямоугольной форме) части в преобразовании радона, поэтому diago=sqrt(size(I,1),size(I,2)), Поскольку мы ничего не теряем, n_r=ceil(diago), n_r должно быть количество дискретных выборок преобразования радона должно быть, чтобы гарантировать, что никакие данные не пропущены.

Я заметил, что Матлаб radon вывод всегда четный, что имеет смысл, так как вы хотите, чтобы "луч" проходил через центр вращения всегда. И я заметил, что во всех случаях в конечных точках массива есть 2 нуля.

Так что в этом случае, n_r=ceil(diago)+mod(ceil(diago)+1,2)+2;

Тем не менее, кажется, что я получаю небольшие расхождения с Matlab.

MWE:

 % Try: 255,256
 pixels=256;
 I=phantom('Modified Shepp-Logan',pixels);

 rd=radon(I,pi/4);
 size(rd,1)

 s=size(I);
 diagsize=sqrt(sum(s.^2));
 n_r=ceil(diagsize)+mod(ceil(diagsize)+1,2)+2

rd=

   367


n_r =

   365

Поскольку преобразование Радона в Matlab - это функция, на которую я не могу смотреть, мне интересно, почему это может быть таким расхождением.

2 ответа

Решение

Я еще раз взглянул на проблему и считаю, что это действительно правильный ответ. Из "скрытой документации" radon.m (введите edit radon.m и прокрутите вниз)

Выработанный синтаксис

R = RADON(I,THETA,N) возвращает преобразование Радона с проекцией, вычисленной в N точках. R имеет N строк. Если вы не укажете N, то количество точек, по которым вычисляется проекция:

   2*ceil(norm(size(I)-floor((size(I)-1)/2)-1))+3

Этого числа достаточно для вычисления проекции с единичными интервалами, даже по диагонали.

Я не пытался пересмотреть эту формулу, но думаю, это то, что вы ищете.

Это довольно специализированный вопрос, поэтому я предложу идею, не будучи полностью уверенным, что это ответ на ваш конкретный вопрос (обычно я пропускаю и позволяю кому-то ответить, но я не уверен, сколько читателей в stackru имеют изучал radon). Я думаю, что вы могли бы пропустить это floor функция в документации для radon вызов функции. Из документа:

Радиальные координаты, возвращаемые в xp, представляют собой значения вдоль оси x, которая ориентирована под тета-градусами против часовой стрелки от оси x. Начало обеих осей - центральный пиксель изображения, который определяется как

floor((size(I)+1)/2)

Например, в изображении 20 на 30 центральный пиксель равен (10,15).

Это дает другое поведение для задач нечетного или четного размера, которые вы передаете. Следовательно, в вашем примере ("Попробуйте: 255, 256") вам потребуется другой случай для нечетного и четного, и это может включать (в действительности) заполнение строк и столбцов нулей.

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