Effacer les filtres
Effacer les filtres

Image Filtering in Radon space?

2 vues (au cours des 30 derniers jours)
Korbi
Korbi le 10 Mar 2020
Commenté : Korbi le 11 Mar 2020
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!

Réponse acceptée

Image Analyst
Image Analyst le 10 Mar 2020
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.
  2 commentaires
Korbi
Korbi le 10 Mar 2020
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.
Thank you, I'll try that.
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?
The images were captured via Optical Lockin Thermography; i.e. periodically heating up the part via an external heat source. The depth to which thermal waves penetrate is proportional to the square root of the frequency with which the heat source (here a laser) is modulated. An infrared camera captured the heating and cooling of the part, and a Fourier transformation was applied to detect the phase shift between each pixel's response and the heating laser signal.
Since the thermal conductivity of carbon fibre is markedly different from that of PA, we can determine the location of fibre bundles based on contrast. In my third set of pictures, the upper left one, which was heated at a frequency of 5Hz, demonstrates that.
For lower layers, each matrix-fibre boundary surface acts as a heat barrier, meaning that in those places, we have a different phase shift.
I don't think I'm doing a great job explaining this, English isn't my native language, so I found an article describing the process in English: Lockin Thermography with Optical or Ultrasound Excitation
Korbi
Korbi le 11 Mar 2020
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.
Hm, I don' think I'm doing this right. If I set my Gauss filter's standard deviation to something low, like the default 1, it just zeroes my entire image outside of the centre.
If I set it to the size of the image, it only rescales the pixels' amplitude, except where the shifted filter didn't reach.
I probably didn't explain my goal very well, let me try again:
I want to reduce the variance (along the rows) in the Radon transformation of the second image, but only in the place where the first image had its highest peak. If I only apply a Gauss filter to that part of the image, though, I get a sudden drop in the variance plot (see my third set of images in the original post). So my idea was to apply a smoothing function which smoothes the central part the most, and the other parts less.
Is there any function like what I'm envisioning?

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by