0

I have OCT imaging data which I am trying to manipulate:

enter image description here

I would like to remove all points bounded by the concentric circles at the center of the image. Up to this point, I was manually specifying a radius for the largest circle and setting all points within the area of the circle to black. These circle sizes can vary depending on the image source and due to artifacting however, so I am trying to find a more ideal way to perform this removal.

I originally thought I could use imfindcircles() to identify these circles, but the algorithm is failing to detect most of them regardless of specified radii. Methods relying on connected components (bwareaopen, regionprops) also fail as the concentric circles appear to be connected to the larger structure.

One thought I had was that I could convert to polar coordinates, as the center of the concentric circles will always be at the center of the image, producing this image:

width = 512
greyImg = ImToPolar(rgb2gray(rgb_img), 0, 1, width, width);

enter image description here

This should be significantly easier to process. Does anyone have any ideas?

andrew
  • 2,451
  • 1
  • 15
  • 22
  • You put the wrong images. –  Nov 12 '15 at 19:04
  • Well that's embarrassing, fixed –  Nov 12 '15 at 19:30
  • The Cartesian to polar transform isn't a good idea. It needs to be performed with the pole placed at the center of the circle, which you don't know. –  Nov 12 '15 at 20:25
  • The center of the circle will always be at the center of the images generated using this imaging modality. Sorry, I should have specified that in my original post. –  Nov 12 '15 at 20:32

1 Answers1

0

Accumulate all image columns horizontally. Then the vertical profile will allow you to find the circle radii more easily (they appear as peaks). Knowing the external radius, you can extract a circular ROI from the original image.

enter image description here