현재 이미지에서 바코드를 분리하고 바코드 정보를 읽어야하는 MATLAB 프로젝트를 진행하고 있습니다. 내가 사용하는 방법은 Hough Transform입니다. 변환이 완료되면 바코드의 각 줄 사이의 거리를 확인할 수 있도록 houghpeaks
및 houghlines
을 사용하고 있습니다. 내 이미지가 가로 또는 세로 일 수 있습니다.matlab에서 hough transform/houghlines를 사용하여 특정 라인을 감지합니다.
내가 겪고있는 문제는 houghpeak
감지 및 houghline
플로팅입니다. 세로선이있는 이미지를 가지고있을 때 바코드의 모든 라인을 감지하지 못합니다. 바코드 이미지 아래에 링크가 있습니다. 아래 그림과 같이 세로 길이가 65 인치를 초과하는 모든 세로선에 선을 겹쳐서 표시하고 싶습니다. 나는이 높은 값을 지정 해달라고하면 나는 수평선 이미지의 다른 부분에 그려 얻고 있기 때문에 정보 내 'MINLENGTH'로 (65)를 선택해 내 이유
각 라인 사이의 거리를 측정입니다.
나는 수평/수직 방향을 지정할 수 있지만 그것을 사용하여 오류를 얻을 수 있도록 sobel 엣지 탐지를 구현하려고 시도했다. (''존재하지 않는 필드 'point1'에 대한 참조).
나는 또한 'FillGap'
매개 변수에 너무 명확하지 않다, 나는 그것에 matlab에 도움을 읽었지만 여전히 내 머리를 얻지 못하고있다. 나는 그것을 시도하고 이해하는 데 다른 가치를 가지고 놀았지만 너무 명확하지 않다.
저는 바코드 이상의 이미지를 사용하여 코드를 구현하려고했습니다. 또한 단지 무작위 houghpeaks 때문에 내가가하고자하는 무릎 선을 플로팅하지 것 같다 무엇을 따기이 이미지에서
.
제 질문은 실제로 코드가 이미지의 바코드의 각 '줄'에 모든 선을 그려 내지 않는 이유를 말해 줄 수 있습니다.
다음은 코드입니다.
미리 감사드립니다.
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');