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