📄 imageproperties.m
字号:
% -------------------------------------------------------------------------------------------------------
% get the distances
PointUpDownDIST = sqrt((upPointX - downPointX)*(upPointX - downPointX) + (upPointY - downPointY)*(upPointY - downPointY));
PointLeftRightDIST = sqrt((rightPointX - leftPointX)*(rightPointX - leftPointX) + (rightPointY - leftPointY)*(rightPointY - leftPointY));
Point1515XUpRightDownLeftDIST = sqrt((upRightPoint15X - downLeftPoint15X)*(upRightPoint15X - downLeftPoint15X) + (upRightPoint15Y - downLeftPoint15Y)*(upRightPoint15Y - downLeftPoint15Y));
Point1212XUpRightDownLeftDIST = sqrt((upRightPoint12X - downLeftPoint12X)*(upRightPoint12X - downLeftPoint12X) + (upRightPoint12Y - downLeftPoint12Y)*(upRightPoint12Y - downLeftPoint12Y));
Point3333XUpRightDownLeftDIST = sqrt((upRightPoint33X - downLeftPoint33X)*(upRightPoint33X - downLeftPoint33X) + (upRightPoint33Y - downLeftPoint33Y)*(upRightPoint33Y - downLeftPoint33Y));
Point2121XUpRightDownLeftDIST = sqrt((upRightPoint21X - downLeftPoint21X)*(upRightPoint21X - downLeftPoint21X) + (upRightPoint21Y - downLeftPoint21Y)*(upRightPoint21Y - downLeftPoint21Y));
Point5151XUpRightDownLeftDIST = sqrt((upRightPoint51X - downLeftPoint51X)*(upRightPoint51X - downLeftPoint51X) + (upRightPoint51Y - downLeftPoint51Y)*(upRightPoint51Y - downLeftPoint51Y));
Point1515XUpLeftDownRightDIST = sqrt((upLeftPoint15X - downRightPoint15X)*(upLeftPoint15X - downRightPoint15X) + (upLeftPoint15Y - downRightPoint15Y)*(upLeftPoint15Y - downRightPoint15Y));
Point1212XUpLeftDownRightDIST = sqrt((upLeftPoint12X - downRightPoint12X)*(upLeftPoint12X - downRightPoint12X) + (upLeftPoint12Y - downRightPoint12Y)*(upLeftPoint12Y - downRightPoint12Y));
Point3333XUpLeftDownRightDIST = sqrt((upLeftPoint33X - downRightPoint33X)*(upLeftPoint33X - downRightPoint33X) + (upLeftPoint33Y - downRightPoint33Y)*(upLeftPoint33Y - downRightPoint33Y));
Point2121XUpLeftDownRightDIST = sqrt((upLeftPoint21X - downRightPoint21X)*(upLeftPoint21X - downRightPoint21X) + (upLeftPoint21Y - downRightPoint21Y)*(upLeftPoint21Y - downRightPoint21Y));
Point5151XUpLeftDownRightDIST = sqrt((upLeftPoint51X - downRightPoint51X)*(upLeftPoint51X - downRightPoint51X) + (upLeftPoint51Y - downRightPoint51Y)*(upLeftPoint51Y - downRightPoint51Y));
% add them up
Distmain = PointUpDownDIST + PointLeftRightDIST;
Dist1515 = Point1515XUpRightDownLeftDIST + Point1515XUpLeftDownRightDIST;
Dist1212 = Point1212XUpRightDownLeftDIST + Point1212XUpLeftDownRightDIST;
Dist3333 = Point3333XUpRightDownLeftDIST + Point3333XUpLeftDownRightDIST;
Dist2121 = Point2121XUpRightDownLeftDIST + Point2121XUpLeftDownRightDIST;
Dist5151 = Point5151XUpRightDownLeftDIST + Point5151XUpLeftDownRightDIST;
% which is the largest?
eccentricity = -1;
doundNess = -1;
if (Distmain >= Dist1515) & (Distmain >= Dist1212) & (Distmain >= Dist3333) & (Distmain >= Dist2121) & (Distmain >= Dist5151) & (PointUpDownDIST > 0) & (PointLeftRightDIST > 0)
%PointUpDownDIST
%PointLeftRightDIST
if PointUpDownDIST > PointLeftRightDIST
eccentricity = PointUpDownDIST/PointLeftRightDIST;
doundNess = 4*area/pi*sqrt(PointUpDownDIST);
majorDist = PointUpDownDIST;
minorDist = PointLeftRightDIST;
else
eccentricity = PointLeftRightDIST/PointUpDownDIST;
doundNess = 4*area/pi*sqrt(PointLeftRightDIST);
majorDist = PointLeftRightDIST;
minorDist = PointUpDownDIST;
end
elseif (Dist1515 >= Distmain ) & (Dist1515 >= Dist1212) & (Dist1515 >= Dist3333) & (Dist1515 >= Dist2121) & (Dist1515 >= Dist5151) & (Point1515XUpRightDownLeftDIST > 0) & (Point1515XUpLeftDownRightDIST > 0)
%Point1515XUpRightDownLeftDIST
%Point1515XUpLeftDownRightDIST
if Point1515XUpRightDownLeftDIST > Point1515XUpLeftDownRightDIST
eccentricity = Point1515XUpRightDownLeftDIST/Point1515XUpLeftDownRightDIST;
doundNess = 4*area/pi*sqrt(Point1515XUpRightDownLeftDIST);
majorDist = Point1515XUpRightDownLeftDIST;
minorDist = Point1515XUpLeftDownRightDIST;
else
eccentricity = Point1515XUpLeftDownRightDIST/Point1515XUpRightDownLeftDIST;
doundNess = 4*area/pi*sqrt(Point1515XUpLeftDownRightDIST);
majorDist = Point1515XUpLeftDownRightDIST;
minorDist = Point1515XUpRightDownLeftDIST;
end
elseif (Dist1212 >= Distmain) & (Dist1212 >= Dist1515) & (Dist1212 >= Dist3333) & (Dist1212 >= Dist2121) & (Dist1212 >= Dist5151) & (Point1212XUpRightDownLeftDIST > 0) & (Point1212XUpLeftDownRightDIST > 0)
%Point1212XUpRightDownLeftDIST
%Point1212XUpLeftDownRightDIST
if Point1212XUpRightDownLeftDIST > Point1212XUpLeftDownRightDIST
eccentricity = Point1212XUpRightDownLeftDIST/Point1212XUpLeftDownRightDIST;
doundNess = 4*area/pi*sqrt(Point1212XUpRightDownLeftDIST);
majorDist = Point1212XUpRightDownLeftDIST;
minorDist = Point1212XUpLeftDownRightDIST;
else
eccentricity = Point1212XUpLeftDownRightDIST/Point1212XUpRightDownLeftDIST;
doundNess = 4*area/pi*sqrt(Point1212XUpLeftDownRightDIST);
majorDist = Point1212XUpLeftDownRightDIST;
minorDist = Point1212XUpRightDownLeftDIST;
end
elseif (Dist3333 >= Distmain) & (Dist3333 >= Dist1515) & (Dist3333 >= Dist1212 ) & (Dist3333 >= Dist2121) & (Dist3333 >= Dist5151) & (Point3333XUpRightDownLeftDIST > 0) & (Point3333XUpLeftDownRightDIST > 0)
%Point3333XUpRightDownLeftDIST
%Point3333XUpLeftDownRightDIST
if Point3333XUpRightDownLeftDIST > Point3333XUpLeftDownRightDIST
eccentricity = Point3333XUpRightDownLeftDIST/Point3333XUpLeftDownRightDIST;
doundNess = 4*area/pi*sqrt(Point3333XUpRightDownLeftDIST);
majorDist = Point3333XUpRightDownLeftDIST;
minorDist = Point3333XUpLeftDownRightDIST;
else
eccentricity = Point3333XUpLeftDownRightDIST/Point3333XUpRightDownLeftDIST;
doundNess = 4*area/pi*sqrt(Point3333XUpLeftDownRightDIST);
majorDist = Point3333XUpLeftDownRightDIST;
minorDist = Point3333XUpRightDownLeftDIST;
end
elseif (Dist2121 >= Distmain) & (Dist2121 >= Dist1515) & (Dist2121 >= Dist1212 ) & (Dist2121 >= Dist3333 ) & (Dist2121 >= Dist5151) & (Point2121XUpRightDownLeftDIST > 0) & (Point2121XUpLeftDownRightDIST > 0)
%Point2121XUpRightDownLeftDIST
%Point2121XUpLeftDownRightDIST
if Point2121XUpRightDownLeftDIST > Point2121XUpLeftDownRightDIST
eccentricity = Point2121XUpRightDownLeftDIST/Point2121XUpLeftDownRightDIST;
doundNess = 4*area/pi*sqrt(Point2121XUpRightDownLeftDIST);
majorDist = Point2121XUpRightDownLeftDIST;
minorDist = Point2121XUpLeftDownRightDIST;
else
eccentricity = Point2121XUpLeftDownRightDIST/Point2121XUpRightDownLeftDIST;
doundNess = 4*area/pi*sqrt(Point2121XUpLeftDownRightDIST);
majorDist = Point2121XUpLeftDownRightDIST;
minorDist = Point2121XUpRightDownLeftDIST;
end
elseif (Dist5151 >= Distmain) & (Dist5151 >= Dist1515) & (Dist5151 >= Dist1212 ) & (Dist5151 >= Dist3333 ) & (Dist5151 >= Dist2121 ) & (Point5151XUpRightDownLeftDIST > 0) & (Point5151XUpLeftDownRightDIST > 0)
%Point5151XUpRightDownLeftDIST
%Point5151XUpLeftDownRightDIST
if Point5151XUpRightDownLeftDIST > Point5151XUpLeftDownRightDIST
eccentricity = Point5151XUpRightDownLeftDIST/Point5151XUpLeftDownRightDIST;
doundNess = 4*area/pi*sqrt(Point5151XUpRightDownLeftDIST);
majorDist = Point5151XUpRightDownLeftDIST;
minorDist = Point5151XUpLeftDownRightDIST;
else
eccentricity = Point5151XUpLeftDownRightDIST/Point5151XUpRightDownLeftDIST;
doundNess = 4*area/pi*sqrt(Point5151XUpLeftDownRightDIST);
majorDist = Point5151XUpLeftDownRightDIST;
minorDist = Point5151XUpRightDownLeftDIST;
end
end
eccentricity = majorDist/minorDist;
roundNess = 4*area/pi*sqrt(majorDist);
% -------------------------------------------------------------------------------------------------------
initialSymmetry1 = abs(sqrt((leftPointX - gravX) * (leftPointX - gravX) + (leftPointY - gravY) * (leftPointY - gravY)) - sqrt((rightPointX - gravX) * (rightPointX - gravX) + (rightPointY - gravY) * (rightPointY - gravY)));
initialSymmetry2 = abs(sqrt((upRightPoint15X - gravX) * (upRightPoint15X - gravX) + (upRightPoint15Y - gravY) * (upRightPoint15Y - gravY)) - sqrt((upLeftPoint15X - gravX) * (upLeftPoint15X - gravX) + (upLeftPoint15Y - gravY) * (upLeftPoint15Y - gravY)));
initialSymmetry3 = abs(sqrt((upRightPoint12X - gravX) * (upRightPoint12X - gravX) + (upRightPoint12Y - gravY) * (upRightPoint12Y - gravY)) - sqrt((upLeftPoint12X - gravX) * (upLeftPoint12X - gravX) + (upLeftPoint12Y - gravY) * (upLeftPoint12Y - gravY)));
initialSymmetry4 = abs(sqrt((upRightPoint33X - gravX) * (upRightPoint33X - gravX) + (upRightPoint33Y - gravY) * (upRightPoint33Y - gravY)) - sqrt((upLeftPoint33X - gravX) * (upLeftPoint33X - gravX) + (upLeftPoint33Y - gravY) * (upLeftPoint33Y - gravY)));
initialSymmetry5 = abs(sqrt((upRightPoint21X - gravX) * (upRightPoint21X - gravX) + (upRightPoint21Y - gravY) * (upRightPoint21Y - gravY)) - sqrt((upLeftPoint21X - gravX) * (upLeftPoint21X - gravX) + (upLeftPoint21Y - gravY) * (upLeftPoint21Y - gravY)));
initialSymmetry6 = abs(sqrt((upRightPoint51X - gravX) * (upRightPoint51X - gravX) + (upRightPoint51Y - gravY) * (upRightPoint51Y - gravY)) - sqrt((upLeftPoint51X - gravX) * (upLeftPoint51X - gravX) + (upLeftPoint51Y - gravY) * (upLeftPoint51X - gravY)));
initialSymmetry7 = abs(sqrt((downRightPoint15X - gravX) * (downRightPoint15X - gravX) + (downRightPoint15Y - gravY) * (downRightPoint15Y - gravY)) - sqrt((downLeftPoint15X - gravX) * (downLeftPoint15X - gravX) + (downLeftPoint15Y - gravY) * (downLeftPoint15Y - gravY)));
initialSymmetry8 = abs(sqrt((downRightPoint12X - gravX) * (downRightPoint12X - gravX) + (downRightPoint12Y - gravY) * (downRightPoint12Y - gravY)) - sqrt((downLeftPoint12X - gravX) * (downLeftPoint12X - gravX) + (downLeftPoint12Y - gravY) * (downLeftPoint12Y - gravY)));
initialSymmetry9 = abs(sqrt((downRightPoint33X - gravX) * (downRightPoint33X - gravX) + (downRightPoint33Y - gravY) * (downRightPoint33Y - gravY)) - sqrt((downLeftPoint33X - gravX) * (downLeftPoint33X - gravX) + (downLeftPoint33Y - gravY) * (downLeftPoint33Y - gravY)));
initialSymmetry10 = abs(sqrt((downRightPoint21X - gravX) * (downRightPoint21X - gravX) + (downRightPoint21Y - gravY) * (downRightPoint21Y - gravY)) - sqrt((downLeftPoint21X - gravX) * (downLeftPoint21X - gravX) + (downLeftPoint21Y - gravY) * (downLeftPoint21Y - gravY)));
initialSymmetry11 = abs(sqrt((downRightPoint51X - gravX) * (downRightPoint51X - gravX) + (downRightPoint51Y - gravY) * (downRightPoint51Y - gravY)) - sqrt((downLeftPoint51X - gravX) * (downLeftPoint51X - gravX) + (downLeftPoint51Y - gravY) * (downLeftPoint51Y - gravY)));
% -------------------------------------------------------------------------------------------------------
boundVal = 50;
if (eccentricity < 1.5) & (area > 500) & (doundNess > 2000) & (initialSymmetry1 < boundVal) & (initialSymmetry2 < boundVal) & (initialSymmetry3 < boundVal) & (initialSymmetry4 < boundVal) & (initialSymmetry5 < boundVal) & (initialSymmetry6 < boundVal) & (initialSymmetry7 < boundVal) & (initialSymmetry8 < boundVal) & (initialSymmetry9 < boundVal) & (initialSymmetry10 < boundVal) & (initialSymmetry11 < boundVal)
%objectID
%area
%doundNess
%eccentricity
%initialSymmetry1
%initialSymmetry2
%initialSymmetry3
%initialSymmetry4
%initialSymmetry5
%initialSymmetry6
%initialSymmetry7
%initialSymmetry8
%initialSymmetry9
%initialSymmetry10
%initialSymmetry11
% -------------------------------------------------------------------------------------------------------
% now we have the object we need to work on the lence equation now.
% what is the distance we should keep the camera?
playingFieldDistance = 100 * 1.5; % cm = 1.5 meters
badmintonRacketHeight = 23.3; % cm
delta = 1.15; % Now assuming that we accept error term delta where delta > 1
% h1 = delta * h2
imageResolution = 37.795; % pixels/cm
heightImageRacketAtBackPosition = PointUpDownDIST/imageResolution;
%cameraDistance = (playingFieldDistance/(delta-1))*(1 + (heightImageRacketAtBackPosition/badmintonRacketHeight));
%cameraDistance = cameraDistance/100; % now in meters
%cameraDistance
% -------------------------------------------------------------------------------------------------------
% -------------------------------------------------------------------------------------------------------
arrOutPut = 1:9;
arrOutPut(1) = objectID;
arrOutPut(2) = 0;
arrOutPut(3) = majorDist;
arrOutPut(4) = minorDist;
arrOutPut(6) = topY;
arrOutPut(7) = bottomY;
arrOutPut(8) = leftX;
arrOutPut(9) = rightX;
Proc = arrOutPut;
else
Proc = -1;
end
% -------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -