Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
Sinogram reconstruction

Subject: Sinogram reconstruction

From: Derakon

Date: 10 Nov, 2010 21:12:39

Message: 1 of 8

I have some X-ray CT sinograms that I need to reconstruct so I can run
some image processing tests on the results. I'm new to sinograms, but
some searching showed me that iradon() can reconstruct them (
http://www.mathworks.com/matlabcentral/newsreader/view_thread/265881
). My sinograms are larger than that example (my smallest array is
672x8x19874; I think that what I have here is 8 different Z slices).
Unfortunately I don't know the angular distance between each
projection in the sinogram, so I don't know what to use for the second
argument to iradon(). I took a single 672x19874 portion of the array,
cut it down to 672x1987 by taking every 10th pixel (to reduce
processing time), transposed it, and passed it to iradon with theta
arguments ranging from .1/672 up to 1440/672, and none of the output
images look sensible, though some of them are pretty in a rather
abstract way.

Is there some way I can derive the distance argument from the original
array? Unfortunately this data is rather old and we don't have any
documentation / access to the person who originally collected the
data. Or am I barking up the wrong tree entirely and should be trying
a different approach? Any advice would be appreciated.

Subject: Sinogram reconstruction

From: Matt J

Date: 10 Nov, 2010 21:38:04

Message: 2 of 8

Derakon <derakon@gmail.com> wrote in message <3818924f-9219-4507-b7e4-3e50d1ab2103@g20g2000prg.googlegroups.com>...
> I have some X-ray CT sinograms that I need to reconstruct so I can run
> some image processing tests on the results. I'm new to sinograms, but
> some searching showed me that iradon() can reconstruct them (
> http://www.mathworks.com/matlabcentral/newsreader/view_thread/265881
> ).
===============

Only if they are parallel beam projections, which is unusual for CT. If they are fanbeam projections, you would need to use ifanbeam, but there you would need to know a lot about your system geometry, e.g., source-detector distance.


> I took a single 672x19874 portion of the array,
> cut it down to 672x1987 by taking every 10th pixel (to reduce
> processing time), transposed it, and passed it to iradon with theta
> arguments ranging from .1/672 up to 1440/672,
=====

Not sure why theta would have anything to do with the number 672.
The only reasonable guess you can make is that for the initial data, theta was derived as,

N=360; %or possibly N=180

theta=linspace(0,N,19874+1);
theta(end)=[];

Since you say you took every 10th angle, you would then do

theta=theta(10:10:end);

> Or am I barking up the wrong tree entirely and should be trying
> a different approach? Any advice would be appreciated.

IMHO, you should be working with data that you collected and know the acquisition geometry for, rather than trying to reverse engineer it. Without this knowledge, even if you eventually get sensible looking images from the data you currently have, there will always be doubt about the validity of the analysis you do on them.

Subject: Sinogram reconstruction

From: Sean

Date: 10 Nov, 2010 21:38:04

Message: 3 of 8

Derakon <derakon@gmail.com> wrote in message <3818924f-9219-4507-b7e4-3e50d1ab2103@g20g2000prg.googlegroups.com>...
> I have some X-ray CT sinograms that I need to reconstruct so I can run
> some image processing tests on the results. I'm new to sinograms, but
> some searching showed me that iradon() can reconstruct them (
>
> ). My sinograms are larger than that example (my smallest array is
> 672x8x19874; I think that what I have here is 8 different Z slices).
> Unfortunately I don't know the angular distance between each
> projection in the sinogram, so I don't know what to use for the second
> argument to iradon(). I took a single 672x19874 portion of the array,
> cut it down to 672x1987 by taking every 10th pixel (to reduce
> processing time), transposed it, and passed it to iradon with theta
> arguments ranging from .1/672 up to 1440/672, and none of the output
> images look sensible, though some of them are pretty in a rather
> abstract way.
>
> Is there some way I can derive the distance argument from the original
> array? Unfortunately this data is rather old and we don't have any
> documentation / access to the person who originally collected the
> data. Or am I barking up the wrong tree entirely and should be trying
> a different approach? Any advice would be appreciated.

A few notes:

The second dimension (columns) of the sinogram is the number of angular icrements.

The middle row is the center of rotation. Thus if you're seeing serious "scalloping" you need to zero pad either the top or bottom of the sinogram to adjust the center of rotation.

