В этом примере показано, как измерить свойства объектов в полутоновом изображении. Выполнять это, первый сегмент полутоновое изображение, чтобы получить бинарное изображение объектов. Затем используйте regionprops, чтобы анализировать исходные полутоновые пиксельные значения, соответствующие каждому объекту в бинарном изображении.
Используйте функцию помощника, propsSynthesizeImage
, создать полутоновое изображение, которое содержит пять отличных областей.
I = propsSynthesizeImage;
imshow(I)
title('Synthetic Image')
Сегментируйте полутоновое изображение путем создания бинарного изображения, содержащего объекты в изображении.
BW = I > 0;
imshow(BW)
title('Binary Image')
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
Можно использовать свойство '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