Transcription
Hello everybody, and welcome back. Until now, we've focused on two core concepts in CT physics. The first has been centered around data acquisition, and the second's been looking at image display: how we can allocate a Hounsfield unit to each pixel within our image, and then apply a grayscale window to those Hounsfield units that will allow us to display a grayscale 2D image that we can actually interpret.
What we're going to be looking at in the next few talks is the link between these two concepts: how we can take the initial data that we've generated from all the projections around the patient and figure out what the attenuation value is for different spatial locations within our patient. We call them voxels within the patient. If we're looking at a specific slice through a patient, at each XY location within that slice, how much attenuation is occurring due to the tissue within that voxel? And we take that attenuation value and we convert it into Hounsfield units. That process we've looked at before, ultimately allowing us to display the image.
So, how do we go about calculating that attenuation data? That process is called image reconstruction, and we're going to be looking at that here. We've seen this image before, hopefully you're familiar with this. We're passing X-rays through a patient, and the transmitted X-rays are hitting the detector here, and we can calculate the degree of attenuation that happens across the patient here as X-rays pass along a specific path towards a detector. And we can plot those degrees of attenuation.
We look at how we calculate that attenuation for one projection. This data that we've calculated here is called a projection. It's for one specific angle through the patient. If we were to change the angle of the X-ray source, we are creating a different projection. We're creating a data set through a different angle through the patient. That calculated data, we can represent visually here in what's known as a sinogram. Each column of a sinogram represents data from a specific projection. As we change the angle of the projection, we're going to add a new column into the sinogram.
So let's have a look at what that looks like now. As I rotate the X-ray source around the patient, we're going to see that the data changes depending on the angle that we're projecting those X-rays through. Each line that we're adding to the sinogram now represents projection data at a different angle. So as we move along the X-axis of this sinogram, we're changing the angle of incidence of the X-rays towards our patient.
Now, this data that we have in the sinogram here is what's known as our raw data. And we talked about that raw data needs to be pre-processed. It needs to be cleaned up a little bit. We saw in helical or spiral CT scanning that we want to interpolate the data to get perfect axial slices through our patient. We can also have a faulty detector. We can look at the detectors on either side of that faulty detector and interpolate the data to assume what this faulty detector perhaps would have detected if it was working. We can try and reduce the noise within our image. We can have anti-scatter algorithms. There's lots of pre-processing that can occur with the sinogram data.
Once we have that pre-processed sinogram data, we then need some way of taking that data and figuring out what the attenuation values are for each voxel within that specific slice. That process is what's known as image reconstruction.
Now, the process we're going to look at today is going to generate an image that looks like this. You can see it's not a perfect representation of what's actually happening within the patient, but we can see what the underlying structures are and where they sit within the image. Now, this process that we're looking at today is what's known as simple back projection, and it's going to form the backbone for future image reconstruction that we look at in future talks.
Now, what exactly is the process of back projection? If you think about it, when we are acquiring data, the CT machine has no idea what's sitting within it. This is an unknown. It doesn't know the patient's anatomy. The only data we have is the transmitted X-rays hitting our detector here. That's the eyes of the CT machine. It's that data that we need to use to calculate attenuation values.
Throughout these examples, I'm going to be using this 6x6 matrix to simplify some of these concepts, but this is happening over a larger scale, much larger than a 6x6 matrix. So we see here, we don't actually know what's lying within the patient here. It's only the detected data that we have.
If we were to pass an X-ray through this patient towards a specific detector, we could measure or calculate the degree of attenuation that's happening across this patient here, across the field of view. And we looked at that formula before, where the incident X-ray number multiplied by the attenuation across the entire length of the patient, the distance X, is going to give us the number of transmitted X-rays, or the intensity of transmitted X-rays that hits our detector. And we can rearrange this formula to isolate the linear attenuation coefficient and figure out what's the attenuation across the entire patient here. And that attenuation value, we can represent as a number. In this example, I'm going to represent it as a number six. Doesn't matter what this attenuation value is here, this is just an example. And we can do that for every detector across this entire projection here and calculate all of the values. And our six-pixel example, we can calculate six different values here.
This is essentially a line in our sinogram. It's the projection at a specific angle. At this angle, we're talking about 0 degrees. So this sinogram here is a visual representation of the attenuation values across a specific location in our slice that hits specific locations of our detectors at a specific projection angle. And it's at this stage that the CT machine only has this specific data for this projection.
And the process of back projection is saying, "I've measured this data from this angle. What if I smear that data back across the slice? What if I try and predict what structures would have caused this projection data?" Now, it can only be accurate in this axis here. We can't figure out where that attenuation is happening across the longitudinal axis of our X-rays. So we spread that data across.
Let's look at what that looks like for our six-pixel array. We spread the measured linear attenuation across a specific line of our slice across the matrix of the slice, and we want to divide that by the number of pixels that we're spreading it across. Now we've got attenuation data that, if we summed it up, would equal the total attenuation across that slice. It's this spreading of the data and dividing that data down that gives us our back projection for a specific angle. This is often called a summation projection because if we sum all of the rows here, we're going to get the total linear attenuation across that slice.
Now, this back projection has occurred over a single slice at a single angle. What now if we use a second angle? Again, now we have a patient, we don't know the attenuation values through that patient. The CT machine doesn't know the anatomy. We pass X-rays through that patient and calculate the attenuation, the sum attenuation across the path of that X-ray. We then spread out or back project that data across the same matrix. Now we change the angle of our X-ray, we change the projection angle, and we recalculate the linear attenuation coefficient for all of the columns now in our array. Again, we can spread out that data, average out the linear attenuation coefficient that we've calculated, and we've got two separate arrays.
Those two arrays represent attenuation data or back projection data from two different angles. Here, the angles are perpendicular to each other, 90 degrees difference. What we can do is overlap those arrays and add up the values that we have now back projected. When we overlap them, add up the values, and now I've added a grayscale value to represent those values graphically, you can see that we've started to develop an image. And that image, you can kind of see the underlying structure here. This is only two separate projections, and it's only a 6x6 pixel array, and we're already starting to get an idea of what the underlying anatomy is.
And this is the core concept for simple back projection: it's taking back projection that we've calculated for multiple different projection angles and adding those matrices together using the specific pixel locations, the same locations for each one of our projections, and overlapping them on top of one another. The more we do this, the more accurate our representation of what the true anatomy is going to be.
Now, this is a two-projection example. Let's look at an example where we go through the patient at 15-degree increments. We've seen this as our 0-degree increment. We've got our back projection data here. That back projection data came from a single column within our sinogram. Now let's rotate the CT machine by 15 degrees. See how our sinogram changes ever so slightly. If we were to continue this at 15-degree increments for the first 90 degrees around our patient, we would have generated multiple different sinogram data sets. Each one of these represents a different angle of X-ray incidence through our patient and different detector values that have changed because of that angle change.
Now we can take these data sets and back project them and overlap them on top of one another. We take our zero-degree data set, and we've averaged out. That's why the intensity is getting slightly lower. We've averaged out that attenuation across the field of view, and we can add each one of these data sets. But we now need to lay it over the initial data set at an increment of 15 degrees because that's what we've measured each one of these at. And as we do that, you can see that the areas that are overlapping are adding together. The areas of white on our sinogram are representing areas of higher attenuation, and as they overlap, we get whiter and whiter regions within our image. See how the overlapping and averaging out of these back projections is starting to produce an underlying image? We can see our initial image starting to form here.
Now, remember, when we're taking data from our detectors and we're back projecting that data, we're back projecting in a parallel beam geometry, not fan beam geometry that we acquired the data in. And we need to compensate for that mathematically. That's outside the scope of these talks, but this is just a reminder that it's not always as simple as it seems. This process, however, still works of back projecting that data that we've detected on our images. We can repeat this process. Now I'm using 15-degree increments as we're rotating around our patient, and you can see how areas where there isn't any attenuating structures are getting darker, and areas where there are are getting brighter and brighter. Those overlapping values are adding on.
The more and more we repeat this process, you know, we're getting a thousand, 2,000 projections for one rotation around a patient. We're dealing with not 15-degree increments, we're dealing with fractions of a degree increments. We're going to get an image that eventually looks something like this. Now, it's not a perfect image. This is the image that we looked at at the beginning of the talk. We can see that there's blurring on the outside of our image, but we can really get an appreciation for what the underlying anatomy is.
Now, there's another way that we can represent this data, and that's a 2D representation. I've done a very crude diagram of what this would look like as a 2D data set. The more intense the signal here, the higher the linear attenuation coefficient that we have calculated. The higher the peak is going to be on this 2D data set. And you can see how the signal intensity tapers out as we head to the peripheries of our objects, as represented by this slope coming here. What's happened through the process of simple back projection is because we're smearing the data across the slice, we're adding blur into the image. We're not getting crisp outlines to our image.
Now we need a process to take this simple back projection data, which has this inherent blur in the image because of that smearing out of data, and we need a way of taking out that blur, of deblurring the image. And it turns out there's a mathematical process for how that blur has been introduced into the image, and that's what's known as convolution. It's taken the true data that's come through our projections and it's convoluted with a blur function because of our rotation around the patient and the smearing of the data. It turns out that we can deconvolve the image through a deconvolution kernel or filter, and it will take this data and it will convert it into data that looks like this: a much crisper data set. Our areas with no attenuation are truly back within the image, and our areas of attenuation are now well-defined and have the same attenuation value through the image.
This example that we've got here, there's no differing attenuation. All the white areas in the image have the same attenuation value, and you can see how our 2D representation has now changed. There's no tapering off of that data. We've either got a specific value of linear attenuation or no attenuation at all.
This process here, this deconvolution, this filtering, is what's known as filtered back projection, and it's going to be the topic of our next talk. So join me in that next talk. We're going to try and describe filtered back projection primarily through visual means, not get too into the underlying mathematics. There's a lot of complicated mathematics that go along. We'll also see that filtered back projection is not perfect, and we're going to need to resort, in most modern CT scanners, to a further step known as iterative reconstruction, which will be the following talk.
So I hope this has brought some clarity into your mind how we can go about starting to calculate attenuation coefficient values for specific voxels within our image. Again, if you want to practice this, I've linked a question bank link below, taking questions from actual past papers, included them there, and I answer those questions in video format, show you how I would go about answering those questions, but also show you how they could ask the questions in different ways. So until the next talk, I'll see you all there. Goodbye everybody.