Удаление концентрических кругов из изображения в Matlab

У меня есть данные визуализации OCT, которыми я пытаюсь манипулировать:

введите описание изображения здесь

Я хотел бы удалить все точки, ограниченные концентрическими кругами в центре изображения. До этого момента я вручную указывал радиус для наибольшего круга и устанавливал все точки в области круга черным. Эти размеры круга могут варьироваться в зависимости от источника изображения и из-за артефактов, поэтому я пытаюсь найти более идеальный способ выполнить это удаление.

Первоначально я думал, что мог бы использовать imfindcircles(), чтобы идентифицировать эти круги, но алгоритм не может обнаружить большинство из них независимо от указанных радиусов. Методы, основанные на подключенных компонентах (bwareaopen, regionprops), также терпят неудачу, поскольку концентрические круги, кажется, связаны с большей структурой.

У меня была мысль, что я могу преобразовать в полярные координаты, поскольку центр концентрических кругов всегда будет в центре изображения, создавая это изображение:

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

введите описание изображения здесь

Это должно быть значительно проще для обработки. У кого-нибудь есть какие-либо идеи?

1 ответ

Решение

Накопить все столбцы изображения по горизонтали. Тогда вертикальный профиль позволит вам легче находить радиусы окружности (они выглядят как пики). Зная внешний радиус, вы можете извлечь круговую область интереса из исходного изображения.