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