workpieceHolePositioning version 1.4.7 :
修正问题:在进行异物检测时,计算ZSliceTh时。添加Z计算的保护,防止异常值混入
This commit is contained in:
parent
0e2fe3e8e1
commit
36798e8754
@ -17,7 +17,8 @@
|
|||||||
//version 1.4.4 : 对1.4.3一个小的修正, 不影响结果
|
//version 1.4.4 : 对1.4.3一个小的修正, 不影响结果
|
||||||
//version 1.4.5 : 添加异物检测,通过errCode输出“有异物”和“无产品”结果
|
//version 1.4.5 : 添加异物检测,通过errCode输出“有异物”和“无产品”结果
|
||||||
//version 1.4.6 : 修正问题:4个孔组成工作时,需要4个孔的高度基本一致。
|
//version 1.4.6 : 修正问题:4个孔组成工作时,需要4个孔的高度基本一致。
|
||||||
std::string m_strVersion = "1.4.6";
|
//version 1.4.7 : 修正问题:在进行异物检测时,计算ZSliceTh时。添加Z计算的保护,防止异常值混入
|
||||||
|
std::string m_strVersion = "1.4.7";
|
||||||
const char* wd_workpieceHolePositioningVersion(void)
|
const char* wd_workpieceHolePositioningVersion(void)
|
||||||
{
|
{
|
||||||
return m_strVersion.c_str();
|
return m_strVersion.c_str();
|
||||||
@ -139,7 +140,7 @@ int angleConditionDistanceSearch(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
double _getMeanZ(std::vector<std::vector<double>>& quantiValue, SVzNL3DPoint seed, SVzNLRect& roi2D, double rectR)
|
double _getMeanZ(std::vector<std::vector<double>>& quantiValue, SVzNL3DPoint seed, SVzNLRect& roi2D, double rectR, double zRange)
|
||||||
{
|
{
|
||||||
int cols = (int)quantiValue.size();
|
int cols = (int)quantiValue.size();
|
||||||
int rows = (int)quantiValue[0].size();
|
int rows = (int)quantiValue[0].size();
|
||||||
@ -149,6 +150,7 @@ double _getMeanZ(std::vector<std::vector<double>>& quantiValue, SVzNL3DPoint see
|
|||||||
int win = (int)rectR;
|
int win = (int)rectR;
|
||||||
int hist = 0;
|
int hist = 0;
|
||||||
double zSum = 0;
|
double zSum = 0;
|
||||||
|
double refZ = seed.z;
|
||||||
for (int i = -win; i <= win; i++)
|
for (int i = -win; i <= win; i++)
|
||||||
{
|
{
|
||||||
for (int j = -win; j <= win; j++)
|
for (int j = -win; j <= win; j++)
|
||||||
@ -159,8 +161,12 @@ double _getMeanZ(std::vector<std::vector<double>>& quantiValue, SVzNL3DPoint see
|
|||||||
{
|
{
|
||||||
if (quantiValue[qx][qy] > 1e-4)
|
if (quantiValue[qx][qy] > 1e-4)
|
||||||
{
|
{
|
||||||
zSum += quantiValue[qx][qy];
|
double zDiff = abs(quantiValue[qx][qy] - refZ);
|
||||||
hist++;
|
if (zDiff < zRange)
|
||||||
|
{
|
||||||
|
zSum += quantiValue[qx][qy];
|
||||||
|
hist++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -864,10 +870,18 @@ void wd_workpieceHolePositioning(
|
|||||||
SVzNL3DPoint center_p1p3 = { (p1.center.x + p3.center.x) / 2,(p1.center.y + p3.center.y) / 2, (p1.center.z + p3.center.z) / 2 };
|
SVzNL3DPoint center_p1p3 = { (p1.center.x + p3.center.x) / 2,(p1.center.y + p3.center.y) / 2, (p1.center.z + p3.center.z) / 2 };
|
||||||
SVzNL3DPoint center_p2p3 = { (p2.center.x + p3.center.x) / 2,(p2.center.y + p3.center.y) / 2, (p2.center.z + p3.center.z) / 2 };
|
SVzNL3DPoint center_p2p3 = { (p2.center.x + p3.center.x) / 2,(p2.center.y + p3.center.y) / 2, (p2.center.z + p3.center.z) / 2 };
|
||||||
double rectR = 5.0;
|
double rectR = 5.0;
|
||||||
double z1 = _getMeanZ(quantiValue, center_p0p1, roi2D, rectR);
|
double z1 = _getMeanZ(quantiValue, center_p0p1, roi2D, rectR, workpiecePara.H/2);
|
||||||
double z2 = _getMeanZ(quantiValue, center_p0p2, roi2D, rectR);
|
if (z1 < 1e-4)
|
||||||
double z3 = _getMeanZ(quantiValue, center_p1p3, roi2D, rectR);
|
z1 = center_p0p1.z;
|
||||||
double z4 = _getMeanZ(quantiValue, center_p2p3, roi2D, rectR);
|
double z2 = _getMeanZ(quantiValue, center_p0p2, roi2D, rectR, workpiecePara.H / 2);
|
||||||
|
if (z2 < 1e-4)
|
||||||
|
z2 = center_p0p2.z;
|
||||||
|
double z3 = _getMeanZ(quantiValue, center_p1p3, roi2D, rectR, workpiecePara.H / 2);
|
||||||
|
if (z3 < 1e-4)
|
||||||
|
z3 = center_p1p3.z;
|
||||||
|
double z4 = _getMeanZ(quantiValue, center_p2p3, roi2D, rectR, workpiecePara.H / 2);
|
||||||
|
if (z4 < 1e-4)
|
||||||
|
z4 = center_p2p3.z;
|
||||||
|
|
||||||
p0.center.z = (z1 + z2) / 2;
|
p0.center.z = (z1 + z2) / 2;
|
||||||
p1.center.z = (z1 + z3) / 2;
|
p1.center.z = (z1 + z3) / 2;
|
||||||
|
|||||||
@ -566,7 +566,7 @@ void TuoPuFa_holePosition_test(void)
|
|||||||
};
|
};
|
||||||
|
|
||||||
SVzNLRange fileIdx[TPF_TEST_GROUP] = {
|
SVzNLRange fileIdx[TPF_TEST_GROUP] = {
|
||||||
{6,6}, {1, 16}, {9,9}
|
{6,6}, {1, 16}, {13,13}
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ver = wd_workpieceHolePositioningVersion();
|
const char* ver = wd_workpieceHolePositioningVersion();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user