2016-12-07 2 views
2

Canny 방법을 사용하여 가장자리를 감지하고 싶습니다. 결국 두 개의 가장자리 맵이 필요합니다. 수직 방향으로 1 번, 수평 방향으로 1 번.Oriental Canny Edge Detection

MATLAB에서는 Sobel 또는 Prewitt 연산자를 사용하여 추가 방향 인수를 사용할 수 있지만 Canny에게는이 옵션이 없습니다.

E = edge(I,'Sobel','horizontal') 

Canny를 사용하여 수평 및 수직 가장자리를 각각 추출하는 방법을 알고 싶습니까?

+0

, 그것이 수평 또는 수직 에지를 추출 이치에 맞지 않는다. – obchardon

+0

[당신이 제공 한 링크에서@ obchardon [어떻게 canny edge detection을 할 수 있습니까?] (http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html#steps) – obchardon

+0

"방향 네 가지 가능한 각도 중 하나 (즉, 0, 45, 90 또는 135)로 반올림됩니다. "그래서 저는 그것들이 수직, 수평, 대각선 왼쪽, 대각선 오른쪽에 있다고 가정하고 있습니다. 나는 단지 수직과 수평에 관심이 있습니다. –

답변

2

내장 된 edge 기능을 사용하는 방법은 없습니다. 그러나 Canny 가장자리 감지는 Sobel Operator의 각도를 사용합니다. 이러한 값을 재현하는 것은 매우 쉽습니다.

  1. 이미지로 시작하면 내장 데모 이미지가 사용됩니다. 우리는 가장자리 각도뿐만 아니라 가장자리 위치를 원하기 때문에 우리는, 구현 (edge(A_filter, 'Sobel'))에 내장 사용할 수 없습니다 -

    A = im2double(rgb2gray(imread('peppers.png'))); 
    
  2. 는 검소한가

    A_canny = edge(A, 'Canny'); 
    
  3. 소벨 연산자 가장자리 받기 그래서 우리는 우리 자신의 연산자를 구현합니다.

    a. 가우스 필터. 이것은 Canny의 전처리 단계이므로 여기에서 재현해야합니다.

    A_filter = imgaussfilt(A); 
    

    b. 방향성 그라데이션을 찾기위한 회선

    %These filters measure the difference in values between vertically or horizontally adjacent pixels. 
    %Effectively, this finds vertical and horizontal gradients. 
    vertical_filter = [-1 0 1; -2 0 2; -1 0 1]; 
    horizontal_filter = [-1 -2 -1; 0 0 0; 1 2 1]; 
    A_vertical = conv2(A_filter, vertical_filter, 'same'); 
    A_horizontal = conv2(A_filter, horizontal_filter, 'same'); 
    

    c.

    A_canny_angles = nan(size(A)); 
    A_canny_angles(A_canny) = A_angle(A_canny); 
    
  4. 당신이 난 그래서 경우

    angle_tolerance = 22.5/180*pi; 
    target_angle = 0; 
    A_target_angle = A_canny_angles >= target_angle*pi/180 - angle_tolerance & ... 
        A_canny_angles<= target_angle*pi/180 + angle_tolerance; 
    

에 관심이 각도를 선택

A_angle = arctan(A_vertical./A_horizontal); 
  • 가장자리의 위치에서 각도 값을 가져 각도 계산 수평선을 찾고, 나의 표적 각은 0 일 것입니다. 아래 이미지는 1, 2, 4 및 5 단계를 보여줍니다. 추출 된 수평선의 최종 결과는 오른쪽 하단에 표시됩니다. 큰 각도 허용 오차 창을 사용했기 때문에 이들이 정확히 수평이 아니라는 것을 알 수 있습니다. 이것은 목표 각도를 얼마나 정확하게 타격 하느냐에 따라 조정 가능한 매개 변수입니다. 먼저 영리한 에지 알고리즘 ... 영리한 에지 검출 bidirectionnal되어 작동 방법 읽어야

    Result

  • +0

    나를 위해 충분히 좋아 보인다. 감사! –