feat: 新增边缘查找拟合直线工具

- 新增 EdgeLineFitProcessor 算子(卡尺边缘检测 + 最小二乘/RANSAC直线拟合)
- 新增 EdgeLineFitPanel 辅助面板(参数配置、交互绘制卡尺)
- 支持任意角度旋转的卡尺区域,4个手柄控制长度/宽度
- 支持多次拟合累积显示,关闭面板后结果保留
- 极性箭头标识搜索方向(B→D / D→B / 双向)
- 卡尺亮绿色1px,拟合直线蓝色2px
- Ribbon快捷工具组新增「直线拟合」按钮
- 添加中英文本地化资源
This commit is contained in:
李伟
2026-05-15 15:44:18 +08:00
parent 7447463c1a
commit 12938764b1
13 changed files with 1858 additions and 2 deletions
+56
View File
@@ -1887,4 +1887,60 @@ Reprojection error: {1:F4} pixels</value>
<data name="ChessboardImageError" xml:space="preserve">
<value>Image{0}: {1:F4} pixels</value>
</data>
<!-- EdgeLineFitProcessor -->
<data name="EdgeLineFitProcessor_Name" xml:space="preserve">
<value>Edge Find Line Fit</value>
</data>
<data name="EdgeLineFitProcessor_Description" xml:space="preserve">
<value>Place calipers along a search line to detect edge points and fit a line (supports Least Squares and RANSAC)</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount" xml:space="preserve">
<value>Caliper Count</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount_Desc" xml:space="preserve">
<value>Number of calipers placed evenly along the search line</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth" xml:space="preserve">
<value>Caliper Width</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth_Desc" xml:space="preserve">
<value>Search length of each caliper (pixels), perpendicular to the search line</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity" xml:space="preserve">
<value>Edge Polarity</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity_Desc" xml:space="preserve">
<value>Edge direction: BrightToDark, DarkToBright, or Both</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold" xml:space="preserve">
<value>Edge Threshold</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold_Desc" xml:space="preserve">
<value>Gradient strength threshold; edges below this value are ignored</value>
</data>
<data name="EdgeLineFitProcessor_Sigma" xml:space="preserve">
<value>Smoothing Sigma</value>
</data>
<data name="EdgeLineFitProcessor_Sigma_Desc" xml:space="preserve">
<value>Gaussian smoothing standard deviation for noise suppression (larger = smoother)</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod" xml:space="preserve">
<value>Fit Method</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod_Desc" xml:space="preserve">
<value>Line fitting algorithm: LeastSquares or RANSAC (robust, rejects outliers)</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold" xml:space="preserve">
<value>RANSAC Threshold</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold_Desc" xml:space="preserve">
<value>RANSAC inlier distance threshold (pixels); points closer than this to the line are inliers</value>
</data>
<data name="EdgeLineFitProcessor_Thickness" xml:space="preserve">
<value>Line Thickness</value>
</data>
<data name="EdgeLineFitProcessor_Thickness_Desc" xml:space="preserve">
<value>Drawing thickness for result visualization</value>
</data>
</root>
+56
View File
@@ -1920,4 +1920,60 @@
<data name="ChessboardImageError" xml:space="preserve">
<value>图像{0}: {1:F4} 像素</value>
</data>
<!-- EdgeLineFitProcessor -->
<data name="EdgeLineFitProcessor_Name" xml:space="preserve">
<value>边缘查找拟合直线</value>
</data>
<data name="EdgeLineFitProcessor_Description" xml:space="preserve">
<value>沿搜索线放置卡尺检测边缘点,拟合直线(支持最小二乘和RANSAC</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount" xml:space="preserve">
<value>卡尺数量</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount_Desc" xml:space="preserve">
<value>沿搜索线等间距放置的卡尺数量</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth" xml:space="preserve">
<value>卡尺宽度</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth_Desc" xml:space="preserve">
<value>每个卡尺的搜索长度(像素),沿垂直于搜索线方向</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity" xml:space="preserve">
<value>边缘极性</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity_Desc" xml:space="preserve">
<value>边缘方向:BrightToDark(亮到暗)、DarkToBright(暗到亮)、Both(双向)</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold" xml:space="preserve">
<value>边缘阈值</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold_Desc" xml:space="preserve">
<value>边缘梯度强度阈值,低于此值的边缘将被忽略</value>
</data>
<data name="EdgeLineFitProcessor_Sigma" xml:space="preserve">
<value>平滑Sigma</value>
</data>
<data name="EdgeLineFitProcessor_Sigma_Desc" xml:space="preserve">
<value>高斯平滑的标准差,用于抑制噪声(越大越平滑)</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod" xml:space="preserve">
<value>拟合方法</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod_Desc" xml:space="preserve">
<value>直线拟合算法:LeastSquares(最小二乘)、RANSAC(鲁棒拟合,可剔除异常点)</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold" xml:space="preserve">
<value>RANSAC阈值</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold_Desc" xml:space="preserve">
<value>RANSAC内点判定距离阈值(像素),点到直线距离小于此值视为内点</value>
</data>
<data name="EdgeLineFitProcessor_Thickness" xml:space="preserve">
<value>线条粗细</value>
</data>
<data name="EdgeLineFitProcessor_Thickness_Desc" xml:space="preserve">
<value>绘制结果的线条粗细</value>
</data>
</root>
+56
View File
@@ -1881,4 +1881,60 @@
<data name="ChessboardImageError" xml:space="preserve">
<value>图像{0}: {1:F4} 像素</value>
</data>
<!-- EdgeLineFitProcessor -->
<data name="EdgeLineFitProcessor_Name" xml:space="preserve">
<value>边缘查找拟合直线</value>
</data>
<data name="EdgeLineFitProcessor_Description" xml:space="preserve">
<value>沿搜索线放置卡尺检测边缘点,拟合直线(支持最小二乘和RANSAC</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount" xml:space="preserve">
<value>卡尺数量</value>
</data>
<data name="EdgeLineFitProcessor_CaliperCount_Desc" xml:space="preserve">
<value>沿搜索线等间距放置的卡尺数量</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth" xml:space="preserve">
<value>卡尺宽度</value>
</data>
<data name="EdgeLineFitProcessor_CaliperWidth_Desc" xml:space="preserve">
<value>每个卡尺的搜索长度(像素),沿垂直于搜索线方向</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity" xml:space="preserve">
<value>边缘极性</value>
</data>
<data name="EdgeLineFitProcessor_EdgePolarity_Desc" xml:space="preserve">
<value>边缘方向:BrightToDark(亮到暗)、DarkToBright(暗到亮)、Both(双向)</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold" xml:space="preserve">
<value>边缘阈值</value>
</data>
<data name="EdgeLineFitProcessor_EdgeThreshold_Desc" xml:space="preserve">
<value>边缘梯度强度阈值,低于此值的边缘将被忽略</value>
</data>
<data name="EdgeLineFitProcessor_Sigma" xml:space="preserve">
<value>平滑Sigma</value>
</data>
<data name="EdgeLineFitProcessor_Sigma_Desc" xml:space="preserve">
<value>高斯平滑的标准差,用于抑制噪声(越大越平滑)</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod" xml:space="preserve">
<value>拟合方法</value>
</data>
<data name="EdgeLineFitProcessor_FitMethod_Desc" xml:space="preserve">
<value>直线拟合算法:LeastSquares(最小二乘)、RANSAC(鲁棒拟合,可剔除异常点)</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold" xml:space="preserve">
<value>RANSAC阈值</value>
</data>
<data name="EdgeLineFitProcessor_RansacThreshold_Desc" xml:space="preserve">
<value>RANSAC内点判定距离阈值(像素),点到直线距离小于此值视为内点</value>
</data>
<data name="EdgeLineFitProcessor_Thickness" xml:space="preserve">
<value>线条粗细</value>
</data>
<data name="EdgeLineFitProcessor_Thickness_Desc" xml:space="preserve">
<value>绘制结果的线条粗细</value>
</data>
</root>