在c#

时间:2016-05-26 23:36:05

标签: c# opencv image-processing emgucv magick.net

我想检测给定二进制图像中的所有角度, 图像包含手写字符(黑色白色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();

resulting image

结果点应该是交叉点中间的点, 但是有些不准确,对我来说很关键,因为我想绘制一个围绕着每个圆圈的圆,然后取点和截取圆圈的两个点之间的角度,现在,下一个代码正在做它但是它到很复杂,很长时间只是在这里编写算法:

对于每个交接点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

我认为主要问题是角度点有时不是正确的点而是近邻点。

也许某人有一个更准确的想法,可以找到正确的角度。

0 个答案:

没有答案