18

opencvまたはsimplecvを使用してPythonでSWTを実装する方法を誰かが説明できますか?

4

3 に答える 3

17

さて、ここに行きます:

実装の詳細が記載されているリンクと、下部にあるコードダウンロードリンク:SWT

完全を期すために、SWTまたはStroke Width Transformが2010年にEpshteinなどによって考案され、これまでで最も成功したテキスト検出方法の1つであることが判明したことにも言及します。機械学習や手の込んだテストは使用しません。基本的に、入力画像のキャニーエッジ検出後、画像内のオブジェクトを構成する各ストロークの太さを計算します。テキストのストロークは均一に太いため、これは堅牢な識別機能になります。

リンクに示されている実装では、SWTステップが計算された後、C ++、OpenCV、およびそれらが接続されたグラフ走査などに使用するBoostライブラリを使用しています。個人的にはUbuntuでテストしましたが、精度は正確ではありませんが、非常にうまく(そして効率的に)動作します。

于 2012-06-21T16:08:24.693 に答える
8

ユークリッド距離変換ベースのSWTに似たものを実装しました。これは、Huizhong Chen、Sam S. Tsai、Georg Schroth、David M. Chen、Radek Grzeszczuk、 BerndGirodによる「エッジが強化された最大安定外部領域を使用した自然画像の堅牢なテキスト検出」で説明されています。 。

それは論文で説明されているものと同じではありませんが、私の目的を果たした大まかな概算です。誰かがそれを役に立つと思うかもしれないように(そしてエラー/改善を指摘するために)私はそれを共有するべきだと思った。これはC++で実装され、OpenCVを使用します。

    // bw8u : we want to calculate the SWT of this. NOTE: Its background pixels are 0 and forground pixels are 1 (not 255!)
    Mat bw32f, swt32f, kernel;
    double min, max;
    int strokeRadius;

    bw8u.convertTo(bw32f, CV_32F);  // format conversion for multiplication
    distanceTransform(bw8u, swt32f, CV_DIST_L2, 5); // distance transform
    minMaxLoc(swt32f, NULL, &max);  // find max
    strokeRadius = (int)ceil(max);  // half the max stroke width
    kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 3x3 kernel used to select 8-connected neighbors

    for (int j = 0; j < strokeRadius; j++)
    {
        dilate(swt32f, swt32f, kernel); // assign the max in 3x3 neighborhood to each center pixel
        swt32f = swt32f.mul(bw32f); // apply mask to restore original shape and to avoid unnecessary max propogation
    }
    // swt32f : resulting SWT image
于 2014-08-03T15:03:04.353 に答える
5

完全なライブラリSWTlocがここにありますアルゴリズムのPython3実装


v2.0.0以降

ライブラリをインストールします

pip install swtloc

画像の変換

import swtloc as swt
imgpath = 'images/path_to_image.jpeg'
swtl = swt.SWTLocalizer(image_paths=imgpath)
swtImgObj = swtl.swtimages[0]
swt_mat = swtImgObj.transformImage(text_mode='lb_df',
                                   auto_canny_sigma=1.0,
                                   maximum_stroke_width=20)

ディスプレイの変換


手紙のローカライズ

localized_letters = swtImgObj.localizeLetters(minimum_pixels_per_cc=100,
                                              maximum_pixels_per_cc=10_000,
                                              acceptable_aspect_ratio=0.2)

文字のローカリゼーション


単語のローカライズ

localized_words = swtImgObj.localizeWords()

ここに画像の説明を入力してください

完全開示:私はこのライブラリの作成者です

于 2020-09-17T08:35:38.393 に答える