Вопрос по computer-vision, opencv, simplecv, python, ocr – Реализация преобразования ширины штриха (SWT) (Python)

16

Кто-нибудь может описать, как я могу реализовать SWT в python, используя opencv или simplecv?

Можно найти реализацию Matlab (на основе мекс-файла C ++)here. Shai
эта ссылка определенно работает:sites.google.com/site/roboticssaurav/strokewidthnokia AruniRC
если вы ищете бумажную реализацию, вы можете добавить ссылку на этот документ или, по крайней мере, предоставить ссылку на то, что такое SWT. Abid Rahman K
может быть полезно:stackoverflow.com/questions/4837124/… Abid Rahman K
я уже видел их, но ссылка была сломана, и ни код, ни псевдокод недоступны. pylover

Ваш Ответ

2   ответа
8

ния, описанного в & APOS;ROBUST TEXT DETECTION IN NATURAL IMAGES WITH EDGE-ENHANCED MAXIMALLY STABLE EXTREMAL REGIONS отHuizhong Chen, Sam S. Tsai, Georg Schroth, David M. Chen, Radek Grzeszczuk, Bernd Girod& APOS ;.

Это не то же самое, что описано в статье, но грубое приближение, которое послужило моей цели. Думаю, я должен поделиться этим, чтобы кто-то мог найти это полезным (и указать на любые ошибки / улучшения). Он реализован на 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
О, я совсем не это имел в виду. Просто наблюдение. И извините, я виноват в том, что ранее не видел ссылку на документ ICIP. На самом деле, использование преобразования расстояния для получения полуширины намного проще и элегантнее в плане реализации. Лично я использовал оператор Лапласа, чтобы получить локальные экстремумы dist. сделка изображение, но ваш способ расширения чище.
@AruniRC В данной ссылке приведена подробная информация об этом методе. На самом деле эта штука на половину ширины хода не мое наблюдение. Очень жаль, если мое письмо выглядит так, как будто оно мое. Вся заслуга в этом должна пойти на авторов этой статьи.
Входное изображение вашего метода должно иметь фоновое значение, равное нулю, и значение переднего плана, равное единице? Как бы я это понял?
Локальные максимумы Преобразования Дистанций приведут к половине ширины хода. Это хорошее наблюдение, хотя некоторые газеты в 2011-2012 годах использовали именно эту вещь в сочетании с детекторами регионов, такими как MSER.
@BastianSchoettle Мы применяем SWT к двоичному изображению, поэтому вы можете использоватьthreshold сmaxval установлен в1 создать это двоичное изображение. Просто пример.
16

Ссылка с подробной информацией о реализации с ссылкой для скачивания кода внизу:SWT

Для полноты изложения также упомянуто, что SWT или Stroke Width Transform были разработаны Epshtein и другими в 2010 году и оказались одним из самых успешных методов обнаружения текста до настоящего времени. Он не использует машинное обучение или сложные тесты. В основном, после обнаружения края Канни на входном изображении, он рассчитывает толщину каждого штриха, составляющего объекты на изображении. Поскольку текст имеет равномерно толстые штрихи, это может быть надежной функцией идентификации.

Реализация, приведенная в ссылке, использует C ++, OpenCV иУвеличение библиотека, которую они используют для подключенного обхода графа и т. д. после вычисления шага SWT. Лично я проверил его на Ubuntu, и он работает довольно хорошо (и эффективно), хотя точность не является точной.

Большое спасибо, еще раз pylover

Похожие вопросы