如何更改公式以检测各个角度的条形码?-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

Answers:


8

如果您使用的滤镜效果很好,则可以简单地使用它imrotate来创建源图像的多个旋转版本,并在每个滤镜上使用滤镜(确保bilinear用于获取有意义的导数)


谢谢你的建议。如何创建多个轮换版本?对不起,我是新MATLAB的

我设法将条形码设置为垂直或水平。但是,该公式只能检测水平条形码。我可以更改公式,以便垂直和水平方向都可以检测到条形码。
金(Kim)


7

您的方程式突出显示了X方向上的梯度幅度始终高于Y方向上的梯度幅度较大的区域。为了使该功能在所有方向上均有效,那么您可能需要在任何方向上的梯度幅度都很高的区域。

尝试使用以下内容:

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

并不是说这基本上会突出显示每个边缘,但是低通滤波器将意味着您需要将多个边缘并拢。


感谢您的编码!但是当我尝试替换公式时,我不知道将代码放在何处,一切都变成绿色。

试试我的更新版本。
Nzbuu 2012年

但是现在整个图像变成红色!
2012年

我设法将条形码设置为垂直或水平。但是,该公式只能检测水平条形码。我可以更改公式,以便垂直和水平方向都可以检测到条形码。
2012年

我测试此furmule '' B =双(SQRT(DIX ^ 2 + DIY ^ 2)> 0。)“不是工作。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.