Skip to main content
edited tags
Link
Marcus Müller
  • 32.5k
  • 4
  • 35
  • 62
added 129 characters in body
Source Link
jojeck
  • 11.2k
  • 6
  • 38
  • 75

I know MATLAB has a built in Radon function, but I am working on implementing the radon transform in order to perform filtered back projection. As I started, my idea was multiple nested for loops for the summations at different theta values, this became pretty complex. I am not looking for source code, just suggestions on an approach. Any ideas are welcome.

%%Edit%%Edit: Here is what I have come up with so far, it works fairly well to perform the radon transform and create a sinogram

%%%This function takes an image, theta max and theta step %%% %%%and returns a 2D matrix where each row is the projection%%% %%%of the original image at different angles %%% %%%by rotating the image and summing the pixels %%%

function [R] = RadonTransform(img, theta, thetaStep)

%%%This function takes an image, theta max and theta step  %%%
%%%and returns a 2D matrix where each row is the projection%%%
%%%of the original image at different angles               %%%
%%%by rotating the image and summing the pixels            %%%
function [R] = RadonTransform(img, theta, thetaStep)

    %Obtain the image size in the x-direction
    [x,y] = size(img);
    %Set a matrix R to hold the projection data
    R = zeros((theta/thetaStep)+1,x);
    %Set vector for the angles to take projections at
    angles = 0:thetaStep:theta;
    %Matrix to hold all the rotated images separately to prevent blurring
    rotatedImage = zeros(x,y,length(angles));
    
    %Loop to rotate image and add up values for the projections
    for i = 1:(length(angles))
        %rotate the image starting with theta = 0 degrees
        rotatedImage(:,:,i) = imrotate(img,angles(i),'nearest', 'crop');
        %Sum the columns of img to get projection data
        %Each row of R contains a projection at a certain theta
        R(i,:) = sum(rotatedImage(:,:,i),1);
    end
    
    %Convert the matrix to a gray scale image in the range 0 to 255
    R = mat2gray(R);
    
    figure
    imshow(R)
    title('My Sinogram')
    
end

end

I know MATLAB has a built in Radon function, but I am working on implementing the radon transform in order to perform filtered back projection. As I started, my idea was multiple nested for loops for the summations at different theta values, this became pretty complex. I am not looking for source code, just suggestions on an approach. Any ideas are welcome.

%%Edit%% Here is what I have come up with so far, it works fairly well to perform the radon transform and create a sinogram

%%%This function takes an image, theta max and theta step %%% %%%and returns a 2D matrix where each row is the projection%%% %%%of the original image at different angles %%% %%%by rotating the image and summing the pixels %%%

function [R] = RadonTransform(img, theta, thetaStep)

%Obtain the image size in the x-direction
[x,y] = size(img);
%Set a matrix R to hold the projection data
R = zeros((theta/thetaStep)+1,x);
%Set vector for the angles to take projections at
angles = 0:thetaStep:theta;
%Matrix to hold all the rotated images separately to prevent blurring
rotatedImage = zeros(x,y,length(angles));

%Loop to rotate image and add up values for the projections
for i = 1:(length(angles))
    %rotate the image starting with theta = 0 degrees
    rotatedImage(:,:,i) = imrotate(img,angles(i),'nearest', 'crop');
    %Sum the columns of img to get projection data
    %Each row of R contains a projection at a certain theta
    R(i,:) = sum(rotatedImage(:,:,i),1);
end

%Convert the matrix to a gray scale image in the range 0 to 255
R = mat2gray(R);

figure
imshow(R)
title('My Sinogram')

end

I know MATLAB has a built in Radon function, but I am working on implementing the radon transform in order to perform filtered back projection. As I started, my idea was multiple nested for loops for the summations at different theta values, this became pretty complex. I am not looking for source code, just suggestions on an approach. Any ideas are welcome.

Edit: Here is what I have come up with so far, it works fairly well to perform the radon transform and create a sinogram

