|
@@ -684,7 +684,7 @@ namespace o0.Project
|
|
|
var locateTex = ToLocateTex(PixelsMultipleBatches[batch]);
|
|
var locateTex = ToLocateTex(PixelsMultipleBatches[batch]);
|
|
|
LocateTexTemp.Add(locateTex);
|
|
LocateTexTemp.Add(locateTex);
|
|
|
var ScreenLocateMat = locateTex.Too0Mat(); // 用于获取Lines的Matrix
|
|
var ScreenLocateMat = locateTex.Too0Mat(); // 用于获取Lines的Matrix
|
|
|
- var lineCount = ZIMIdentifyQuadLSD(ref allLines, batch, ScreenLocateMat.zimIdentifyEdgeGradientAny(conSize));
|
|
|
|
|
|
|
+ var lineCount = ZIMIdentifyQuadLSD(ref allLines, batch, ScreenLocateMat.zimIdentifyEdgeGradientAny(conSize), minLength);
|
|
|
log += $"\r\n识别图片{batch}, 识别到的线段数量为: {lineCount}";
|
|
log += $"\r\n识别图片{batch}, 识别到的线段数量为: {lineCount}";
|
|
|
ScreenLocateMatList.Add(ScreenLocateMat);
|
|
ScreenLocateMatList.Add(ScreenLocateMat);
|
|
|
}
|
|
}
|
|
@@ -773,7 +773,7 @@ namespace o0.Project
|
|
|
if (ScreenLocate.Main.SaveToggle.isOn && ScreenLocate.Main.DebugOnZIMDemo)
|
|
if (ScreenLocate.Main.SaveToggle.isOn && ScreenLocate.Main.DebugOnZIMDemo)
|
|
|
{
|
|
{
|
|
|
var FileDirectory = $"Debug_屏幕定位/";
|
|
var FileDirectory = $"Debug_屏幕定位/";
|
|
|
- SaveImages(FileDirectory, log, ScreenLocateTexture, allLinesTex, ScreenQuadTex);
|
|
|
|
|
|
|
+ SaveImages(FileDirectory, log, ScreenLocateTexture, allLinesTex, ChoosableLineTex, ScreenQuadTex);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//times.Add(watch.ElapsedMilliseconds);
|
|
//times.Add(watch.ElapsedMilliseconds);
|
|
@@ -867,7 +867,7 @@ namespace o0.Project
|
|
|
lg.Add(screenLocateMatList[line.Batch][(int)ga.x, (int)ga.y] - screenLocateMatList[line.Batch][(int)gb.x, (int)gb.y]);
|
|
lg.Add(screenLocateMatList[line.Batch][(int)ga.x, (int)ga.y] - screenLocateMatList[line.Batch][(int)gb.x, (int)gb.y]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- float e = (float)Math.Sqrt(Math.Max(1, line.Line.Length / minLength / 3)); // 长度系数,筛选时梯度更大、长度更长的线段更优
|
|
|
|
|
|
|
+ float e = (float)Math.Pow(Math.Ceiling(line.Line.Length / minLength), 0.2f); // 长度系数,筛选时梯度更大、长度更长的线段更优
|
|
|
float d = (3 - distanceRatio) / 2; // 距离系数,距离越近,系数越大
|
|
float d = (3 - distanceRatio) / 2; // 距离系数,距离越近,系数越大
|
|
|
return e * d * Math.Abs(lg.Mean());
|
|
return e * d * Math.Abs(lg.Mean());
|
|
|
}
|
|
}
|
|
@@ -886,7 +886,7 @@ namespace o0.Project
|
|
|
var calibration = ScreenLocate.Main.ReDoLocateCalibrationRatio * Size.y;
|
|
var calibration = ScreenLocate.Main.ReDoLocateCalibrationRatio * Size.y;
|
|
|
oldLines = screen.QuadInCamera.GetLines();
|
|
oldLines = screen.QuadInCamera.GetLines();
|
|
|
|
|
|
|
|
- var pedals = oldLines.Select((i) => o0Extension.PointPedal(i, avgPoint)).ToArray(); // 当前定位的垂足,下、右、上、左
|
|
|
|
|
|
|
+ var pedals = oldLines.Select((i) => o0Extension.PointPedal(i, avgPoint, out _)).ToArray(); // 当前定位的垂足,下、右、上、左
|
|
|
|
|
|
|
|
foreach (var i in allLines)
|
|
foreach (var i in allLines)
|
|
|
{
|
|
{
|
|
@@ -894,7 +894,7 @@ namespace o0.Project
|
|
|
int index = -1;
|
|
int index = -1;
|
|
|
foreach (var j in pedals.Index())
|
|
foreach (var j in pedals.Index())
|
|
|
{
|
|
{
|
|
|
- var d = (o0Extension.PointPedal(i.Line, avgPoint) - pedals[j]).Length;
|
|
|
|
|
|
|
+ var d = (o0Extension.PointPedal(i.Line, avgPoint, out _) - pedals[j]).Length;
|
|
|
if (d < minDistance)
|
|
if (d < minDistance)
|
|
|
{
|
|
{
|
|
|
minDistance = d;
|
|
minDistance = d;
|
|
@@ -904,8 +904,13 @@ namespace o0.Project
|
|
|
//Debug.Log(minDistance +", -----------"+ calibration);
|
|
//Debug.Log(minDistance +", -----------"+ calibration);
|
|
|
if (minDistance < calibration) // 垂足的距离足够近
|
|
if (minDistance < calibration) // 垂足的距离足够近
|
|
|
{
|
|
{
|
|
|
- quadLines[index].Add((estimateGradient(i, minDistance / calibration), i.Line));
|
|
|
|
|
- possibleLines.Add(i.Line);
|
|
|
|
|
|
|
+ // 另外满足,新的线段的中点,到旧线段的垂足,要在旧线段内
|
|
|
|
|
+ var middleToOldLine = o0Extension.PointPedal(oldLines[index], (i.Line.A + i.Line.B) / 2, out bool inLineSegment);
|
|
|
|
|
+ if (inLineSegment)
|
|
|
|
|
+ {
|
|
|
|
|
+ quadLines[index].Add((estimateGradient(i, minDistance / calibration), i.Line));
|
|
|
|
|
+ possibleLines.Add(i.Line);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -969,7 +974,7 @@ namespace o0.Project
|
|
|
return result.ToList();
|
|
return result.ToList();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void SaveImages(string FileDirectory, string log, Texture2D ScreenLocateTex, Texture2D allLinesTex, Texture2D ScreenQuadTex)
|
|
|
|
|
|
|
+ void SaveImages(string FileDirectory, string log, Texture2D ScreenLocateTex, Texture2D allLinesTex, Texture2D ChoosableLineTex, Texture2D ScreenQuadTex)
|
|
|
{
|
|
{
|
|
|
if (!Directory.Exists(FileDirectory))
|
|
if (!Directory.Exists(FileDirectory))
|
|
|
Directory.CreateDirectory(FileDirectory);
|
|
Directory.CreateDirectory(FileDirectory);
|
|
@@ -984,12 +989,21 @@ namespace o0.Project
|
|
|
var pngData2 = allLinesTex.EncodeToPNG();
|
|
var pngData2 = allLinesTex.EncodeToPNG();
|
|
|
if (pngData2 != null)
|
|
if (pngData2 != null)
|
|
|
File.WriteAllBytes($"{FileDirectory}{time}C全部识别线段.png", pngData2);
|
|
File.WriteAllBytes($"{FileDirectory}{time}C全部识别线段.png", pngData2);
|
|
|
- var pngData3 = ScreenQuadTex.EncodeToPNG();
|
|
|
|
|
|
|
+ var pngData3 = ChoosableLineTex.EncodeToPNG();
|
|
|
if (pngData3 != null)
|
|
if (pngData3 != null)
|
|
|
- File.WriteAllBytes($"{FileDirectory}{time}D识别结果.png", pngData3);
|
|
|
|
|
|
|
+ File.WriteAllBytes($"{FileDirectory}{time}D备选线段.png", pngData3);
|
|
|
|
|
+ var pngData4 = ScreenQuadTex.EncodeToPNG();
|
|
|
|
|
+ if (pngData4 != null)
|
|
|
|
|
+ File.WriteAllBytes($"{FileDirectory}{time}E识别结果.png", pngData4);
|
|
|
|
|
+
|
|
|
|
|
|
|
|
Debug.Log($"<color=aqua>({time}) 屏幕识别图片保存至:程序根目录/{FileDirectory}</color>");
|
|
Debug.Log($"<color=aqua>({time}) 屏幕识别图片保存至:程序根目录/{FileDirectory}</color>");
|
|
|
- log += $"\r\n屏幕原图保存{pngData != null}, \r\n黑白色差保存{pngData1 != null}, \r\n全部识别线段保存{pngData2 != null}, \r\n识别结果保存{pngData3 != null}, ";
|
|
|
|
|
|
|
+ log +=
|
|
|
|
|
+ $"\r\n屏幕原图保存{pngData != null}, " +
|
|
|
|
|
+ $"\r\n黑白色差保存{pngData1 != null}, " +
|
|
|
|
|
+ $"\r\n全部识别线段保存{pngData2 != null}, " +
|
|
|
|
|
+ $"\r\n备选线段保存{pngData3 != null}, " +
|
|
|
|
|
+ $"\r\n识别结果保存{pngData4 != null}, ";
|
|
|
File.WriteAllText($"{FileDirectory}{time}屏幕自动定位_日志.log", log);
|
|
File.WriteAllText($"{FileDirectory}{time}屏幕自动定位_日志.log", log);
|
|
|
}
|
|
}
|
|
|
|
|
|