В этом примере показано, как обнаружить ячейку с помощью обнаружения ребра и базовой морфологии. Объект может быть легко обнаружен в изображении, если объект имеет достаточный контраст происхождения.
Читайте в 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');
Объект, который будет сегментирован, отличается значительно по контрасту от фонового изображения. Изменения по контрасту могут быть обнаружены операторами, которые вычисляют градиент изображения. Чтобы создать бинарную маску, содержащую сегментированную ячейку, вычислите, градиент отображают и применяют порог.
Используйте edge
и оператор Sobel, чтобы вычислить пороговое значение. Настройте пороговое значение и используйте edge
снова, чтобы получить бинарную маску, которая содержит сегментированную ячейку.
[~,threshold] = edge(I,'sobel'); fudgeFactor = 0.5; BWs = edge(I,'sobel',threshold * fudgeFactor);
Отобразите получившуюся бинарную маску градиента.
imshow(BWs)
title('Binary Gradient Mask')
Бинарная маска градиента показывает линии высокой контрастности в изображении. Эти линии действительно не совсем формируют рисунок схемы предмета интереса. По сравнению с оригинальным изображением существуют разрывы в линиях, окружающих объект в маске градиента. Эти линейные разрывы исчезнут, если изображение 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')
Расширенная маска градиента показывает схему ячейки вполне приятно, но существуют все еще отверстия во внутренней части ячейки. Чтобы заполнить эти отверстия, используйте imfill
функция.
BWdfill = imfill(BWsdil,'holes'); imshow(BWdfill) title('Binary Image with Filled Holes')
Ячейка интереса была успешно сегментирована, но это не единственный объект, который был найден. Любые объекты, которые соединяются с границей изображения, могут быть удалены с помощью imclearborder
функция. Чтобы удалить диагональные связи, установите возможность соединения в imclearborder
функционируйте к 4
.
BWnobord = imclearborder(BWdfill,4);
imshow(BWnobord)
title('Cleared Border Image')
Наконец, для того, чтобы сделать сегментированный объектный взгляд естественным, сглаживайте объект путем разрушения изображения дважды с ромбовидным элементом структурирования. Создайте ромбовидный элемент структурирования с помощью strel
функция.
seD = strel('diamond',1); BWfinal = imerode(BWnobord,seD); BWfinal = imerode(BWfinal,seD); imshow(BWfinal) title('Segmented Image');
Можно использовать 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')
bwperim
| edge
| imclearborder
| imdilate
| imerode
| imfill
| strel