Instead of the 3rd dimension being the number of columns in a sinogram, could that be the second dimension and then you have 19874 slices? This seems much more feasible to me than 19874 angles. We do high resolution xcmt scans and use 1500-1800 angles.

Perhaps your sinograms are meant to be 19874x672?

Good Luck!

Subject: Sinogram reconstruction

From: Derakon

Date: 10 Nov, 2010 23:40:03

Message: 4 of 8

On Nov 10, 1:38 pm, "Matt J " <mattjacREM...@THISieee.spam> wrote:
> Derakon <dera...@gmail.com> wrote in message <3818924f-9219-4507-b7e4-3e50d1ab2...@g20g2000prg.googlegroups.com>...
> > I have some X-ray CT sinograms that I need to reconstruct so I can run
> > some image processing tests on the results. I'm new to sinograms, but
> > some searching showed me that iradon() can reconstruct them (
> >http://www.mathworks.com/matlabcentral/newsreader/view_thread/265881
> > ).
>
> ===============
>
> Only if they are parallel beam projections, which is unusual for CT. If they are fanbeam projections, you would need to use ifanbeam, but there you would need to know a lot about your system geometry, e.g., source-detector distance.

Ahh. This would come down to my complete lack of experience with CT as
well. Thanks.

>
> > I took a single 672x19874 portion of the array,
> > cut it down to 672x1987 by taking every 10th pixel (to reduce
> > processing time), transposed it, and passed it to iradon with theta
> > arguments ranging from .1/672 up to 1440/672,
>
> =====
>
> Not sure why theta would have anything to do with the number 672.

Just based on the example I linked, where the suggestion was to use a
second argument of 180 / (size(array)(2))

> The only reasonable guess you can make is that for the initial data, theta was derived as,
>
> N=360; %or possibly N=180
>
> theta=linspace(0,N,19874+1);
> theta(end)=[];
>
> Since you say you took every 10th angle, you would then do
>
> theta=theta(10:10:end);
>
> > Or am I barking up the wrong tree entirely and should be trying
> > a different approach? Any advice would be appreciated.
>
> IMHO, you should be working with data that you collected and know the acquisition geometry for, rather than trying to reverse engineer it. Without this knowledge, even if you eventually get sensible looking images from the data you currently have, there will always be doubt about the validity of the analysis you do on them.

As it happens, I agree entirely with you. What's going on here is that
my PI has an image analysis algorithm that he wants to try applying to
different kinds of data, so years ago he got some sinograms and is
only now getting around to asking me to work on them. Never mind that
most likely the algorithm is only really suited to a particular domain
(microscopy).

Given that applying this algorithm to CTs is a requirement, it sounds
like we would have better luck trying to find some new sinograms to
play with.

Thanks for the advice! Likewise, Sean, your information on common
dimensions of CTs is very helpful.

-Chris

Subject: Sinogram reconstruction

From: Matt J

Date: 11 Nov, 2010 00:13:04

Message: 5 of 8

Derakon <derakon@gmail.com> wrote in message <305d4301-5357-43c9-838e-aa2c2618f97b@g4g2000prj.googlegroups.com>...
>
> As it happens, I agree entirely with you. What's going on here is that
> my PI has an image analysis algorithm that he wants to try applying to
> different kinds of data, so years ago he got some sinograms and is
> only now getting around to asking me to work on them. Never mind that
> most likely the algorithm is only really suited to a particular domain
> (microscopy).
=======

Do you really need the sinograms, or do you just need a reconstructed CT image slice. And how much do you care about what object is scanned and how it was reconstructed?

If you don't care, I could theoretically give you a .mat file with CT image, if you can find an alternative to drop.io where I can leave it.

Subject: Sinogram reconstruction

From: Derakon

Date: 12 Nov, 2010 16:25:21

Message: 6 of 8

On Nov 10, 4:13 pm, "Matt J " <mattjacREM...@THISieee.spam> wrote:
> Derakon <dera...@gmail.com> wrote in message <305d4301-5357-43c9-838e-aa2c2618f...@g4g2000prj.googlegroups.com>...
>
> > As it happens, I agree entirely with you. What's going on here is that
> > my PI has an image analysis algorithm that he wants to try applying to
> > different kinds of data, so years ago he got some sinograms and is
> > only now getting around to asking me to work on them. Never mind that
> > most likely the algorithm is only really suited to a particular domain
> > (microscopy).
>
> =======
>
> Do you really need the sinograms, or do you just need a reconstructed CT image slice. And how much do you care about what object is scanned and how it was reconstructed?
>
> If you don't care, I could theoretically give you a .mat file with CT image, if you can find an alternative to drop.io where I can leave it.

