MATLAB: Image Filtering in Radon space

image analysisImage Processing Toolboxradon transformation

Hello,
I've got several pictures of the same part, each containing information from a deeper layer than the image before. To identify the direction of carbon fibre lines in the images, I computed the Radon transformation of those images, and then the variance along every angle projection. High points in the variance tell me that a lot of lines run 90° to that angle. Images from deeper than one layer in always show bumps not only for the new layer direction, but also for the layers above. You can see this with test images in the picture below:
From left to right: Picture with Hamming window, Radon transformation, Variance of the rows of the Radon image.
Sadly, the new layers don't show up with as intense a bump as the old layers. To fix this, I tried to smooth the region in the 2nd Radon transform where the high point was detected in the first image, and at the angles around it.
From left to right: Picture, Radon transformation with smoothed 0° zone, Variance with smaller prominence of the 0° spike.
However, when I try this approach with real pictures, I get bad border effects, since the Radon summation rarely averages out to 0 as nicely as it does with test pictures.
So, my idea is to use a Gauss filter, but structure it in such a way that it is centered on the location of maximum variance, but gets progressively weaker the further away from the center it gets.
My question is, how would I go about programming a filter like that?
Thanks in advance!

Best Answer

I'm not sure why a deeper slice contains clutter from slices above it. Why is that? What's the source of these images? Is it microCT?
Is the radon transform done on just one slice image? Or is it at some oblique angle?
Anyway...
For a filter that scans the image spatially with a window, you can use imgaussfilt(), or fspecial() and imfilter().
If you just want to multiply the whole image by a guassian, use fspecial to construct an image of a Gaussian the same size as your image. Then use imtranslate() to shift the center to wherever you want. Then multiply pixel-by-pixel.