Обнаружьте ячейку Используя обнаружение ребра и морфологию

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

Шаг 1: Readimage

Читайте в изображении cell.tif, которое является изображением ячейки рака простаты. Две ячейки присутствуют в этом изображении, но только одна ячейка видна в целом. Цель состоит в том, чтобы обнаружить, или сегмент, ячейка, которая абсолютно видима.

I = imread('cell.tif');
imshow(I)
title('Original Image');
text(size(I,2),size(I,1)+15, ...
    'Image courtesy of Alan Partin', ...
    'FontSize',7,'HorizontalAlignment','right');
text(size(I,2),size(I,1)+25, ....
    'Johns Hopkins University', ...
    'FontSize',7,'HorizontalAlignment','right');

Шаг 2: обнаружьте целую ячейку

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

Используйте edge и оператор Sobel, чтобы вычислить пороговое значение. Настройте пороговое значение и используйте edge снова, чтобы получить бинарную маску, которая содержит сегментированную ячейку.

[~,threshold] = edge(I,'sobel');
fudgeFactor = 0.5;
BWs = edge(I,'sobel',threshold * fudgeFactor);

Отобразите получившуюся бинарную маску градиента.

imshow(BWs)
title('Binary Gradient Mask')

Шаг 3: расширьте изображение

Бинарная маска градиента показывает строки высокой контрастности в изображении. Эти строки действительно не совсем формируют рисунок схемы предмета интереса. По сравнению с оригинальным изображением существуют разрывы в строках, окружающих объект в маске градиента. Эти линейные разрывы исчезнут, если изображение Sobel будет расширено с помощью линейных элементов структурирования. Создайте два perpindicular линейных элемента структурирования при помощи функции strel.

se90 = strel('line',3,90);
se0 = strel('line',3,0);

Расширьте бинарную маску градиента с помощью вертикального элемента структурирования, сопровождаемого горизонтальным элементом структурирования. Функция imdilate расширяет изображение.

BWsdil = imdilate(BWs,[se90 se0]);
imshow(BWsdil)
title('Dilated Gradient Mask')

Шаг 4: заполните внутренние разрывы

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

BWdfill = imfill(BWsdil,'holes');
imshow(BWdfill)
title('Binary Image with Filled Holes')

Шаг 5: удалите подключенные объекты на границе

Ячейка интереса была успешно сегментирована, но это не единственный объект, который был найден. Любые объекты, которые соединяются с границей изображения, могут быть удалены с помощью функции imclearborder. Чтобы удалить диагональные связи, установите возможность соединения в функции imclearborder к 4.

BWnobord = imclearborder(BWdfill,4);
imshow(BWnobord)
title('Cleared Border Image')

Шаг 6: сглаживайте объект

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

seD = strel('diamond',1);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
imshow(BWfinal)
title('Segmented Image');

Шаг 7: визуализируйте сегментацию

Можно использовать функцию labeloverlay, чтобы отобразить маску по оригинальному изображению.

imshow(labeloverlay(I,BWfinal))
title('Mask Over Original Image')

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

BWoutline = bwperim(BWfinal);
Segout = I; 
Segout(BWoutline) = 255; 
imshow(Segout)
title('Outlined Original Image')

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

| | | | | |

Похожие темы