У меня есть двоичное изображение , и я хотел бы обнаружить все области приблизительно в форме капсул, такие как this (отмечены красным).
Размер и ориентация желаемых областей различны для каждого изображения и неизвестны.
Желаемое соотношение высоты и ширины составляет от 3 до 5.
Я не знаю, как определить форму с неизвестной ориентацией и размером, поэтому я попытался использовать соотношение области площадь и диагональ ее ограничивающего прямоугольника в качестве критерия, но результат не очень хороший. Вот код, который я использую.
regions = bwconncomp(img);
sizes = cellfun(@numel, regions.PixelIdxList);
N = regions.NumObjects;
is_capsule = false(N, 1);
for k = 1:N
idx = regions.PixelIdxList{k};
[row, col] = ind2sub(sz, idx);
h = max(row) - min(row) + 1;
w = max(col) - min(col) + 1;
l = numel(idx) / (h^2 + w^2);
if l >= 0.1 && l <= 0.2
is_capsule(k) = 1;
end
end