|
|
|
@ -82,7 +82,7 @@
|
|
|
|
// 即使拟合到凸起外边缘也不影响方向角
|
|
|
|
// 即使拟合到凸起外边缘也不影响方向角
|
|
|
|
#define SUPPORT_REFINE_SEGMENTS_DEFAULT 6
|
|
|
|
#define SUPPORT_REFINE_SEGMENTS_DEFAULT 6
|
|
|
|
// 搜索列带内相邻像素(3 行灰度均值)的灰度差小于该值视为无边缘(极性无关,支架比外侧亮/暗均可)
|
|
|
|
// 搜索列带内相邻像素(3 行灰度均值)的灰度差小于该值视为无边缘(极性无关,支架比外侧亮/暗均可)
|
|
|
|
#define SUPPORT_REFINE_MIN_CONTRAST 15.0
|
|
|
|
#define SUPPORT_REFINE_MIN_CONTRAST 45.0
|
|
|
|
|
|
|
|
|
|
|
|
// ===== 稳健直线拟合(FitLineRobustTV)的偏离点剔除参数 =====
|
|
|
|
// ===== 稳健直线拟合(FitLineRobustTV)的偏离点剔除参数 =====
|
|
|
|
// FIT_LINE_MAD_SIGMA:MAD 倍数阈值。调大→保留更多采样点(噪声大时更稳,但离群点可能残留、直线被轻微拉偏);
|
|
|
|
// FIT_LINE_MAD_SIGMA:MAD 倍数阈值。调大→保留更多采样点(噪声大时更稳,但离群点可能残留、直线被轻微拉偏);
|
|
|
|
@ -1904,21 +1904,19 @@ int ImgCheckAnalysisy::CheckRun()
|
|
|
|
|
|
|
|
|
|
|
|
// 外侧 -> 内侧逐像素扫,取灰度梯度最大的位置作为该行支架边缘点
|
|
|
|
// 外侧 -> 内侧逐像素扫,取灰度梯度最大的位置作为该行支架边缘点
|
|
|
|
int nEdge = -1;
|
|
|
|
int nEdge = -1;
|
|
|
|
float fBestGrad = 0.0f;
|
|
|
|
|
|
|
|
for (int x = nX0; (nStepX > 0) ? (x + nStepX <= nX1) : (x + nStepX >= nX1); x += nStepX)
|
|
|
|
for (int x = nX0; (nStepX > 0) ? (x + nStepX <= nX1) : (x + nStepX >= nX1); x += nStepX)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (x < 1 || x + nStepX < 1 || x >= grayRef.cols - 1 || x + nStepX >= grayRef.cols - 1)
|
|
|
|
if (x < 1 || x + nStepX < 1 || x >= grayRef.cols - 1 || x + nStepX >= grayRef.cols - 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const float fGrad = fabs(gray3(nYDet, x + nStepX) - gray3(nYDet, x));
|
|
|
|
const float fGrad = gray3(nYDet, x);
|
|
|
|
if (fGrad > fBestGrad)
|
|
|
|
if (fGrad > (float)SUPPORT_REFINE_MIN_CONTRAST)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
fBestGrad = fGrad;
|
|
|
|
|
|
|
|
nEdge = x;
|
|
|
|
nEdge = x;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (nEdge < 0 || fBestGrad < (float)SUPPORT_REFINE_MIN_CONTRAST)
|
|
|
|
if (nEdge < 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
continue; // 该行列带内没有明显灰度阶跃,本行不参与拟合
|
|
|
|
continue; // 该行列带内没有明显灰度阶跃,本行不参与拟合
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|