Commit bf447aef cuiyadong

Merge branch 'master' of https://gitee.com/sunky045/FeedCounter

2 个父辈 54f08551 dc4f85e6
......@@ -63,6 +63,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AccUtil.cs" />
<Compile Include="ImageUtil.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SplitItem.cs" />
......
此文件的差异被折叠, 点击展开。
......@@ -9,6 +9,7 @@ namespace AccImage
{
public class SplitItem
{
public static double DIFF_PERCENT = 0.5;
public bool isEnd = false;
public double avgRadius = 0;
public int centerX = 0;
......@@ -16,6 +17,8 @@ namespace AccImage
public double currentMaxRadius = 0;
public List<Circle> circles = new List<Circle>();
private List<Circle> nearbyCircles = new List<Circle>();
/// <summary>
/// 一遍结束后调用
/// </summary>
......@@ -29,9 +32,9 @@ namespace AccImage
}
else
{
//与平均半径差值在10%以内,认为OK
//与平均半径差值在50%以内,认为OK
double diff = avgRadius - currentMaxRadius;
if (diff/avgRadius <= 0.5)
if (diff/avgRadius <= DIFF_PERCENT)
{
isValid = true;
}
......@@ -52,26 +55,26 @@ namespace AccImage
circle.x = centerX;
circle.y = centerY;
circles.Add(circle);
if(nearbyCircles.Count % 50 == 0)
{
nearbyCircles = nearbyCircles.Where(c => centerX - c.x < 2 * currentMaxRadius).ToList();
}
nearbyCircles.Add(circle);
currentMaxRadius = 0;
centerX = 0;
centerY = 0;
////平均半径
//double total = 0;
//foreach (Circle c in circles)
//{
// total = total + c.radius;
//}
//avgRadius = total / circles.Count;
if(circle.radius > avgRadius)
{
avgRadius = circle.radius;
}
}
else
{
isEnd = true;
}
}
......@@ -134,31 +137,23 @@ namespace AccImage
{
Point2d point = new Point2d(px, py);
double minDistanceToCircle = -1;
foreach (Circle c in circles)
List<Circle> neighbourCircles = nearbyCircles;
if (oneBlobRadius > 0)
{
neighbourCircles = nearbyCircles.Where(c => Math.Abs(c.x - px) <= 2 * oneBlobRadius && Math.Abs(c.y - py) <= 2 * oneBlobRadius).ToList();
}
foreach (Circle c in neighbourCircles)
{
Point2d circleCenter = new Point2d(c.x, c.y);
double distanceToCircle = point.DistanceTo(circleCenter);
if (distanceToCircle <= c.radius)
double distanceToCircle = point.DistanceTo(circleCenter) - c.radius;
if (distanceToCircle <= DIFF_PERCENT * c.radius)
{
return 0;
}
//当前点到料盘中心与圆心到料盘中心的距离在直径内,忽略
//if(oneBlobRadius != -1 && oneBlobWidth != -1)
//{
// double distanceToReelCenter = point.DistanceTo(reelCenter);
// double circleCenterToReelCenter = circleCenter.DistanceTo(reelCenter);
// if (Math.Abs(distanceToReelCenter - circleCenterToReelCenter) < oneBlobRadius)
// {
// if (distanceToCircle < oneBlobWidth)
// {
// return 0;
// }
// }
//}
if (minDistanceToCircle == -1 || distanceToCircle < minDistanceToCircle)
{
minDistanceToCircle = distanceToCircle - c.radius;
minDistanceToCircle = distanceToCircle;
}
}
return minDistanceToCircle;
......@@ -171,6 +166,7 @@ namespace AccImage
public int x;
public int y;
public double radius;
public Scalar color = Scalar.Green;
public double distanceToCenter = 0;
public double distanceToCircle(Circle c)
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!