Измерение областей в полутоновых изображениях

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

Шаг 1: создайте синтетическое изображение

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

I = propsSynthesizeImage;
imshow(I)
title('Synthetic Image')

Шаг 2: создайте двухуровневое изображение

Сегментируйте полутоновое изображение путем создания двухуровневого изображения, содержащего объекты в изображении.

BW = I > 0;
imshow(BW)
title('Binary Image')

Шаг 3: вычислите свойства объектов Используя пиксельные значения полутонового изображения

Функция regionprops поддерживает несколько свойств, которые могут использоваться с полутоновыми изображениями, включая 'WeightedCentroid', 'MeanIntensity', 'MinIntensity' и 'MaxIntensity'. Эти свойства используют исходные пиксельные значения объектов для их вычислений.

Например, можно использовать regionprops, чтобы вычислить обоих центроид и взвешенный центроид объектов в изображении. Отметьте, как вы передаете в двухуровневом изображении (BW), содержащий ваши объекты и исходное полутоновое изображение (I) в качестве аргументов в regionprops.

s = regionprops(BW,I,{'Centroid','WeightedCentroid'});

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

imshow(I)
title('Weighted (red) and Unweighted (blue) Centroids'); 
hold on
numObj = numel(s);
for k = 1 : numObj
    plot(s(k).WeightedCentroid(1), s(k).WeightedCentroid(2), 'r*')
    plot(s(k).Centroid(1), s(k).Centroid(2), 'bo')
end
hold off

Шаг 4: вычислите пользовательские основанные на пиксельном значении свойства

Можно использовать свойство 'PixelValues' сделать пользовательские вычисления на основе пиксельных значений исходного полутонового изображения. Свойство 'PixelValues' возвращает вектор, содержащий полутоновые значения пикселей в области.

Как пример, вычислите стандартное отклонение каждой области.

s = regionprops(BW,I,{'Centroid','PixelValues','BoundingBox'});
imshow(I)
title('Standard Deviation of Regions')
hold on
for k = 1 : numObj
    s(k).StandardDeviation = std(double(s(k).PixelValues));
    text(s(k).Centroid(1),s(k).Centroid(2), ...
        sprintf('%2.1f', s(k).StandardDeviation), ...
        'EdgeColor','b','Color','r');
end
hold off

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

figure
bar(1:numObj,[s.StandardDeviation])
xlabel('Region Label Number')
ylabel('Standard Deviation')

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

sStd = [s.StandardDeviation];
lowStd = find(sStd < 50);

imshow(I)
title('Objects Having Standard Deviation < 50')
hold on
for k = 1 : length(lowStd)
    rectangle('Position',s(lowStd(k)).BoundingBox,'EdgeColor','y');
end
hold off

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