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

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

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

Figure contains an axes object. The axes object with title Original Image contains 3 objects of type image, text.

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

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

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

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

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

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

Figure contains an axes object. The axes object with title Binary Gradient Mask contains an object of type image.

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

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

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

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

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

Figure contains an axes object. The axes object with title Dilated Gradient Mask contains an object of type image.

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

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

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

Figure contains an axes object. The axes object with title Binary Image with Filled Holes contains an object of type image.

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

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

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

Figure contains an axes object. The axes object with title Cleared Border Image contains an object of type image.

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

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

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

Figure contains an axes object. The axes object with title Segmented Image contains an object of type image.

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

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

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

Figure contains an axes object. The axes object with title Mask Over Original Image contains an object of type image.

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

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

Figure contains an axes object. The axes object with title Outlined Original Image contains an object of type image.

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

| | | | | |

Похожие темы