如何更改公式以检测各个角度的条码?- MATLAB

信息处理 matlab 计算机视觉
2021-12-21 05:32:07

如何更改公式以检测各个角度的条码?

公式

原始图像 处理后的图像

 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
2个回答

如果您拥有的过滤器对您来说足够好,您可以简单地使用imrotate创建源图像的几个旋转版本,并在每个版本上使用您拥有的过滤器(确保使用bilinear以获得合理的导数)

您的方程突出显示了 X 方向的梯度幅度始终高于 Y 方向的区域。为了使这项工作在所有方向上都有效,您可能需要在任何方向上的梯度幅度都很高的区域。

尝试使用以下内容:

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

并不是说这基本上会突出每个边缘,但低通滤波器将意味着您需要多个边缘靠近在一起。