主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

自然なイメージ内にあるテキストの自動検出と自動認識

この例では,イメージ内でテキストが含まれる領域を検出する方法を説明します。これは構造化されていないシーンに対してよく実行されるタスクです。構造化されていないシーンとは,不確定のシナリオやランダムなシナリオを含むイメージです。たとえば,キャプチャしたビデオからテキストを自動的に検出して認識し,ドライバーに交通標識について注意を促すことができます。これは,テキストの位置が事前に分かっている場合の既知のシナリオが含まれている,構造化されたシーンとは異なります。

構造化されていないシーンからテキストをセグメント化すると,光学式文字認識(OCR)などの追加のタスクに非常に役立ちます。この例における自動テキスト検出アルゴリズムでは,数多くのテキスト領域候補を検出し,テキストを含む確率が低いものを徐々に削除していきます。

手順1:女士を使用したテキスト領域候補の検出

女士特徴検出器はテキスト領域の検出に効果的です[1]。テキストの一貫した色と高いコントラストから安定した強度プロファイルが得られるため,うまく機能します。

関数detectMSERFeaturesを使用してイメージ内のすべての領域を見つけ,結果をプロットします。テキスト領域とともにテキスト以外の領域も多く検出されることに注意してください。

colorImage = imread (“handicapSign.jpg”);I = rgb2gray (colorImage);%检测MSER区域。[mserRegions, mserConnComp] = detectMSERFeatures(I,...“RegionAreaRange”(200 8000),“ThresholdDelta”4);图imshow(我)情节(mserRegions“showPixelList”,真的,“showEllipses”、假)标题(“女士地区”)举行

手順2:基本的な幾何学的特性に基づくテキスト以外の領域の削除

女士アルゴリズムでは大半のテキストが見つかりますが,イメージ内にある,テキストではない他の安定した領域も多く検出されます。ルールベースの方法を使用すると,テキスト以外の領域を削除できます。たとえば,テキストの幾何学的特性を利用して,簡単なしきい値に基づきテキスト以外の領域を除外できます。あるいは,機械学習の方法を使用して,テキストとテキスト以外を区別する分類器を学習させることもできます。通常は,これら2つの方法を組み合わせるとよりよい結果が得られます[4]。この例では,簡単なルールベースの方法を使用して,幾何学的特性を基にテキスト以外の領域をフィルターで除外します。

テキスト領域とテキスト以外の領域の区別に有効な幾何学的特性には,以下を含むいくつかがあります[2,3]。

  • 縦横比

  • 離心率

  • オイラー数

  • 割合

  • 固体度

regionpropsを使用して上記特性のいくつかを測定し,それらの特性の値に基づいて領域を削除します。

%使用regionprops度量MSER属性mserStats = regionprops (mserConnComp,的边界框(“大小)“偏心”...'坚持'“程度”“欧拉”“图像”);%使用边界框数据计算宽高比。bbox = vertcat (mserStats.BoundingBox);w = bbox (: 3);h = bbox (: 4);aspectRatio = w / h;对数据设置阈值以确定要删除哪些区域。这些阈值%可能需要为其他图像进行调整。filterIdx = aspectRatio' > 3;filterIdx = filterIdx | [mserStats. txt]> .995;filterIdx = filterIdx | [mserStats. txt]可靠性)< 3;filterIdx = filterIdx | [mserStats. txt]< 0.2 | [mserStats. exe]程度)> 0.9;filterIdx = filterIdx | [mserStats. txt]EulerNumber] < 4;%去除区域mserStats (filterIdx) = [];mserRegions (filterIdx) = [];显示剩余区域图imshow(我)情节(mserRegions“showPixelList”,真的,“showEllipses”、假)标题('基于几何属性删除非文本区域后')举行

手順3:線幅のばらつきに基づくテキスト以外の領域の削除

テキストとテキスト以外を区別するもう1つの測定基準として,線幅がよく使用されます。"線幅"は,文字を構成する曲線や直線の幅の測定値です。テキスト領域では線幅はあまり変化しない傾向にあり,テキスト以外の領域では線幅のばらつきが大きくなる傾向があります。

線幅を使用してテキスト以外の領域を削除する方法を理解するために,検出されたいずれかの女士領域の線幅を推定してみます。これを行うには,距離変換およびバイナリ細線化操作を使用します[3]。

