Once centroid is calculated, how to assign x & y coordinates to it to then put into further calculations

4 次查看(过去 30 天)
So as an overview, I have a picture with me holding two tags, one red one yellow.
I have then calulcated centroid to annotate the image with and caluclate the distance (City Block/Chessboard/Euclidean), as shown here:
The only problem I am facing is that to get the centroid coordinates of each tag, I am using the following code:
redCentroid = regionprops(redMorph, 'centroid');
While this does work, it forces me to obtain the centroid coordinates through the command window. then assign them manually to x,y or i,j to the put into my distance calculations.
I am just wondering if there is a way to automatically designate the centroid coordinates to x & y (or i & j), instead of manually calculating through current method in command window then assigning to variable.
My full code is below:
clear all;
close all;
clc;
RGB = imread('tagPhoto.bmp');
%Yellow Tag
yellowChannel1Min = 0.000;
yellowChannel1Max = 255.000;
yellowChannel2Min = 71.000;
yellowChannel2Max = 255.000;
yellowChannel3Min = 0.000;
yellowChannel3Max = 40.000;
yellowSliderBW = (RGB(:,:,1) >= yellowChannel1Min ) & (RGB(:,:,1) <= yellowChannel1Max) & ...
(RGB(:,:,2) >= yellowChannel2Min ) & (RGB(:,:,2) <= yellowChannel2Max) & ...
(RGB(:,:,3) >= yellowChannel3Min ) & (RGB(:,:,3) <= yellowChannel3Max);
yellowBW = yellowSliderBW;
%Red Tag
redChannel1Min = 71.000;
redChannel1Max = 255.000;
redChannel2Min = 0.000;
redChannel2Max = 41.000;
redChannel3Min = 0.000;
redChannel3Max = 54.000;
redSliderBW = (RGB(:,:,1) >= redChannel1Min ) & (RGB(:,:,1) <= redChannel1Max) & ...
(RGB(:,:,2) >= redChannel2Min ) & (RGB(:,:,2) <= redChannel2Max) & ...
(RGB(:,:,3) >= redChannel3Min ) & (RGB(:,:,3) <= redChannel3Max);
redBW = redSliderBW;
%Calculate Red Tag Centroid Coordinates
redSE = strel("rectangle",[5 4]);
redOpen = imopen(redBW, redSE);
redMorph = imclose(redOpen, ones(25));
redCentroid = regionprops(redMorph, 'centroid');
%Calculate Yellow Tag Centroid Coordinates
yellowMorph = imclose(yellowBW, ones(25));
yellowCentroid = regionprops(yellowMorph, 'centroid');
%Yellow/Red centroid coordinates
ri = 255.9213;
rj = 89.2483;
yi = 258.3529;
yj = 498.7177;
dCityBlock = (abs(ri - yi)) + (abs(rj - yj));
dChessboard = max(abs(ri - yi), abs(rj - yj));
dEuclidean = sqrt((ri - yi)^2 + (rj - yj)^2);
disp(['City Block Distance: ' num2str(dCityBlock)]);
disp(['Chessboard Distance: ' num2str(dChessboard)]);
disp(['Euclidean Distance: ' num2str(dEuclidean)]);
figure;
imshow(RGB);
hold on;
plot(89.2483,255.9213, 'g-x', 'LineWidth',5)
plot(498.7177,258.3529, 'g-x', 'LineWidth',5)
plot([89.2483,498.7177],[255.9213,258.3529],'b','LineWidth',2);
Thanks in advance for any help!

采纳的回答

DGM
DGM 2022-11-17
You should just be able to get them from the struct.
%Yellow/Red centroid coordinates
ri = redCentroid.Centroid(2);
rj = redCentroid.Centroid(1);
yi = yellowCentroid.Centroid(2);
yj = yellowCentroid.Centroid(1);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by