我有一张颗粒图像,我试图通过它们是否触摸来确定它们是否已粘合在图像中。我已经使用了imfindcircles
函数但是注意到它总是会出现一些误报或者无法获取所有正确的粘合粒子。
因此,我试图想出另一种识别圈子的方法,并将其与之前的public static class ExtensionMethod
{
public static void CrossFadeAlphaWithCallBack(this Image img, float alpha, float duration, System.Action action)
{
MonoBehaviour mnbhvr = img.GetComponent<MonoBehaviour>();
mnbhvr.StartCoroutine(CrossFadeAlphaCOR(img, alpha, duration, action));
}
public static IEnumerator CrossFadeAlphaCOR(Image img, float alpha, float duration, System.Action action)
{
Color currentColor = img.color;
Color visibleColor = img.color;
visibleColor.a = alpha;
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
img.color = Color.Lerp(currentColor, visibleColor, counter / duration);
yield return null;
}
//Done. Execute callback
action.Invoke();
}
}
函数进行比较。我希望能够绘制图像的强度,然后取每个峰的积分来找到每个圆的面积。然后,如果圆的面积在一定范围内(两个颗粒粘合的区域),那么它将被识别为粘合颗粒。
唯一的问题是我不知道图形部分是否可行。如果有人有想法,我们将不胜感激。
以下是我正在使用的图片。我需要告诉的粒子是较小的粒子:
答案 0 :(得分:1)
阈值图像。 (您可以检查背景值是什么,而不是为背景中具有更大或更小值的所有像素赋予值1加上一些Delta。)
查找已连接的组件。 (Bwcomponent)
使用区域道具检查靠近圆圈的组件。 (地区道具)。您可以这样做,但要查看周边与组件面积之间的比率或组件的紧张性。
答案 1 :(得分:0)