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

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

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

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

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

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

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

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

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

Figure contains an axes. The axes with title Binary Image contains an object of type 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

Figure contains an axes. The axes with title Weighted (red) and Unweighted (blue) Centroids contains 11 objects of type image, line.

Шаг 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 contains an axes. The axes with title Standard Deviation of Regions contains 6 objects of type image, text.

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

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

Figure contains an axes. The axes contains an object of type bar.

Можно использовать график определить, как разделить данные. Например, следующий код идентифицирует объекты со стандартным отклонением ниже, чем 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

Figure contains an axes. The axes with title Objects Having Standard Deviation < 50 contains 2 objects of type image, rectangle.

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