В этом примере показано, как измерить свойства объектов в полутоновом изображении. Выполнять это, первый сегмент полутоновое изображение, чтобы получить бинарное изображение объектов. Затем используйте 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