如何从浮雕对象中提取圆形文本

2024-06-23 18:53:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对象,上面有两个代码。上面印着文字。文字是曲线。一半的文本在对象的顶部,另一半在对象的底部。这是我的图像样本

image

我正在使用OPENCV、深度学习方法和testract-to-OCR-it的代码。 我首先使用HoughCircles()和{}对齐文本,然后使用testract这样的例子sample code。但是由于对齐文本的失真,tesseract无法对文本进行OCR。在

在深入研究中,我无法在tensorflow或torch中找到最佳的曲线文本OCR解决方案。文本检测的来源很多,而不是识别。在

约翰,问候你


Tags: to对象方法代码图像文本itopencv
2条回答

为什么不将循环文本转换为线性文本?类似于这个De-skew characters in binary image,只是稍微复杂一点。所以检测(或手动选择)圆心并将图像转换为未旋转的图像。。。在

所以创建一个新的图像,它的尺寸是6.28*max_radius , 2*max_radius,并使用极轴展开复制像素。。。只需将目标像素位置转换为极坐标,并将其转换为笛卡尔源像素位置。在

<>我不在<强> Python <强> >强> opencv 中,但这里有一个简单的<强> C++ +<强>例:

//                                     -
picture pic0,pic1;                          // pic0 - original input image,pic1 output
//                                     -
void ExtractCircularText(int x0,int y0)     // pic0 -> pic1 center = (x0,y0)
    {
    int x,y,xx,yy,RR;
    float fx,fy,r,a,R;
    // resize target image
    x=       -x0; y=       -y0; a=sqrt((x*x)+(y*y));          R=a;
    x=pic0.xs-x0; y=       -y0; a=sqrt((x*x)+(y*y)); if (R<a) R=a;
    x=       -x0; y=pic0.ys-y0; a=sqrt((x*x)+(y*y)); if (R<a) R=a;
    x=pic0.xs-x0; y=pic0.ys-y0; a=sqrt((x*x)+(y*y)); if (R<a) R=a;
    R=ceil(R); RR=R;
    pic1.resize((628*RR)/100,RR<<1);

    for (yy=0;yy<pic1.ys;yy++)
     for (xx=0;xx<pic1.xs;xx++)
        {
        // pic1 position xx,yy -> polar coordinates a,r
        a=xx; a/=R; r=yy;
        // a,r -> pic0 position
        fx=r*cos(a); x=x0+fx;
        fy=r*sin(a); y=y0+fy;
        // copy pixel
        if ((x>=0)&&(x<pic0.xs))
         if ((y>=0)&&(y<pic0.ys))
            {
            pic1.p[          yy][pic1.xs-1-xx]=pic0.p[y][x];    // 2 mirrors as the text is not uniformly oriented
            pic1.p[pic1.ys-1-yy][          xx]=pic0.p[y][x];
            }
        }
    pic1.save("out.png");
    }
//                                     -

我使用自己的图片类处理图像,因此有些成员是:


xs,ys是图像的像素大小
p[y][x].dd是位于(x,y)位置的像素,为32位整数类型
clear(color)使用color清除整个图像
resize(xs,ys)将图像大小调整为新的分辨率

最后得到的图像:

result

我复制了两个未旋转的图像(因此是2*max_radius height),这样我可以在两种模式下复制图像,使文本的两个方向都可读(因为它们相互镜像)

如果你选择了中心,文本会更直(x0,y0)更准确地说,我只是用鼠标点击圆圈的中心,但我怀疑文本的中心是否与圆/圆盘的中心相同。点击一下这是我能找到的最好的中心:

better center result

结果表明,两种文本和光盘都没有相同的中心。。。在

图像的二值化也不是一个好主意,因为在压缩之前加上更多的噪声也不是一个好主意。看看这些:

中心可以从所选文本(弧)几何计算,只需找到它(边)上最远的点和弧上它们之间的中间点。从中你可以计算弧中心和半径。。。甚至适合。。。在

黑点是一个完美的定心功能,极轴展开似乎工作良好,字符的变形可以忽略不计。在

enter image description here

Tesserac的失败可能是由于图像质量低(模糊)。在

相关问题 更多 >

    热门问题