%获得一个区域的二进制图像,填充它以避免边界效果%在描边宽度计算期间。.Image regionImage = mserStats (6);regionImage = padarray(regionImage, [1 1]);计算描边宽度图像。distanceImage = bwdist (~ regionImage);skeletonImage = bwmorph (regionImage,“薄”、正);strokeWidthImage = distanceImage;strokeWidthImage (~ skeletonImage) = 0;在描边宽度图像旁边显示区域图像。图subplot(1,2,1) imagesc(regionImage) title('地区图像') subplot(1,2,2) imagesc(strokeWidthImage) title(“笔划宽度的形象”

上記のイメージにおいて,線幅のイメージでは領域のほぼ全体にわたり変化がほとんどないことに注意してください。これは,この領域がテキスト領域である可能性が大きいことを示しています。領域を構成するすべての直線と曲線の幅が類似しているのは,人間が読み取れるテキストの一般的な特性だからです。

线幅のばらつきをて,しきい値によりにより户外の领域を削除するに,领域全体におけるををつのメトリクスとして次をに定しなければませんん。

计算笔画宽度变化度量strokeWidthValues = distanceImage (skeletonImage);strokeWidthMetric =性病(strokeWidthValues) /意味着(strokeWidthValues);

。

%阈值行程宽度变化度量Strokewidthreshold = 0.4;strokewidthfilteridx = scrokewidthmetric> strokewidthheshold;

上记のは,検出された各mser领域に别々别々适适しなけれなりませんんのでは,すべての领域はしし后,线幅のばらつきを使っテキストテキストののを使って结果が表示されます。

%处理剩余区域j = 1:numel(mserStats) regionImage = mserStats(j).Image;regionImage = padarray(regionImage, [1 1], 0);distanceImage = bwdist (~ regionImage);skeletonImage = bwmorph (regionImage,“薄”、正);strokeWidthValues = distanceImage (skeletonImage);strokeWidthMetric =性病(strokeWidthValues) /意味着(strokeWidthValues);strokeWidthFilterIdx(j) = strokeWidthMetric > strokeWidthThreshold;结束%根据描边宽度的变化删除区域mserRegions (strokeWidthFilterIdx) = [];mserStats (strokeWidthFilterIdx) = [];显示剩余区域图imshow(我)情节(mserRegions“showPixelList”,真的,“showEllipses”、假)标题(“基于描边宽度变化删除非文本区域后”)举行

手順4:テキスト領域のマージによる最終検出結果の取得

この時点では,すべての検出結果が個々のテキスト文字で構成されています。この結果をOCRなどの認識タスクで使用するには,個々のテキストの文字をマージして単語やテキスト行にしなければなりません。これにより,個々の文字よりも意味のある情報をもつ,イメージ内の実際の単語を認識できるようになります。たとえば,‘退出’という文字列を認識する場合と,{“X”、“E”、“T”,“我”}という個々の文字のセットを認識する場合を比較すると,後者では文字の順序が正しくないため単語の意味が失われます。

個々のテキスト領域をマージして単語やテキスト行にする1つの方法として,まず隣接するテキスト領域を検出してから,これらの領域の周りに境界ボックスを形成します。隣接する領域を見つけるには,あらかじめregionpropsで計算してあった境界ボックスを拡張します。これにより隣接するテキスト領域の境界ボックスが重ね合わされ,同じ単語やテキスト行を構成する複数のテキスト領域により,一連のオーバーラップする境界ボックスが形成されます。

获得所有区域的边界框bboxes = vertcat (mserStats.BoundingBox);%从[x y宽度高度]边界框格式转换为[xmin ymin% xmax ymax]格式,方便使用。xmin = bboxes (: 1);ymin = bboxes (:, 2);Xmax = xmin + bboxes(:,3) - 1;Ymax = ymin + bboxes(:,4) - 1;%将边框展开少量。expansionAmount = 0.02;xmin =(1-扩张量)* xmin;ymin =(1-扩张量)* ymin;xmax =(1+扩张金额)* xmax;ymax =(1+扩张量)* ymax;将边界框修剪到图像边界内Xmin = max(Xmin, 1);Ymin = max(Ymin, 1);xmax = min(xmax, size(I,2));ymax = min(ymax, size(I,1));显示扩展的边界框扩展dbboxes = [xmin ymin xmax-xmin+1 ymax-ymin+1];IExpandedBBoxes = insertShape (colorImage,“矩形”expandedBBoxes,“线宽”3);图imshow (IExpandedBBoxes)标题(“扩展边框文本”

次に,オーバーラップする境界ボックスをマージして,個々の単語またはテキスト行の周りに1つの境界ボックスを形成します。これを行うには,すべての境界ボックスのペア間でオーバーラップ率を計算します。これによってテキスト領域のすべてのペア間の距離が定量化され,非ゼロのオーバーラップ率を検索することによって隣接するテキスト領域のグループを見つけることが可能になります。ペアごとのオーバーラップ率を計算した後,を使用して,非ゼロのオーバーラップ率で”連結された”すべてのテキスト領域を見つけます。

関数bboxoverlapratioを使用してすべての拡張された境界ボックスについてペアごとのオーバーラップ率を計算し,を使用してすべての連結された領域を見つけます。

%计算重叠比率overlapRatio = bboxOverlapRatio(扩展dbboxes,扩展dbboxes);将边界框与自身的重叠率设置为0简化图形表示。n =大小(overlapRatio, 1);overlapRatio (1: n + 1: n ^ 2) = 0;%创建图形图g = (overlapRatio);%查找图中连接的文本区域componentIndices = conncomp (g);

Conncomp.の出力は,各境界ボックスが属している連結テキスト領域のインデックスです。これらのインデックスを使用して,各連結要素を構成する個々の境界ボックスの最小値と最大値を計算することにより,隣接する複数の境界ボックスを1つの境界ボックスにマージします。

%根据最小和最大尺寸合并框。xmin = accumarray(componentIndices', xmin, [], @min);ymin = accumarray(componentIndices', ymin, [], @min);xmax =伏数组(componentIndices', xmax, [], @max);ymax = accumarray(componentIndices', ymax, [], @max); / /组件索引%使用[x y width height]格式合成合并的边界框。text - bboxes = [xmin ymin xmax-xmin+1 ymax-ymin+1];

最後に,検出の最終結果を表示する前に,1つのテキスト領域のみで構成される境界ボックスを削除して,誤検出されたテキストを非表示にします。テキストは,通常はグループ(単語や文)として出現するので,これにより実際にテキストである確率の低い,孤立した領域が削除されます。

%删除仅包含一个文本区域的边界框numRegionsInGroup = histcounts (componentIndices);textBBoxes(numRegionsInGroup == 1,:) = [];显示最终的文本检测结果。ITextRegion = insertShape (colorImage,“矩形”textBBoxes,“线宽”3);图imshow (ITextRegion)标题(“发现文本”

手順5:検出したテキストのOCRによる認識

テキスト領域を検出した後,関数光学字符识别最初にテキストの认识し内の领域のをますないテキストの検出をないない场ををない场场をない场场场场ないない场。光学字符识别の出力に含まれるノイズが大幅に増えることに注意してください。

crtxt = ocr(I, textBBoxes);[ocrtxt。文本)
“未经许可的车辆可能会被拖走,费用由车主承担”

この例では,女士特徴検出器を使用してまずテキスト領域の候補を見つけ,幾何学的測定値を使ってテキスト以外の領域をすべて削除することにより,イメージ内のテキストを検出する方法を説明しました。この例のコードは,よりロバストなテキスト検出アルゴリズムを開発するための適切な開始点となります。また,この例に改善を加えないままでも,たとえばposters.jpgやlicensePlates.jpgなど,他のさまざまなイメージで妥当な結果が得られます。

参考文献

[1]陈,惠忠,等。“具有边缘增强最大稳定的极值区域的自然图像中的强大文本检测。”图像处理(ICIP),2011年第18届IEEE国际会议.IEEE,2011年。

Gonzalez, Alvaro等。“复杂图像中的文本位置。”模式识别(ICPR), 2012第21届国际会议。IEEE 2012。

李,姚,陆虎川。“通过描边宽度检测场景文本。”模式识别(ICPR), 2012第21届国际会议。IEEE 2012。

诺伊曼、卢卡斯和吉里·马塔斯。实时场景文本定位与识别。计算机视觉与模式识别(CVPR), 2012IEEE 2012。