数式を変更して、あらゆる角度でバーコードを検出するにはどうすればよいですか?-MATLAB


14

数式を変更して、あらゆる角度でバーコードを検出するにはどうすればよいですか?

式

元画像 処理された画像

 rgb = imread('barcode4.jpg');
% Resize Image
rgb = imresize(rgb,0.33);
figure(),imshow(rgb);
% Convert from RGB to Gray
Igray = double(rgb2gray(rgb));
% Calculate the Gradients
[dIx, dIy] = gradient(Igray);
B = abs(dIx) - abs(dIy);
% Low-Pass Filtering
H = fspecial('gaussian', 20, 10);
C = imfilter(B, H);
C = imclearborder(C);
figure(),imagesc(C);colorbar

回答:


8

使用しているフィルターが十分に機能する場合imrotateは、ソースイメージのいくつかの回転バージョンを作成し、それぞれのフィルターを使用するだけで済みます(bilinear賢明な派生物を取得するために必ず使用してください)


アドバイスをありがとう。いくつかの回転バージョンを作成するにはどうすればよいですか?申し訳ありませんが、MatLabは初めてです

私はバーコードを垂直または水平にすることができます。ただし、式は水平バーコードのみを検出できます。縦と横の両方でバーコードを検出できるように数式を変更できますか。
キム


7

方程式は、X方向の勾配の大きさがY方向の勾配の大きさより一貫して高い領域を強調表示します。これをすべての方向で機能させるには、おそらく、任意の方向の勾配の大きさが大きい領域が必要です。

以下を使用してみてください。

B = double(sqrt(dIx.^2 + dIy.^2) > 0)

これは基本的にすべてのエッジを強調するわけではありませんが、ローパスフィルターは複数のエッジを近づける必要があることを意味します。


コーディングをありがとう!しかし、式を置き換えるときにコードを配置する場所がわかりません。すべてがグリーンになりました。

更新されたバージョンを試してください。
-Nzbuu

しかし、今では画像全体が赤くなります!!
キム

私はバーコードを垂直または水平にすることができます。ただし、式は水平バーコードのみを検出できます。縦と横の両方でバーコードを検出できるように数式を変更できますか。
キム

このフルムールをテストする '' B = double(sqrt(dIx。^ 2 + dIy。^ 2)> 0) "それは機能しません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.