Sobel 연산자

소벨 연산자는 Prewitt 연산자와 매우 유사합니다. 또한 파생 마스크이며 가장자리 감지에 사용됩니다. Prewitt 연산자와 마찬가지로 sobel 연산자는 이미지에서 두 종류의 가장자리를 감지하는데도 사용됩니다.

  • 수직 방향
  • 수평 방향

Prewitt 연산자와의 차이점

주요 차이점은 소벨 연산자에서 마스크 계수가 고정되어 있지 않으며 파생 마스크의 속성을 위반하지 않는 한 우리의 요구 사항에 따라 조정할 수 있다는 것입니다.

다음은 Sobel 연산자의 수직 마스크입니다.

-1 0 1
-2 0 2
-1 0 1

이 마스크는 Prewitt 연산자 수직 마스크와 정확히 동일하게 작동합니다. 단 하나의 차이점은 첫 번째와 세 번째 열의 중앙에 "2"와 "-2"값이 있다는 것입니다. 이미지에 적용 할 때이 마스크는 수직 가장자리를 강조합니다.

작동 원리

이 마스크를 이미지에 적용하면 수직 가장자리가 두드러집니다. 1 차 도함수처럼 작동하며 가장자리 영역에서 픽셀 강도의 차이를 계산합니다.

가운데 열이 0이므로 이미지의 원래 값을 포함하지 않고 해당 가장자리 주변의 오른쪽 및 왼쪽 픽셀 값의 차이를 계산합니다. 또한 첫 번째 및 세 번째 열의 중심 값은 각각 2와 -2입니다.

이것은 가장자리 영역 주변의 픽셀 값에 더 많은 가중치를 부여합니다. 이렇게하면 가장자리 강도가 증가하고 원본 이미지에 비해 상대적으로 향상됩니다.

다음은 Sobel Operator의 수평 마스크입니다.

-1 -2 -1
0 0 0
1 2 1

위의 마스크는 가로 방향으로 가장자리를 찾고 0 열이 가로 방향이기 때문입니다. 이 마스크를 이미지에 컨볼 루션하면 이미지에서 가로 가장자리가 두드러집니다. 유일한 차이점은 첫 번째와 세 번째 행의 중심 요소로 2와 -2가 있다는 것입니다.

작동 원리

이 마스크는 이미지의 수평 가장자리를 두드러지게합니다. 또한 위 마스크의 원리에 따라 작동하며 특정 가장자리의 픽셀 강도 간의 차이를 계산합니다. 마스크의 중앙 행은 0으로 구성되어 있으므로 이미지에있는 가장자리의 원래 값을 포함하지 않고 특정 가장자리의 위와 아래 픽셀 강도의 차이를 계산합니다. 따라서 강도의 갑작스런 변화를 증가시키고 가장자리를 더 잘 보이게 만듭니다.

이제 이러한 마스크가 실제로 작동하는 것을 볼 시간입니다.

샘플 이미지

다음은 두 마스크 위에 한 번에 하나씩 적용 할 샘플 사진입니다.

수직 마스크 적용 후

위의 샘플 이미지에 세로 마스크를 적용하면 다음과 같은 이미지를 얻을 수 있습니다.

수평 마스크 적용 후

위의 샘플 이미지에 가로 마스크를 적용하면 다음 이미지를 얻을 수 있습니다.

비교

보시다시피 수직 마스크를 적용한 첫 번째 그림에서 모든 수직 가장자리가 원본 이미지보다 더 잘 보입니다. 마찬가지로 두 번째 그림에서 수평 마스크를 적용했으며 결과적으로 모든 수평 가장자리가 표시됩니다.

따라서 이러한 방식으로 이미지에서 수평 및 수직 가장자리를 모두 감지 할 수 있음을 알 수 있습니다. 또한 소벨 연산자와 Prewitt 연산자의 결과를 비교하면 소벨 연산자가 Prewitt 연산자에 비해 더 많은 모서리를 찾거나 모서리를 더 잘 보이게 만드는 것을 알 수 있습니다.

이는 소벨 연산자에서 가장자리 주변의 픽셀 강도에 더 많은 가중치를 할당했기 때문입니다.

마스크에 더 많은 가중치 적용

이제 마스크에 더 많은 가중치를 적용하면 더 많은 가장자리를 얻을 수 있음을 알 수 있습니다. 또한 튜토리얼 시작 부분에서 소벨 연산자에 고정 계수가 없다고 언급했듯이 여기에 또 다른 가중치 연산자가 있습니다.

-1 0 1
-5 0 5
-1 0 1

이 마스크의 결과를 Prewitt 수직 마스크와 비교할 수 있다면 마스크에 더 많은 가중치를 할당했기 때문에이 마스크가 Prewitt에 비해 더 많은 가장자리를 제공한다는 것이 분명합니다.