У меня есть изображение, в котором я хотел бы сгладить его края. Было немного сложно получить более точную сегментацию. Однако я получил решение, адаптировав предложение от: What can I do to enhance my image quality?.Как сгладить края многокомпонентного изображения?
оригинальных изображений здесь:
и сегментированного изображения, а также
Код я использовал это следующим образом:
%# Read in image
Img = imread('image_name.png');
%# Apply filter
h = fspecial('average');
Img = imfilter(Img, h);
%# Segment image
Img = rgb2gray(Img);
thresh = multithresh(Img, 2);
Iseg = imquantize(Img, thresh);
figure, imshow(Iseg,[]), title('Segmented Image');
%# separate channels
blackPixels = (Iseg == 1);
grayPixels = (Iseg == 2);
whitePixels = (Iseg == 3);
%# grow white channel
whitePixels_dilated = imdilate(whitePixels, strel('disk', 4, 4));
%# Add all channels
Iseg(whitePixels | whitePixels_dilated) = 3;
figure, imshow(Iseg,[]);
Моя задача сейчас заключается в разглаживают краями твердого тела (белые пиксели) или краями всех объектов. Я не знаю, как это сделать. Я пробовал фильтровать, но это снимает только небольшие пятна. Прошу вас, пожалуйста, за любую помощь, идеи, предложения или советы. Спасибо.
Какую фильтрацию вы попробовали? – Max
Если вы сглаживаете края, это больше не будет сегментированным (индексированным) изображением. Это то, что вы хотите? – beaker
@ user2201 Возможно, вместо сглаживания краев вы должны попытаться применить алгоритм установки окружности на индексированном изображении. Чем вы можете нарисовать круги, найденные вами по индексированному изображению, с более толстой «LineWidth», и вы получите более четкие контуры в ваших кругах. А затем - в зависимости от точности, в которой вы нуждаетесь, вы можете индексировать пиксели, установленные в круг, как внутри, так и вне сегмента. – Max