1

私は現在、画像からバーコードを分離してバーコード情報を読み取る必要があるmatlabプロジェクトを行っています。私が使用している方法はハフ変換です。変換が完了するhoughpeakshoughlines、バーコードの各行間の距離を判断できるようになります。私の画像は、水平または垂直である可能性があります。

私が抱えている問題は、houghpeak検出とhoughlineプロットにあります。縦線のある画像がある場合、バーコードのすべての行が検出されません。線をプロットしているバーコード画像の下にリンクがあります。指定した長さ(この画像の場合は65)を超えるすべての垂直線に線を重ねて、これを取得できるようにしたいと思います情報を取得し、各線間の距離を測定します

ここに画像の説明を入力

「MinLength」として 65 を選択する理由は、この高い値を指定しないと、画像の他の部分に水平線がプロットされるためです。

水平/垂直方向を指定できるようにソーベル エッジ検出を実装しようとしましたが、それを使用するとエラーが発生しました: ('存在しないフィールド 'point1' への参照)。

また、パラメーターについても明確ではありません'FillGap'。matlab のヘルプを読みましたが、まだ理解できていません。私はそれを理解するためにさまざまな価値観をいじってみましたが、あまり明確ではありません.

また、バーコード以上の画像を使用してコードを実装しようとしました。

ここに画像の説明を入力

この画像では、ランダムなハフピークと思われるものだけをピックアップしているため、希望するハフ線をプロットしていません。

だから私の質問は、コードが画像内のバーコードの各「行」にすべてのハフ行をプロットしていない理由を誰か教えてください。

以下はコードです。

前もって感謝します!

 I  = imread('barcode (2).jpg');
 I = im2double(I);
 I = rgb2gray(I);
 BW = edge(I,'canny');
 [H,T,R] = hough(BW);
 figure(1),imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');
 xlabel('\theta'), ylabel('\rho');
 axis on, axis normal, hold on;
 P  = houghpeaks(H,26,'threshold',ceil(0.5*max(H(:))));
 x = T(P(:,2)); 
 y = R(P(:,1));
 plot(x,y,'s','color','white');


 % Find lines and plot them
 lines = houghlines(BW,T,R,P,'FillGap',2,'MinLength',65);
 figure, imshow(BW), hold on
 max_len = 0;
 for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');

   % plot beginnings and ends of lines
   plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
   plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

   % determine the endpoints of the longest line segment 
   len = norm(lines(k).point1 - lines(k).point2);
   if ( len > max_len)
     max_len = len;
     xy_long = xy;
   end
 end

 % highlight the longest line segment
 plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
4

1 に答える 1

1

バーコードを計算するためにライン検出を行う代わりに、バーコードの全長にわたってプロファイルをプロットしてみませんか。このようにして、ピークと谷を検出して、黒と白のセクションを区別できます。

必要な計算能力がはるかに少なくなり、コードがはるかに簡単になります。

于 2013-06-24T10:32:38.420 に答える