2011-04-24 29 views
12

今後の作業のためにMatlabで画像を整列する方法を知る必要があります。例えばイメージの整列方法 - Matlab

私は次のナンバープレートの画像を持っていると私はすべての 数字を認識します。

enter image description here

私のプログラムはとてもまっすぐな画像のために働く、私は光学認識システムをプリフォーム画像を整列させ、その後、 する必要があります。

方法は、プレートのすべての種類のと角度のすべての種類に合う万能な限りする必要があります。

編集:私はハフトランスフォームでこれを実行しようとしましたが、成功しませんでした。誰でも私にこれを手伝うことができますか?

ご協力いただければ幸いです。

+3

見ることができます先に計算した角度の回転行列を用いてアフィン変換を行う。これはmatlabに相当するものはありますか?その後、あなたはそれが役に立つと思うかもしれません。あなたの答えは – AruniRC

答えて

15

溶液を最初Mathematicaで@belisariusによって実現次に、コメントで@AruniRCによりを示唆しました。以下はMATLABでの私の解釈です。

考え方は基本的に同じである:せん断画像を整列させるために変換を実行最後に、計算線は角、ハフ変換を用いて、顕著なラインを見つけ、キャニー法を用いてエッジを検出します。

%# read and crop image 
I = imread('http://i.stack.imgur.com/CJHaA.png'); 
I = I(:,1:end-3,:);  %# remove small white band on the side 

%# egde detection 
BW = edge(rgb2gray(I), 'canny'); 

%# hough transform 
[H T R] = hough(BW); 
P = houghpeaks(H, 4, 'threshold',ceil(0.75*max(H(:)))); 
lines = houghlines(BW, T, R, P); 

%# shearing transforma 
slopes = vertcat(lines.point2) - vertcat(lines.point1); 
slopes = slopes(:,2) ./ slopes(:,1); 
TFORM = maketform('affine', [1 -slopes(1) 0 ; 0 1 0 ; 0 0 1]); 
II = imtransform(I, TFORM); 

はさて、これは私が最も顕著ほぼ水平ハフラインを見つけると言うだろうOpenCVのであれば、その角度を計算した結果

%# show edges 
figure, imshow(BW) 

%# show accumlation matrix and peaks 
figure, imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, 'InitialMagnification','fit') 
xlabel('\theta (degrees)'), ylabel('\rho'), colormap(hot), colorbar 
hold on, plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2), hold off 
axis on, axis normal 

%# show image with lines overlayed, and the aligned/rotated image 
figure 
subplot(121), imshow(I), hold on 
for k = 1:length(lines) 
    xy = [lines(k).point1; lines(k).point2]; 
    plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2); 
end, hold off 
subplot(122), imshow(II) 

canny_edges hough_transform lines_overlayed_image_aligned

+0

すばらしい答え。ありがとうアムロ。 +1。 – rayryeng

3

テキスト認識のための機械学習ツールボックスのいくつかの種類を使用している場合は、ALLプレートから学ぼう - 整合したものではないだけに。プレートを変形すると、認識結果も同様に良好になるはずです。変形すると、真の数に応じた新しい情報は画像を向上させないからです。全ての画像は、そのような暗い背景がある場合

0

は、画像、明るい領域の上部または下部にフィットラインを2値化し、線の勾配からアフィン射影行列を計算することができます。エッジ検出とハフ変換を用いて、Mathematicaで

+0

ありがとう。私はすべての画像を二値化していますので、背景はこのようになります。どのように私はラインに合わせることができますか? –

6

enter image description here

+0

あなたの答えに感謝します。 Matlabでそれを行う方法を知っていますか?私のMatlabのスキルはあまり良くありません... –

+2

@Michael申し訳ありませんが、Matlabはここにありません。しかし、ハフ変換、エッジ検出、せん断変換というキーワードがあります。 –

+1

@Michael、@belisarius:私はこの1つからインスピレーションを受けたMATLABのソリューションを投稿しました – Amro

関連する問題