Bio Lab03

Transformacja Radona zdefiniowana jest następujaco
\(R(L)=\int_{L}^{ }f(l)dl\) Zakładając parametryzacje prostej \(L\) następująco
\(L: \begin{Bmatrix}(x,y): x=t\cdot sin(\alpha)+s\cdot cos(\alpha),y=-t\cdot cos(\alpha)+s\cdot sin(\alpha)\end{Bmatrix}\) Transformacja Radona sprowadza sie do wyznaczenia
\(R(\alpha ,s)=\int_{\infty }^{\infty }f(x(t),y(t))dt\) \(R(\alpha ,s)=\int_{\infty }^{\infty }f(t\cdot sin(\alpha)+s\cdot cos(\alpha),-t\cdot cos(\alpha)+s\cdot sin(\alpha)))dt\)

W środowisku MatLab znajduje się już zaimplementowana transformacja Radona w postaci funkcji radon.

I = zeros(100,100);
I(25:75, 25:75) = 1;
imshow(I)
[R,xp] = radon(I,[0 45]);
figure; plot(xp,R(:,1)); title('R_{0^o} (x\prime)')

Podobnie zaimplementowana jest już odwrtona transformata radona w postaci funkcji iradon

theta1 = 0:10:170; [R1,xp] = radon(P,theta1);
theta2 = 0:5:175;  [R2,xp] = radon(P,theta2);
theta3 = 0:2:178;  [R3,xp] = radon(P,theta3);
I1 = iradon(R1,10);
I2 = iradon(R2,5);
I3 = iradon(R3,2);
imshow(I1)
figure, imshow(I2)
figure, imshow(I3)

Aby obejżeć sinogram można wykorzystać funkcje imshow lub

theta = 0:180;
[R,xp] = radon(I,theta);
imagesc(theta,xp,R);
title('R_{\theta} (X\prime)');
xlabel('\theta (degrees)');
ylabel('X\prime');
set(gca,'XTick',0:20:180);
colormap(hot);
colorbar
D = 250;

dsensor1 = 2;
F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1);

dsensor2 = 1;
F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2);

dsensor3 = 0.25
[F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,'FanSensorSpacing',dsensor3);

output_size = max(size(P));

Ifan1 = ifanbeam(F1,D,'FanSensorSpacing',dsensor1,'OutputSize',output_size);
figure, imshow(Ifan1)

Ifan2 = ifanbeam(F2,D,'FanSensorSpacing',dsensor2,'OutputSize',output_size);
figure, imshow(Ifan2)

Ifan3 = ifanbeam(F3,D,'FanSensorSpacing',dsensor3,'OutputSize',output_size);
figure, imshow(Ifan3)