Используйте КОРОЛЕЙ от руки, чтобы совершенствовать маски сегментации

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

Введение - сегментация изображений

Алгоритмы сегментации используются, чтобы сегментировать интересные части изображения. Чтобы проиллюстрировать, этот пример использует K-средние-значения, кластеризирующиеся, чтобы сегментировать кость и ткань в изображении MRI.

im = dicomread('knee1.dcm');
segmentedLabels = imsegkmeans(im,3);
boneMask = segmentedLabels==2;
imshowpair(im, boneMask);

Постобработайте маски сегментации

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

boneMask = bwareafilt(boneMask, 2);
imshowpair(im, boneMask);

Преобразуйте Маску в объект Freehand ROI

Чтобы совершенствовать ребра автоматической k-средней сегментации, преобразуйте эти две маски в интерактивные объекты ROI от руки. Во-первых, получите местоположения граничных пикселей, которые формируют рисунок этих двух сегментированных областей. Обратите внимание на то, что эти объекты ROI плотно выбираются - их свойство Position имеет то же разрешение как пиксели изображения.

blocations = bwboundaries(boneMask,'noholes');
figure
imshow(im, []);
for ind = 1:numel(blocations)
    % Convert to x,y order.
    pos = blocations{ind};
    pos = fliplr(pos);
    % Create a freehand ROI.
    drawfreehand('Position', pos);
end

Отредактируйте КОРОЛЕЙ

Объект Freehand ROI позволяет простой 'круглой резинке' интерактивные редактирования. Чтобы отредактировать ROI, перетащите любой из waypoints вдоль контура ROI. Можно добавить дополнительный waypoints где угодно на контуре путем двойного клика по ребру ROI или при помощи контекстного меню, доступного путем щелчка правой кнопкой по ребру.

Преобразуйте КОРОЛЕЙ от руки Назад в маски

После редактирования КОРОЛЕЙ преобразуйте эти объекты ROI назад в бинарные маски с помощью объекта ROI метод createMask. Отметьте дополнительный шаг, требуемый включать граничные пиксели в итоговую маску.

% Convert edited ROI back to masks.
hfhs = findobj(gca, 'Type', 'images.roi.Freehand');
editedMask = false(size(im));

for ind = 1:numel(hfhs)
    % Accumulate the mask from each ROI
    editedMask = editedMask | hfhs(ind).createMask();

    % Include the boundary of the ROI in the final mask.
    % Ref: https://blogs.mathworks.com/steve/2014/03/27/comparing-the-geometries-of-bwboundaries-and-poly2mask/
    % Here, we have a dense boundary, so we can take the slightly more
    % performant approach of just including the boundary pixels directly in
    % the mask.
    boundaryLocation = hfhs(ind).Position;
    bInds = sub2ind(size(im), boundaryLocation(:,2), boundaryLocation(:,1));
    editedMask(bInds) = true;
end

Смотрите также

| | | | | |