I just need the image slice, really. Part of what bugs me about this
whole project is that our lab has zero interest in reconstruction of
sinograms; my PI just wants me to try processing images taken by X-
rays. If you'd be willing to send me an image, that'd be fantastic.
Could you send it to me at my username on Gmail? Thank you!

Subject: Sinogram reconstruction

From: Sean

Date: 12 Nov, 2010 16:42:03

Message: 7 of 8

Derakon <derakon@gmail.com> wrote in message <464e3196-60d0-4533-95a4-cd269c1f298c@n32g2000prc.googlegroups.com>...
> On Nov 10, 4:13 pm, "Matt J " <mattjacREM...@THISieee.spam> wrote:
> > Derakon <dera...@gmail.com> wrote in message <305d4301-5357-43c9-838e-aa2c2618f...@g4g2000prj.googlegroups.com>...
> >
> > > As it happens, I agree entirely with you. What's going on here is that
> > > my PI has an image analysis algorithm that he wants to try applying to
> > > different kinds of data, so years ago he got some sinograms and is
> > > only now getting around to asking me to work on them. Never mind that
> > > most likely the algorithm is only really suited to a particular domain
> > > (microscopy).
> >
> > =======
> >
> > Do you really need the sinograms, or do you just need a reconstructed CT image slice. And how much do you care about what object is scanned and how it was reconstructed?
> >
> > If you don't care, I could theoretically give you a .mat file with CT image, if you can find an alternative to drop.io where I can leave it.
>
> I just need the image slice, really. Part of what bugs me about this
> whole project is that our lab has zero interest in reconstruction of
> sinograms; my PI just wants me to try processing images taken by X-
> rays. If you'd be willing to send me an image, that'd be fantastic.
> Could you send it to me at my username on Gmail? Thank you!

I X-CT slices of concrete you could have. I know concrete probably isn't what you're researching, but it's very heterogenous and has imaging artifacts present in tomography (rings, minor scalloping) etc. You could also probably just do a google image search and find some xray slices.

Subject: Sinogram reconstruction

From: Derakon

Date: 12 Nov, 2010 19:55:03

Message: 8 of 8

On Nov 12, 8:42 am, "Sean "
<sean.dewol...@nospamplease.umit.maine.edu> wrote:
> Derakon <dera...@gmail.com> wrote in message <464e3196-60d0-4533-95a4-cd269c1f2...@n32g2000prc.googlegroups.com>...
> > On Nov 10, 4:13 pm, "Matt J " <mattjacREM...@THISieee.spam> wrote:
> > > Derakon <dera...@gmail.com> wrote in message <305d4301-5357-43c9-838e-aa2c2618f...@g4g2000prj.googlegroups.com>...
>
> > > > As it happens, I agree entirely with you. What's going on here is that
> > > > my PI has an image analysis algorithm that he wants to try applying to
> > > > different kinds of data, so years ago he got some sinograms and is
> > > > only now getting around to asking me to work on them. Never mind that
> > > > most likely the algorithm is only really suited to a particular domain
> > > > (microscopy).
>
> > > =======
>
> > > Do you really need the sinograms, or do you just need a reconstructed CT image slice. And how much do you care about what object is scanned and how it was reconstructed?
>
> > > If you don't care, I could theoretically give you a .mat file with CT image, if you can find an alternative to drop.io where I can leave it.
>
> > I just need the image slice, really. Part of what bugs me about this
> > whole project is that our lab has zero interest in reconstruction of
> > sinograms; my PI just wants me to try processing images taken by X-
> > rays. If you'd be willing to send me an image, that'd be fantastic.
> > Could you send it to me at my username on Gmail? Thank you!
>
> I X-CT slices of concrete you could have.  I know concrete probably isn't what you're researching, but it's very heterogenous and has imaging artifacts present in tomography (rings, minor scalloping) etc.  You could also probably just do a google image search and find some xray slices.

If you're willing to send them, I'll take them! Variety of subject
matter won't hurt me any; this is all well away from what we normally
image anyway (we're a microscopy lab).

Good call on the Google Images search; I can't believe I didn't think
of that...

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us