2012-07-05 2 views
10

OpenCV에서 HoughLines 또는 HoughLinesP 함수는 HoughCircles 함수처럼 누적 기수 순서로 라인 목록을 반환합니까? 나는 선들의 순서를 알고 싶다. 또한 라인에 대한 누산기 값을 얻는 것이 매우 편리하므로 고정 된 임계 값 대신 지능형 및 적응 형 임계 값을 사용할 수 있습니다. rewriting OpenCV myself없이 주문 또는 누적 기 값을 사용할 수 있습니까?OpenCV Hough 가장 강한 라인

+1

좋은 하나입니다. 나는 항상 선들이 순서대로 주어 졌다고 생각했다. 그리고이 가정은 지금까지 나의 결과와 일관성이있었습니다 ... 그러나 확신하는 것이 좋을 것입니다. –

답변

11

HoughTransform은 줄 수에 따라 내림차순으로 줄을 정렬합니다. 코드를 볼 수 있습니다 here

그러나 투표 회수는 함수가 반환 할 때 손실됩니다. OpenCV를 수정하는 유일한 방법입니다.

좋은 소식은 그다지 복잡하지 않다는 것입니다. 나는 한 번 그랬습니다. 출력을 vector<Vec2f>에서 vector<Vec3f>으로 변경하고 마지막 매개 변수를 투표 수로 채우는 데 몇 분의 시간이 걸립니다. 무릎이 C에서 구현되고, 그 위에 래퍼 C++에있다, 그래서 당신은 구현과 래퍼를 모두 수정해야 -

또한, 당신은 세 번째 매개 변수를 추가 CvLinePolar을 수정해야합니다. 수정

주요 코드는 여기

for(i = 0; i < linesMax; i++) 
{ 
     CvLinePolar line; 
     int idx = sort_buf[i]; 
     int n = cvFloor(idx*scale) - 1; 
     int r = idx - (n+1)*(numrho+2) - 1; 
     line.rho = (r - (numrho - 1)*0.5f) * rho; 
     line.angle = n * theta; 

     // add this line, and a field voteCount to CvLinePolar 
     // DO NOT FORGET TO MODIFY THE C++ WRAPPER 
     line.voteCount = accum[idx];   

     cvSeqPush(lines, &line); 
} 
+0

코드를 명확히하고 지적 해 주셔서 감사합니다. 나는 확률 론적 버전을 사용하고 있으며 코드를 통해, 속도를 높이기 위해 linesMax를 가져 오는 것이 좋을 것이다. – zzzz

+1

Probabilistic은 같은 파일에 있습니다. 이미 찾은 것 같습니다. 라인 검색에서의 다른 접근 방식은 투표 수가 고전적인 H 에서처럼 중요하지 않다는 것을 의미합니다. 한 라인에 최소 필수 투표가있는 한 결과는 결과 대기열에 푸시됩니다. 정렬이 수행되지 않습니다. – Sam

+0

안녕하세요, 죄송합니다.이 스레드를 개선했지만 probalistic hough transform에서 accumulator 값을 얻으려는 아이디어가 있습니까? 나는 accumulator 행렬에서 라인의 득표 수를 확실히 알 수 없다. – Aeefire