research diary
Jun. 15th, 2002 12:00 amI figured out exactly what the Radon Transform does today, and implemented it in Matlab. My MATLAB
implementation is based on a description I found on a web page for a DSP
course somewhere; the essential suggestion was to rotate the image itself (of which we are taking the radon transform) rather than trying to reposition the projection surface. It's the sort of thing that seems completely obvious once you know it, and it makes the implementation completely trivial: use imrotate
to rotate the image into position, and then use sum
to take the sum along the first dimension. That's all! Weighted back-projection (which is reconstruction in real-space, as opposed to fourier-space reconstruction via the central-line theorem) can also be implemented in this way. Nifty! I'm still not sure how the Radon Transform is useful to us; it seems to me that it simply describes the CAT
-scan-like process that's actually done by the microscope.
I modified my pattern-matching-by-cross-correlation program to return not all of the cross-correlation plots, but simply (1) the maximum of all of the cross-correlation plots for each pixel and (2) the rotation angle of the reference image which resulted in that maximum. Some simple thresholding and multiplication results in a nice picture that shows where the helicies lie and their detected orientation. However, I still haven't implemented anything to actually extract the position of helical segments. Along each helix there is a nice chain of little peaks in the maximum-cross-correlation plot (resulting from the periodicity with which the reference should match the helix, I think), and I think there should be a good way to lock onto these little peaks and return them.
Yes, rotation does commute with the Fourier transform. The essential part of the proof is that the Fourier transform includes the inner product <x,k>. If we apply a rotation matrix R to the coordinate position vector x, then we can move it over to the wave-vector as R-1k. That's really the most important part. Unfortunately it doesn't work in our sampled space, so this elegant property is useless to us. Padding with zeros does some curious things I don't fully understand yet.