6

그래서 나는이 같은 이미지를 가지고 내가 SURF를 사용하려면Haar wavelet을 사용하여 이미지의 선을 감지하는 방법?</p> <p><img src="https://i.stack.imgur.com/kH27E.jpg" alt=" CG generated bathroom "></p> <p>내가 (내가 원하는 모든 라인을 그려하지 않은하지만 난 당신이 내 아이디어를 얻을 수 있기를 바랍니다) 이런 식으로 뭔가를 얻으려면 :</p> <p>

 Black & White CG generated bathroom with some red lines between tiles 는 (() 강력한 기능을 가속화 첫번째 허버트 베이 등. 2006 년 제시 강력한 이미지 설명입니다) 2D Haar의 잔물결 반응과 차종의 합계에 따라 또는 뭔가 효능 이미지의 모든 직선을 찾는 데 필수 이미지를 사용합니다. 나는 그림 픽셀 좌표와 라인의 시작점과 끝점을 기준으로합니다.

그래서이 그림에서 타일과 그 위에 검은 색 선 두 개 사이의 모든 선을 찾습니다.

시작하는 코드 예제 (행 검색 기능 포함)가 있습니까?

내가

+0

http://stackoverflow.com/questions/2596722/is-there-any-super-fast-algorithm-for-finding-lines-on-picture 가능한 복제본 – andand

답변

3

다음은 Hough Transform을 적용하여 검색하는 완전한 예입니다. 작업을 위해 MATLAB을 사용 중입니다 ...

트릭은 이미지를 영역으로 나눠서 각각 다르게 처리하는 것입니다. 이것은 당신이 당신의 씬에서 다른 "텍스쳐"를 가지고 있기 때문입니다 (벽의 위쪽 영역에있는 타일들은 바닥에있는 어두운 영역과 상당히 다르며, 동시에 모든 이미지를 처리하는 것이 최적이 아닙니다).

작업 예를 들어, 생각이 하나를 얻을 수있는 매개 변수를 조정하면서

%# load image, blur it, then find edges 
I0 = rgb2gray(imread('http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg')); 
I = imcrop(I0, [577 156 220 292]);  %# select a region of interest 
I = imfilter(I, fspecial('gaussian', [7 7], 1), 'symmetric'); 
BW = edge(I, 'canny'); 

%# Hough Transform and show accumulated matrix 
[H T R] = hough(BW, 'RhoResolution',2, 'Theta',-90:0.5:89.5); 
imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, ... 
     'InitialMagnification','fit') 
xlabel('\theta (degrees)'), ylabel('\rho') 
axis on, axis normal, colormap(hot), colorbar, hold on 

%# detect peaks 
P = houghpeaks(H, 20, 'threshold',ceil(0.5*max(H(:)))); 
plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2); 

%# detect lines and overlay on top of image 
lines = houghlines(BW, T, R, P, 'FillGap',50, 'MinLength',5); 
figure, imshow(I), hold on 
for k = 1:length(lines) 
    xy = [lines(k).point1; lines(k).point2]; 
    plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2); 
end 
hold off 

alt text

alt text

alt text

당신은 다른 지역에 대해 동일한 절차를 시도 할 수 좋은 결과 ..

+0

Hough Transform is quite 느린 ... 그리고 2k 라이브 비디오로 작업해야합니다 ... – Rella

1

당신은 허프가 라인을 찾기위한 변환으로 간단한 접근 방법을 시도 해 봤나) = C 및 C++하지만 다른 읽을 수있는 코드가 아마 나를 위해 작동합니다 사랑? 이 기능과 예제는 OpenCV cvHoughLines2에 포함되어 있습니다.

+0

화산 모양입니다!) – Rella

0

2 차원 웨이브 렛 변환은 waveslim 패키지를 사용하여 R로 구현됩니다. 특히, 함수 dwt2D()는 속도를 위해 C "백엔드"를 사용합니다. 그런 다음 임계 값을 적용하여 선을 찾을 수 있습니다.