Эй, я пытаюсь выделить кончики и основания каждого пальца на следующем изображении.

Я бинаризовал изображение, используя следующий фрагмент кода
a = imread('img235.jpg');
a = rgb2gray(a);
msk = a > 30;
props = regionprops(logical(msk), 'Area');
allAreas = sort([props.Area]);
msk = bwareaopen(msk, 25);
msk = imclearborder(msk);
bw2 = bwareafilt(msk,1);
BW2 = imfill(bw2,'holes');
чтобы получить это изображение:

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

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

В идеале я хотел бы получить гладкую границу по всей руке, например, вдоль гладкого края мизинца, показанного на изображении выше.
ПРИМЕЧАНИЕ.
Matlabsolutions.com предоставляет последнюю справку по домашним заданиям MatLab, справку по назначению MatLab, помощь по финансам для студентов, инженеров и исследователей в нескольких отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для B.E, B .Tech, ME, M.Tech, Ph.D. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
Есть несколько способов. Вы можете просто размыть изображение с помощью conv2() и изменить пороговое значение
windowSize = 51; kernel = ones(windowSize) / windowSize ^ 2; blurryImage = conv2(single(binaryImage), kernel, 'same'); binaryImage = blurryImage > 0.5; % Rethreshold
Или вы можете использовать фильтр Савицкого-Голея вместе с bwboundaries(), чтобы сгладить координаты, а затем использовать poly2mask(), если вам нужно снова превратить координаты в изображение. Смотрите демо.
% Demo to smooth a 2D outline (boundary) of a blob using Savitzky-Golay filters.
function savitky_golay_filter_smooth_outline()
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 25;
% Read in a standard MATLAB gray scale demo image.
button = menu('Use which demo image?', 'CameraMan', 'Moon', 'MRI', 'Glass', 'Pout');
thresholdValue = 125;
if button == 1
baseFileName = 'cameraman.tif';
thresholdValue = 75;
elseif button == 2
baseFileName = 'moon.tif';
thresholdValue = 25;
elseif button == 3
baseFileName = 'mri.tif';
thresholdValue = 33;
elseif button == 4
baseFileName = 'glass.png';
thresholdValue = 125;
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