Сглаживание линий сегментированного изображения - PullRequest
2 голосов
/ 18 декабря 2009

alt text

Здравствуйте, У меня есть сегментированное изображение, как показано. Есть ли способ сгладить линии, чтобы они не выглядели такими волнистыми? Спасибо.

Ответы [ 2 ]

4 голосов
/ 18 декабря 2009

Для следующего кода требуется набор инструментов для обработки изображений:

url = 'http://i182.photobucket.com/albums/x11/veronicafmy/FYP/picture5segmentedimage.jpg';
rgb = imread(url);
bw = im2bw(rgb2gray(rgb), 0.5);
se = strel('line',50,74); % 74 degrees determined by inspection
bw2 = imclose(bw,se);
se2 = strel('line',50,74+90);
bw3 = imclose(bw2,se2);

Вот результат:

smoothed result

Необязательный шаг: постобработка при прореживании:

bw4 = bwmorph(bw3,'thin',inf);
0 голосов
/ 18 декабря 2009

Я думаю, вы должны спросить себя, почему это должно быть более гладким. Если вы сегментировали изображение и получили такой результат, уверены ли вы, что сглаживание даст вам правильный результат? Если это так, то ответ Стива Эддинса, похоже, помогает.

Если, с другой стороны, объект, который вы пытаетесь сегментировать, гораздо более плавный, чем результат, я бы предложил один из двух подходов.

  1. Если целевой объект представляет собой крест (две линии), я, вероятно, рассчитал бы линии и изменил бы представление на два отрезка. Затем они могут быть воспроизведены с любой точностью и плавностью. Чтобы сделать это, вы можете либо найти центр и вращение, используя какой-то алгоритм обнаружения объектов, либо использовать грубые преобразования, чтобы найти линии. Последнее, вероятно, намного проще.

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

...