소스 검색

Merge branch 'ZIM-DEV' into DEV-旧版UI

ZIM 11 달 전
부모
커밋
51c0f5bbca

+ 6 - 5
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenIdentification.cs

@@ -1004,13 +1004,13 @@ namespace o0.Project
                 }
                 }
                 return Math.Abs(lg.Mean());
                 return Math.Abs(lg.Mean());
             }
             }
-            // 沿直线计算综合梯度(梯度乘以长度系数,再乘以距离系数), distanceRatio是实际距离除以最大距离
+            // 沿直线计算综合梯度(梯度乘以长度系数,再乘以距离系数), distanceRatio是实际距离除以距离阈值
             float estimateGradient(LineIdentified line, float distanceRatio)
             float estimateGradient(LineIdentified line, float distanceRatio)
             {
             {
                 var gM = ScreenGrad(line);
                 var gM = ScreenGrad(line);
                 float e = (float)Math.Sqrt(Math.Ceiling(line.Line.Length / minLength));       // 长度系数,筛选时梯度更大、长度更长的线段更优
                 float e = (float)Math.Sqrt(Math.Ceiling(line.Line.Length / minLength));       // 长度系数,筛选时梯度更大、长度更长的线段更优
-                float d = (1.3f - distanceRatio) / 0.3f;             // 距离系数,距离越近,系数越大
-                line.ZIMGradient = e * d * gM;      // 记录一下综合梯度,新增的识别黑边功能会二次使用
+                float d = (10f - distanceRatio * distanceRatio) / 10f;             // 距离系数,距离越近,系数越大
+                line.ZIMGradient = e * gM + d;      // 记录一下综合梯度,新增的识别黑边功能会二次使用
                 return line.ZIMGradient;
                 return line.ZIMGradient;
             }
             }
             // 根据线段梯度的角度,判断是不是屏幕的边,index代表是哪条边(顺序是: 下、右、上、左)
             // 根据线段梯度的角度,判断是不是屏幕的边,index代表是哪条边(顺序是: 下、右、上、左)
@@ -1051,6 +1051,7 @@ namespace o0.Project
                 Debug.Log($"[IdentifyLineLSD] 根据已有定位数据做筛选, QuadManual: {QuadManual}");
                 Debug.Log($"[IdentifyLineLSD] 根据已有定位数据做筛选, QuadManual: {QuadManual}");
                 manualLines = QuadManual.GetLines().Select((i) => new LineIdentified(0, i, 0, 0, true)).ToArray();
                 manualLines = QuadManual.GetLines().Select((i) => new LineIdentified(0, i, 0, 0, true)).ToArray();
                 var calibration = ScreenLocate.Main.ReDoLocateCalibrationRatio * Size.y;
                 var calibration = ScreenLocate.Main.ReDoLocateCalibrationRatio * Size.y;
+                var distanceMeasure = 0.02f * Size.y;
                 var avgPointCross = manualLines.Select((i) => i.Line.LineCrossWithPoint(avgPoint)).ToArray();     // 对于平均点的corss值
                 var avgPointCross = manualLines.Select((i) => i.Line.LineCrossWithPoint(avgPoint)).ToArray();     // 对于平均点的corss值
                 var avgPointPedal = manualLines.Select((i) => o0Extension.PointPedal(i.Line, avgPoint, out _)).ToArray();     // 当前定位的垂足,下、右、上、左
                 var avgPointPedal = manualLines.Select((i) => o0Extension.PointPedal(i.Line, avgPoint, out _)).ToArray();     // 当前定位的垂足,下、右、上、左
 
 
@@ -1067,7 +1068,7 @@ namespace o0.Project
                             var middleToOldLine = o0Extension.PointPedal(manualLines[line.ScreenLineIndex].Line, (line.Line.A + line.Line.B) / 2, out bool inLineSegment);
                             var middleToOldLine = o0Extension.PointPedal(manualLines[line.ScreenLineIndex].Line, (line.Line.A + line.Line.B) / 2, out bool inLineSegment);
                             if (inLineSegment)
                             if (inLineSegment)
                             {
                             {
-                                quadLinesSemiAuto[line.ScreenLineIndex].Add((estimateGradient(line, distanceToOld / calibration), line));
+                                quadLinesSemiAuto[line.ScreenLineIndex].Add((estimateGradient(line, (float)Math.Floor(distanceToOld / distanceMeasure)), line));
                                 possibleLines.Add(line);
                                 possibleLines.Add(line);
                             }
                             }
                         }
                         }
@@ -1124,7 +1125,7 @@ namespace o0.Project
             {
             {
                 foreach (var (_, line) in ql)
                 foreach (var (_, line) in ql)
                 {
                 {
-                    if (line != resultLines[line.ScreenLineIndex])
+                    if (line != resultLines[line.ScreenLineIndex] && line.Batch < 1) // batch0才做黑边的内部线条检测
                     {
                     {
                         var pedal = o0Extension.PointPedal(line.Line, avgPoint, out _);
                         var pedal = o0Extension.PointPedal(line.Line, avgPoint, out _);
                         var a0 = pedal - avgPoint;
                         var a0 = pedal - avgPoint;

+ 2 - 2
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -950,8 +950,8 @@ public partial class ScreenLocate : MonoBehaviour
     // threshold 的值是0-1,0代表最近,1代表最远
     // threshold 的值是0-1,0代表最近,1代表最远
     public void SetReDoLocateCalibrationRatio(float threshold)
     public void SetReDoLocateCalibrationRatio(float threshold)
     {
     {
-        const float MIN = 0.005f;
-        const float MAX = 0.305f;
+        const float MIN = 0.02f;
+        const float MAX = 0.32f;
         ReDoLocateCalibrationRatio = MIN + (MAX - MIN) * threshold;
         ReDoLocateCalibrationRatio = MIN + (MAX - MIN) * threshold;
     }
     }