2013-03-20 6 views
2

В настоящее время я выполняю проект matlab, где я должен изолировать штрих-код от изображения и читать информацию о штрих-коде. Метод, который я использую, - это преобразование Хафа, как только трансформация завершена, я использую houghpeaks и houghlines, чтобы определить расстояние между каждой строкой штрих-кода. Мое изображение может быть горизонтальным или вертикальным.Обнаружение определенных строк с использованием преобразования hough/houghlines в matlab

Проблема, связанная с обнаружением houghpeak и графикой houghline. Когда у меня есть изображение с вертикальными линиями, оно не обнаруживает каждую строку штрих-кода. У меня есть ссылка ниже изображения штрих-кода, на котором я рисую строки, я бы хотел, чтобы каждая вертикальная линия по моей заданной длине (65 в случае этого изображения) имела наложенную на нее линию, чтобы затем я мог это сделать информация и измерить расстояние между каждой линией

enter image description here

моей причиной для выбора 65, как моя «MINLENGTH», потому что я получаю горизонтальные линии построены в других частях изображения, если я не указать это высокое значение.

Я попытался реализовать обнаружение края борца, чтобы я мог указать горизонтальное/вертикальное направление, но получить с ним ошибку: («Ссылка на несуществующее поле« точка1 »).

Я также не слишком ясен в параметре 'FillGap', я прочитал его с помощью Matlab, но я все еще не обнимаю его. Я играл с разными ценностями, чтобы попытаться понять это, но я не слишком ясен.

Я также попытался реализовать код, используя изображение, которое имеет не только штрих-код.

enter image description here

В этом образе он также только подбирая то, что кажется случайным 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'); 

ответ

0

Вместо того чтобы делать обнаружение линии, чтобы вычислить ваш штрих-код, почему бы не построить профиль по всей длине штрих-кода. Таким образом вы можете обнаружить пики и впадины, чтобы различать черно-белые секции.

Вам понадобится меньше вычислительной мощности, и ваш код будет намного проще.

Смежные вопросы