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

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

Шаг 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')

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

| | | | | |

Похожие темы