%%%This function takes an image, theta max and theta step  %%%
%%%and returns a 2D matrix where each row is the projection%%%
%%%of the original image at different angles               %%%
%%%by rotating the image and summing the pixels            %%%
function [R] = RadonTransform(img, theta, thetaStep)

    %Obtain the image size in the x-direction
    [x,y] = size(img);
    %Set a matrix R to hold the projection data
    R = zeros((theta/thetaStep)+1,x);
    %Set vector for the angles to take projections at
    angles = 0:thetaStep:theta;
    %Matrix to hold all the rotated images separately to prevent blurring
    rotatedImage = zeros(x,y,length(angles));
    
    %Loop to rotate image and add up values for the projections
    for i = 1:(length(angles))
        %rotate the image starting with theta = 0 degrees
        rotatedImage(:,:,i) = imrotate(img,angles(i),'nearest', 'crop');
        %Sum the columns of img to get projection data
        %Each row of R contains a projection at a certain theta
        R(i,:) = sum(rotatedImage(:,:,i),1);
    end
    
    %Convert the matrix to a gray scale image in the range 0 to 255
    R = mat2gray(R);
    
    figure
    imshow(R)
    title('My Sinogram')
    
end
added 1392 characters in body
Source Link
Kyle
  • 21
  • 1
  • 5

I know MATLAB has a built in Radon function, but I am working on implementing the radon transform in order to perform filtered back projection. As I started, my idea was multiple nested for loops for the summations at different theta values, this became pretty complex. I am not looking for source code, just suggestions on an approach. Any ideas are welcome.

%%Edit%% Here is what I have come up with so far, it works fairly well to perform the radon transform and create a sinogram

%%%This function takes an image, theta max and theta step %%% %%%and returns a 2D matrix where each row is the projection%%% %%%of the original image at different angles %%% %%%by rotating the image and summing the pixels %%%

function [R] = RadonTransform(img, theta, thetaStep)

%Obtain the image size in the x-direction
[x,y] = size(img);
%Set a matrix R to hold the projection data
R = zeros((theta/thetaStep)+1,x);
%Set vector for the angles to take projections at
angles = 0:thetaStep:theta;
%Matrix to hold all the rotated images separately to prevent blurring
rotatedImage = zeros(x,y,length(angles));

%Loop to rotate image and add up values for the projections
for i = 1:(length(angles))
    %rotate the image starting with theta = 0 degrees
    rotatedImage(:,:,i) = imrotate(img,angles(i),'nearest', 'crop');
    %Sum the columns of img to get projection data
    %Each row of R contains a projection at a certain theta
    R(i,:) = sum(rotatedImage(:,:,i),1);
end

%Convert the matrix to a gray scale image in the range 0 to 255
R = mat2gray(R);

figure
imshow(R)
title('My Sinogram')

end

I know MATLAB has a built in Radon function, but I am working on implementing the radon transform in order to perform filtered back projection. As I started, my idea was multiple nested for loops for the summations at different theta values, this became pretty complex. I am not looking for source code, just suggestions on an approach. Any ideas are welcome.

I know MATLAB has a built in Radon function, but I am working on implementing the radon transform in order to perform filtered back projection. As I started, my idea was multiple nested for loops for the summations at different theta values, this became pretty complex. I am not looking for source code, just suggestions on an approach. Any ideas are welcome.

%%Edit%% Here is what I have come up with so far, it works fairly well to perform the radon transform and create a sinogram

%%%This function takes an image, theta max and theta step %%% %%%and returns a 2D matrix where each row is the projection%%% %%%of the original image at different angles %%% %%%by rotating the image and summing the pixels %%%

function [R] = RadonTransform(img, theta, thetaStep)

%Obtain the image size in the x-direction
[x,y] = size(img);
%Set a matrix R to hold the projection data
R = zeros((theta/thetaStep)+1,x);
%Set vector for the angles to take projections at
angles = 0:thetaStep:theta;
%Matrix to hold all the rotated images separately to prevent blurring
rotatedImage = zeros(x,y,length(angles));

%Loop to rotate image and add up values for the projections
for i = 1:(length(angles))
    %rotate the image starting with theta = 0 degrees
    rotatedImage(:,:,i) = imrotate(img,angles(i),'nearest', 'crop');
    %Sum the columns of img to get projection data
    %Each row of R contains a projection at a certain theta
    R(i,:) = sum(rotatedImage(:,:,i),1);
end

%Convert the matrix to a gray scale image in the range 0 to 255
R = mat2gray(R);

figure
imshow(R)
title('My Sinogram')

end

Source Link
Kyle
  • 21
  • 1
  • 5
Loading