3

matlab自然のシーンの画像でテキストを検出するプログラムを書いています。私はこのビデオ講義と論文の助けを借りています。最初のいくつかのステップを理解し、エッジ検出を行いました (下に画像を追加しています)。今、最終的な画像からテキストのみを抽出(分離)したいと考えています。それ、どうやったら出来るの?

私のコード:

i = imread('f:\new.jpg');
i1 = rgb2gray(i);
imshow(i1);

i2 = edge(i1,'canny',0.3);
imshow(i2);

se = strel('square',2);
i3 = imdilate(i2,se);
imshow(i3);

i4 = imfill(i3,'holes');
imshow(i4);

[Ilabel num] = bwlabel(i4);
disp(num);
Iprops = regionprops(Ilabel);
Ibox = [Iprops.BoundingBox];
Ibox = reshape(Ibox,[4 92]);
imshow(i);

hold on;
for cnt = 1:92
    rectangle('position',Ibox(:,cnt),'edgecolor','r');
end

最終イメージ: ここに画像の説明を入力

4

1 に答える 1

1

画像の一部を切り取るには、境界インデックスであることを知っているマトリックスからサブマトリックスを取得します。たとえば、サブマトリックスがy1行からy2行、x1列からx2列 (すべての境界を含む) に伸びる場合、次のようにサブマトリックスを取得します。

submat = mainmat(y1:y2,x1:x2);

サブマトリックスを抽出する前に、すべての文字の境界座標を取得する必要があります。y1文字分のxコーディネートをお持ちならコレ!画像の領域のすべての座標であろうと、領域の端の座標であろうと、次の方法で境界座標を取得できます。

% x-coordinates of the region are in the vector x
x1 = min( x(:) );
x2 = max( x(:) );
% y-coordinates of the region are in the vector y
y1 = min( y(:) );
y2 = max( y(:) );

すべての文字に対して上記の手順を実行した後、文字を 1 つずつ分離できますが、文字の接続領域を分離したい場合は、文字の境界長方形の重なりを確認する必要があります。

于 2013-03-29T08:44:56.233 に答える