В настоящее время я выполняю проект matlab, где я должен изолировать штрих-код от изображения и читать информацию о штрих-коде. Метод, который я использую, - это преобразование Хафа, как только трансформация завершена, я использую houghpeaks
и houghlines
, чтобы определить расстояние между каждой строкой штрих-кода. Мое изображение может быть горизонтальным или вертикальным.Обнаружение определенных строк с использованием преобразования hough/houghlines в matlab
Проблема, связанная с обнаружением houghpeak
и графикой houghline
. Когда у меня есть изображение с вертикальными линиями, оно не обнаруживает каждую строку штрих-кода. У меня есть ссылка ниже изображения штрих-кода, на котором я рисую строки, я бы хотел, чтобы каждая вертикальная линия по моей заданной длине (65 в случае этого изображения) имела наложенную на нее линию, чтобы затем я мог это сделать информация и измерить расстояние между каждой линией
моей причиной для выбора 65, как моя «MINLENGTH», потому что я получаю горизонтальные линии построены в других частях изображения, если я не указать это высокое значение.
Я попытался реализовать обнаружение края борца, чтобы я мог указать горизонтальное/вертикальное направление, но получить с ним ошибку: («Ссылка на несуществующее поле« точка1 »).
Я также не слишком ясен в параметре 'FillGap'
, я прочитал его с помощью Matlab, но я все еще не обнимаю его. Я играл с разными ценностями, чтобы попытаться понять это, но я не слишком ясен.
Я также попытался реализовать код, используя изображение, которое имеет не только штрих-код.
В этом образе он также только подбирая то, что кажется случайным houghpeaks и, следовательно, не черчения Хока линии, которые я хотел бы его.
Так что мой вопрос действительно может кто-нибудь сказать мне, почему код не строит все строки hough на каждой «строке» штрих-кода на изображении.
Ниже приведен код.
Заранее благодарен!
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');