|
|
|
@ -482,8 +482,39 @@ int ImgCheckAnalysisy::CheckRun()
|
|
|
|
diff_align = 180.0f - diff_align;
|
|
|
|
diff_align = 180.0f - diff_align;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果diff_align大于10,则添加到缺陷列表
|
|
|
|
// 1. 使用 ALign_Config.angle_diff 卡控内外边缘夹角(未配置时默认 10 度)
|
|
|
|
if (diff_align > 10.0f)
|
|
|
|
float angleTh = 10.0f;
|
|
|
|
|
|
|
|
if (m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->ALign_Config.angle_diff > 0.0f)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
angleTh = m_pbaseCheckFunction->ALign_Config.angle_diff;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 使用 ALign_Config.x_offset / y_offset (mm) 卡控内外边缘中心偏移(mm 转像素)
|
|
|
|
|
|
|
|
float offX_px = 0.0f;
|
|
|
|
|
|
|
|
float offY_px = 0.0f;
|
|
|
|
|
|
|
|
if (m_pbaseCheckFunction != NULL)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (m_fImgage_Scale_X > 0.0f)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
offX_px = m_pbaseCheckFunction->ALign_Config.x_offset / m_fImgage_Scale_X;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_fImgage_Scale_Y > 0.0f)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
offY_px = m_pbaseCheckFunction->ALign_Config.y_offset / m_fImgage_Scale_Y;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 内外边缘中心坐标偏移(像素)
|
|
|
|
|
|
|
|
float dx_px = std::fabs(m_outer_rroi.center.x - m_inner_rroi.center.x);
|
|
|
|
|
|
|
|
float dy_px = std::fabs(m_outer_rroi.center.y - m_inner_rroi.center.y);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool bAngleErr = diff_align > angleTh;
|
|
|
|
|
|
|
|
bool bOffsetXErr = (offX_px > 0.0f) && (dx_px > offX_px);
|
|
|
|
|
|
|
|
bool bOffsetYErr = (offY_px > 0.0f) && (dy_px > offY_px);
|
|
|
|
|
|
|
|
bool bOffsetErr = bOffsetXErr || bOffsetYErr;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 角度超差或中心偏移超差 -> 添加到缺陷列表
|
|
|
|
|
|
|
|
if (bAngleErr || bOffsetErr)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QX_ERROR_INFO_ alignErr;
|
|
|
|
QX_ERROR_INFO_ alignErr;
|
|
|
|
alignErr.Idx = static_cast<int>(m_pDetResult->pQx_ErrorList->size());
|
|
|
|
alignErr.Idx = static_cast<int>(m_pDetResult->pQx_ErrorList->size());
|
|
|
|
@ -505,7 +536,20 @@ int ImgCheckAnalysisy::CheckRun()
|
|
|
|
"outer-inner angle diff %.2f deg", diff_align);
|
|
|
|
"outer-inner angle diff %.2f deg", diff_align);
|
|
|
|
m_pDetResult->pQx_ErrorList->push_back(alignErr);
|
|
|
|
m_pDetResult->pQx_ErrorList->push_back(alignErr);
|
|
|
|
|
|
|
|
|
|
|
|
m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "angle diff %.2f deg > 10", diff_align);
|
|
|
|
if (bAngleErr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "angle diff %.2f deg > %.2f", diff_align, angleTh);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (bOffsetXErr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "center offset dx %.1f px > %.1f px",
|
|
|
|
|
|
|
|
dx_px, offX_px);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (bOffsetYErr)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "center offset dy %.1f px > %.1f px",
|
|
|
|
|
|
|
|
dy_px, offY_px);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*投影对齐模板*/
|
|
|
|
/*投影对齐模板*/
|
|
|
|
|