Используйте ROI от руки, чтобы совершенствовать маски сегментации

В этом примере показано, как совершенствовать логическую маску сегментации путем преобразования его в объект 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

Отредактируйте ROI

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

Преобразуйте ROI от руки Назад в маски

После редактирования 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

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

| | | | | |