>백엔드 개발 >파이썬 튜토리얼 >이미지 가장자리 감지를 위해 Python을 사용하는 방법

이미지 가장자리 감지를 위해 Python을 사용하는 방법

王林
王林앞으로
2023-06-03 21:22:012013검색

가장자리 감지

이미지 가장자리는 객체를 표현하는 주변 픽셀의 회색조가 단계적으로 변경되는 이미지의 픽셀 집합을 나타냅니다.

이미지에서 서로 다른 회색조를 갖는 두 인접 영역의 교차점에는 회색조의 빠른 전환 또는 점프가 있어야 합니다. 이는 이미지의 각 영역 가장자리 위치에 해당합니다. 방향, 계단 속성, 모양 등과 같은 가장자리를 따라 있는 픽셀은 느리게 변경되는 반면 가장자리 방향에 수직인 픽셀은 크게 변경됩니다.

이미지에 있는 대부분의 정보는 가장자리에 집중되어 있습니다. 가장자리가 결정되면 실제로 다양한 영역의 분할이 이루어집니다.

가장자리 감지 연산자

가장자리를 찾으려면 종종 일부 모서리 감지 연산자의 도움이 필요합니다. 이러한 연산자 중 일부는 1차 미분 연산자에 기반한 연산자이고 일부는 2차 미분 연산자입니다.

Roberts 연산자, Prewitt 연산자, Sobel 연산자. 여기에는 x 및 y 방향의 템플릿이 포함되어 있습니다. 각 템플릿은 해당 방향에만 민감하며 해당 방향에서는 확실한 출력을 가지며 다른 방향의 변경에는 거의 반응하지 않습니다. 다음은 몇 가지 일반적인 1차 미분 연산자와 그 특성입니다.

연산자 이름 특성
단순 미분 연산자 는 잡음에 민감하며 잡음에 특정 증폭 효과가 있습니다
Roberts 연산자 는 잡음 제거 효과가 거의 없으며 단순 미분 연산자보다 더 나은 모서리 감지 기능을 가지고 있습니다.
Prewitt 연산자 는 효과적으로 잡음의 영향을 억제하고 모서리 점을 감지할 수 있습니다.
Sobel 연산자 획득된 모서리는 다음과 같습니다. 더 넓어지고 노이즈 억제 효과가 더 강력해집니다
캐니 오퍼레이터 검출된 엣지 위치가 정확하고 엣지가 좁습니다

1. 로버츠 오퍼레이터

이미지 가장자리 감지를 위해 Python을 사용하는 방법

2. 3. Sobel 연산자

Sobel 연산자가 감지한 에지는 Roberts 연산자의 감지 결과보다 더 연속적이고 이미지 세부 사항에 대한 감지 기능이 더 뛰어나며 Sobel 에지 감지기는 로컬 평균화를 도입하므로 노이즈에 미치는 영향이 상대적으로 작습니다. 효과가 더 좋습니다. 이미지 가장자리 감지를 위해 Python을 사용하는 방법

4. Canny 연산자

Canny가 얻은 감지 결과는 Roberts 및 Sobel 연산자보다 우수하며 가장자리 위치 지정이 정확하고 연속적이며 잘못된 가장자리가 거의 없습니다. 단일 픽셀 너비를 가집니다. 이미지 가장자리 감지를 위해 Python을 사용하는 방법알고리즘의 구현은 구체적으로 다음 4단계로 나뉩니다.

가우스 필터를 사용하여 이미지를 매끄럽게 합니다.

  • 1차 편미분의 유한차를 사용하여 기울기의 크기와 방향을 계산합니다.

  • 기울기 진폭 최대 억제에서 비선형성 수행

  • 이중 임계값 알고리즘을 사용하여 가장자리 감지 및 연결

  • 5. 라플라시안 연산자

    일반적인 2차 미분 연산자에는 다음과 같은 라플라시안 연산자가 포함됩니다. 2차원 1차 튜터 연산자는 이미지의 노이즈에 매우 민감하며 감지된 가장자리는 종종 두 배 픽셀 너비이고 방향 정보가 없습니다. 따라서 라플라시안 연산자는 가장자리를 감지하는 데 직접 사용되는 경우가 거의 없지만 주로 알려진 가장자리에 사용됩니다. 픽셀 다음에 해당 픽셀이 이미지의 어두운 영역에 있는지 아니면 밝은 영역에 있는지 확인합니다. 또한, 1차 차분 연산자는 넓은 범위에서 큰 기울기 값을 형성하므로 정확한 위치를 알 수 없는 반면, 2차 차분 연산자의 영교차점을 이용하면 에지를 정확하게 찾을 수 있다.
  • 라플라스 연산자의 노이즈는 소벨 연산자의 노이즈보다 확실히 크지만 모서리가 소벨보다 훨씬 얇으며, 라플라스 변환은 2차 미분 연산자로서 특히 노이즈에 민감하여 이중 모서리와 가장자리 방향을 감지할 수 없습니다.


효과 실험

1. 로버츠 모서리 감지이미지 가장자리 감지를 위해 Python을 사용하는 방법

Prewitt 연산자 코드:

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

2. Prewitt 모서리 감지

이미지 가장자리 감지를 위해 Python을 사용하는 방법Prewitt 연산자 코드:

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

3 , 소벨 엣지 감지

이미지 가장자리 감지를 위해 Python을 사용하는 방법소벨 기능:

edges = cv2.Sobel(img, -1, 1, 1)

4. 캐니 엣지 감지

이미지 가장자리 감지를 위해 Python을 사용하는 방법캐니 기능:

edges = cv2.Canny(img, 5, 100)

5.

edges = cv2.Laplacian(img, -1)
이미지 가장자리 감지를 위해 Python을 사용하는 방법

위 내용은 이미지 가장자리 감지를 위해 Python을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제