2014-12-02 2 views
1

미로에서 다음 이미지를 처리하려고합니다. 내 질문은 가장자리를 처리하는 방법에 관한 것입니다. OpenCV 2.4를 C++과 함께 사용하고 있습니다. 바닥에 페인트 된 선에서 바닥과 벽 사이의 가장자리를 구별 할 수있는 방법이 있는지 알고 싶습니다.줄과 가장자리 감지기, opencv

바닥은 검은 색이며 벽은 흰색이고 바닥에 그려진 선은 흰색입니다.

내가하려는 것은 바닥과 벽 사이의 구별입니다. 바닥에있는 선들은 나에게 거리 참조를 줄 것이고 내가 미로를 돌릴 수 있다면. 벽은 단지 미로의 홀의 한계를 말해주는 반면.

여기서 내가 수행 한 프로세스 이미지를 찾을 수 있습니다.

http://oi61.tinypic.com/34hx7a0.jpg

http://oi60.tinypic.com/2zpqfq0.jpg

나는 선을 감지하고 저장하는 영리한 및 HoughLinesP 기능을 사용하고 있습니다. 그러나 이미지에서 볼 수 있듯이 프로그램은 선과 가장자리를 구분하지 않습니다.

코드 :

vector<Vec4i> get_lines(Mat dst, Mat cdst) 
{ 
    vector<Vec4i> lines; 
    HoughLinesP(dst, lines, 1, CV_PI/180, 100, 50, 10); 
    for(size_t i = 0; i < lines.size(); i++) 
    { 
     Vec4i l = lines[i]; 
     double size = norm(Mat(Point(l[0], l[1])), Mat(Point(l[2], l[3]))); 
     if(size > 100) 
      line(cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA); 
    } 

    return lines; 
} 

그리고 주요 기능은 다음과 같습니다

int main(int argc, char** argv) 
{ 
    const char* filename = argc >= 2 ? argv[1] : "pic1.jpg"; 

    Mat src = imread(filename, 0); 

    if(src.empty()) 
    { 
     help(); 
     cout << "can not open " << filename << endl; 
     return -1; 
    } 

    Mat dst, cdst; 

    Canny(src, dst, 50, 200, 3); 

    cvtColor(dst, cdst, CV_GRAY2BGR); 
    vector<Vec4i> lines = get_lines(dst, cdst); 

    imshow("source W&B", src); 
    imshow("edges", dst); 
    imshow("detected lines", cdst); 

    imwrite("lines.jpg",cdst); 
    imwrite("src.jpg",src); 
    imwrite("canny.jpg",dst); 

    waitKey(); 

    return 0; 
} 
+0

(선이 수직 인 경우, 그것은 벽 벽 모서리입니다) (현실 세계의 물체를 따라). 나는 당신이 찾고있는 것은 "능선 탐지"라고 생각합니다. – Micka

+0

코멘트 Micka에게 감사드립니다! 능선이 내가 찾고있는 것인지 확실하지 않습니다. 내가 닿으려고하는 것에 대해 더 많이 이야기하는 질문을 편집했습니다. – tul1

답변

1

라인의 양쪽에있는 픽셀의 밝기를 비교하는 것입니다 시도하는 분명한 것은.

3 개의 영역을 만듭니다. 즉, 한 변의 작은 변, 다른 변의 변의 작은 변의 화소, 그 변의 근처의 화소. 두 영역 중 평균 밝기를 계산합니다.

벽은 밝은 회색이며, 바닥은 검은 색과 선이 너무 한쪽이 다른 쪽보다 훨씬 밝은

  • 경우, 흰색, 그것은 (그리고 당신도 알 수 있습니다 아마도 가장자리 인 측면이 바닥 임),
  • 양면이 중간보다 현저히 어두우면 아마도 마루에 표시가됩니다.) 이력서 가장자리 (픽셀 정보) 및 3D 가장자리의 정의에 대한 혼동하지 말아;
  • 사실 개체의 가장자리 양식 꽤 좋은 선에서