update 支架边缘改为灰度卡控

dev_lsy
liusiyang 1 week ago
parent fd03ebe0ae
commit 8701839e58

@ -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; // 该行列带内没有明显灰度阶跃,本行不参与拟合
} }

Loading…
Cancel
Save