Dear specialists, Currently, I have to detect some circles from CT scan images. The sample is as below
The radius range is from 5-110, so I tried to divide this range into several smaller intervals. However, the results is not adequate. Could anybody please help me to detect them ? Thank you very much.

2 commentaires

Peter To
Peter To le 7 Avr 2014
Sorry, I forget to mention that I use imfindcircles command. This command advices rmax <3*rmin and rmax-rmin <100.
Spandan Tiwari
Spandan Tiwari le 11 Avr 2014
Did you try changing the Sensitivity parameter in imfindcircles? Can you show the code you used?

Connectez-vous pour commenter.

 Réponse acceptée

Image Analyst
Image Analyst le 7 Avr 2014

0 votes

Did you try imfindcircles()?

11 commentaires

Peter To
Peter To le 8 Avr 2014
As I mentioned in my comment, I used imfindcircles, but the results wasn't good. I have tried to play with parameters, but no improvement gained. I was surprised because I thought those circles should be easy to be detected.
Image Analyst
Image Analyst le 8 Avr 2014
Sorry - I must not have seen your comment. If you can't get imfindcircles to work, then you can draw them manually with imellipse - let me know if you need a demo.
Or else you should try to do a background correction to brighten the center and dim the outside. Take the centroid and then take the average intensity profile radially from the centroid. Fit a quadratic to it and use it to create a model background then divide the image by it.
Then use a noise reduction filter, maybe start simple, like with medfilt2(). If that doesn't work, then try more sophisticated ones like mean shift, non-local means, or things like that.
Then try to use an edge detector like imgradient or a texture filter like entropyfilt() or stdfilt(). It will definitely take some experimentation.
Peter To
Peter To le 8 Avr 2014
@Image Analyst: Thank you very much for your reply. Because I have thousands of images like this to analyse, I think I prefer an automatic solution with imfindcircles or something similar. I also had tried to correct the contrast, but the noise became more clear that reduced the accuracy of imfindcircles. Therefore, I tried to reduce the noise first. I haven't used non-local means but I used medfilt2 and wiener2. However, both of them do not increase the accuracy of detection. Maybe I did not use the right parameters, but I don't know how because I have tried several values in vain. As I mentioned above, I tried to divide the radius range into several small interval with different sensitivity. However, the big circles can be detected with only very high sensitivity 0.98, which makes some fake circles. It surprised me because I thought the big circles are very easy to be detected.
Image Analyst
Image Analyst le 9 Avr 2014
Can you average several slices together to reduce noise, then use the same circles for each slice?
Peter To
Peter To le 9 Avr 2014
Modifié(e) : Peter To le 9 Avr 2014
@ Image Analyst: Yes, I did it. I tried to read 5 slices at once, and correlated the images. When a point had its grayscale values more than 150 in 4 slices, I set the value to 255. However, it did not improved the results. Do you have any suggestion ?
Image Analyst
Image Analyst le 9 Avr 2014
Have you tried averaging them together? Maybe try texture segmentation. Check out standard ISO 25178 on Surface Texture.
Peter To
Peter To le 11 Avr 2014
@Image Analyst: The radius of circles should change by slices, so the averaging process can make some extra difficulties for the circle detection. I have no idea about the texture segmentation. Could you please tell me more precisely?
Image Analyst
Image Analyst le 11 Avr 2014
Try entropyfilt() and stdfilt() and see what you get.
Peter To
Peter To le 12 Avr 2014
I tried, and both of them give me ugly results like
Image Analyst
Image Analyst le 12 Avr 2014
The standard deviation filter did a pretty good job on the bigger circles. See attached m-file.
Peter To
Peter To le 14 Avr 2014
It is awesome, I will study your code right now. Although this code cannot detect the small circles, it helps me to start over. Thank you very much.

Connectez-vous pour commenter.

Plus de réponses (1)

Julia
Julia le 15 Avr 2015

0 votes

This code looks really useful. I tried to use it for the detection of pores in the attached picture. As you can see, especially in the center, the pore spaces are widely connected, so a distinction would be needed. Basically i would like to fit in circles into the pore spaces to get a pore size distribution. Using your proposed code as it is does not help in this case. Could you suggest which parameters to play with in order to make it fit better for less obvious cases like mine?

2 commentaires

Image Analyst
Image Analyst le 15 Avr 2015
There is no picture attached. I suggest you start a new question with it. You can reference this one if you want.
Julia
Julia le 16 Avr 2015
Modifié(e) : Julia le 16 Avr 2015
I attached the picture. I will also start a new question. Thanks. http://www.mathworks.com/matlabcentral/answers/203771-detect-highly-connected-pores-in-a-ct-scan

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by