我想检测给定二进制图像中的所有角度, 图像包含手写字符(黑色白色bg), 有没有办法让我能够在线路交界处获得100%精度的角度?
我当前的解决方案(下面)确实找到了角度,但有时会发现不需要的角度 - 即接合处附近的角度而不是它上面的角度(以下是一个例子)。 在这个实现中,我使用Magick.net,
因为我不能发布两个以上的链接错误输入字母图像,假设是一个二进制图像,蓝色标记是我想要检测的角度的位置 - 要获得输入二进制图像,他们将需要删除(抱歉)。 letter A
我的代码:
var image = new MagickImage(@"xImg.jpg");
const int Radius = 3;//angle points surrounding circle radius
image.Grayscale(PixelIntensityMethod.Average); //redundent
var lineJunctionsImage = image.Clone(); // an image that will contain only the lines junctions points - angle points
//detect all lines junctions points (black pixels points) in the image
//with morphology method HAM + lineJunction kernel
lineJunctionsImage.Negate();
lineJunctionsImage.Morphology(MorphologyMethod.HitAndMiss, Kernel.LineJunctions);
lineJunctionsImage.Negate();
结果点应该是交叉点中间的点, 但是有些不准确,对我来说很关键,因为我想绘制一个围绕着每个圆圈的圆,然后取点和截取圆圈的两个点之间的角度,现在,下一个代码正在做它但是它到很复杂,很长时间只是在这里编写算法:
对于每个交接点p do: 检测与圆相交的所有黑色像素bi(0> = i) 具有围绕p的上述半径(3), 对于每个双对,计算p与对之间的角度 打印使用以下协议找到的角度: {point1} {angle point} {point 2} 角
找到的角度(标记的角点(中间连接点)):
{11,19} {8,17} {5,19} 112.619
{11,19} {8,17} {9,14} 105.255
{5,19} {8,17} {9,14} 142.12
{24,17} {21,20} {18,19} 116.56
{24,17} {21,20} {20,23} 90
{21,1} {24,0} {27,2} 127.87
{24,0} {27,2} {27,5} 123.7
{26,12} {27,9} {27,6} 161.56
我认为主要问题是角度点有时不是正确的点而是近邻点。
也许某人有一个更准确的想法,可以找到正确的角度。