캐니 에지 검출(Canny)이란? AI에서 밝기 경계를 가는 선으로 찾는 방법
TL;DR
캐니 에지 검출은 이미지의 밝기 변화에서 가는 경계 후보를 찾고, 두 임계값과 연결 관계로 선을 남기는 방법입니다. 잡음을 줄이고 기울기를 계산한 뒤 두꺼운 반응을 얇게 정리합니다. 강한 경계에 이어진 약한 후보는 살리지만 고립된 약한 후보는 버립니다. 출력은 사물 이름이나 내부 영역이 아닌 에지 지도입니다. 흐림·그림자·설정에 따라 필요한 선이 끊기거나 불필요한 선이 남으므로 원본과 함께 확인합니다.
핵심 3줄 요약
- 핵심 1
밝기 변화의 경계 후보를 찾습니다. 픽셀의 밝기 자체보다 이웃 사이 변화량을 살피고 가는 선을 만듭니다. - 핵심 2
두 임계값과 연결을 함께 봅니다. 강한 후보를 출발점으로 삼아 이어진 약한 후보를 남기는 히스테리시스를 사용합니다. - 핵심 3
윤곽선과 대상 인식은 다릅니다. 배경 무늬와 그림자도 검출됩니다. 선만으로 물체 이름이나 정확한 면적을 알 수는 없습니다.
이 글에서 다룰 내용
- 캐니 에지 검출의 한 문장 정의
- 강한 선과 약한 선으로 이해하는 연결 예시
- 평활화·기울기·비최대 억제·히스테리시스의 순서
- 두 임계값·sigma·출력 자료형의 뜻
- HOG·이미지 분할·탐지 상자 NMS와의 차이
- 경계 후보 검토와 실전 체크리스트
- 잡음·그림자·닫히지 않은 선의 주의점
캐니 에지 검출을 한 문장으로 정의하면 무엇인가요?
캐니 에지 검출은 영상의 밝기 기울기에서 국소적으로 강한 위치를 추리고, 이중 임계값과 연결 추적으로 경계 픽셀을 선택하는 다단계 영상 처리 알고리즘입니다.
영문명은 Canny Edge Detection이며 캐니 에지 검출, 캐니 엣지 검출처럼 부릅니다. 여기서 에지는 이미지 가장 바깥 테두리만 뜻하지 않습니다. 물체 내부의 무늬나 그림자처럼 밝기가 달라지는 위치도 후보가 됩니다.
캐니 자체는 정답 라벨로 가중치를 학습하지 않습니다. 정해진 계산과 사용자가 고른 설정으로 에지 지도를 만듭니다. AI 영상 처리의 입력 점검이나 후속 형태 분석에 결합할 수 있지만 이 단계가 대상의 의미를 판정하지는 않습니다.
한 줄 정리: 캐니는 어디에서 밝기가 뚜렷하게 바뀌는지 표시합니다. 그 선이 어떤 사물의 경계인지는 별도의 문제입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 밝은 배경 위의 어두운 상품 상자를 촬영했다고 가정해 보겠습니다. 상자 가장자리에서는 밝기가 크게 달라지지만 바닥의 옅은 그림자와 표면 무늬에서도 변화가 생깁니다. 캐니는 이 변화들을 계산한 뒤 필요한 경계 후보를 추립니다.
연결 단계만 떼어 생각해 보겠습니다. 이미 가늘게 정리된 후보 A·B·C가 서로 이웃하고 기울기 크기가 각각 240·160·120이라고 가정합니다. 떨어진 후보 D의 크기는 160입니다. 낮은 임계값은 100, 높은 임계값은 200으로 둡니다. 이 숫자는 원본 픽셀 밝기가 아닙니다.
A는 높은 기준을 넘으므로 출발점입니다. B와 C는 낮은 기준을 넘고 A에서 이어지는 경로에 있으므로 함께 남습니다. D는 B와 크기가 같아도 강한 후보에 연결되지 않아 버립니다. 약한 후보가 살아남으려면 반드시 강한 후보 바로 옆에 붙어 있어야 하는 것은 아닙니다.
이 고정 예시는 Python 표준 라이브러리로 연결 단계만 확인했으며 A·B·C가 남았습니다. 실제 사진에 OpenCV나 scikit-image의 전체 캐니 함수를 실행해 얻은 검출 결과나 성능 수치는 아닙니다.
쉬운 예시: 진한 선을 시작점으로 삼아 옅지만 이어진 선을 따라가는 흐름입니다. 선이 실제 상품 경계인지 확인하는 판단까지 자동으로 끝나는 것은 아닙니다.
왜 AI에서 캐니 에지 검출이 중요한가요?
픽셀과 의미 판정 사이의 중간 결과를 봅니다
원본 사진만으로는 영상 처리의 어느 단계에서 중요한 윤곽이 사라졌는지 찾기 어렵습니다. 에지 지도를 원본에 겹쳐 보면 가는 획이나 약한 경계가 남았는지 확인할 수 있습니다. 신경망의 설명이나 정답 마스크를 대신하는 그림은 아닙니다.
잡음 억제와 세부 보존의 절충을 드러냅니다
작은 밝기 변화까지 모두 경계로 남기면 배경이 복잡해집니다. 반대로 강한 평활화나 높은 기준은 필요한 가는 선도 지웁니다. 공식 scikit-image 예제도 같은 영상에 서로 다른 sigma를 적용해 결과를 비교합니다. 예제의 더 매끈한 선을 모든 이미지의 최적 설정으로 옮기지는 않습니다.
후속 형상 처리의 출발점을 제공합니다
경계 후보를 구한 뒤 연결 성분, 윤곽 추출이나 직선·원 검출 같은 별도 계산으로 넘기는 구성을 검토할 수 있습니다. 캐니 출력에 이미 사물별 번호, 도형 이름과 실제 길이가 들어 있다고 해석하지 않습니다. 후속 처리의 성공 여부는 따로 평가합니다.
핵심 인사이트: 캐니의 출력은 최종 인식 결과가 아니라 위치가 있는 경계 후보입니다. 선이 많거나 선명하다는 이유만으로 업무 품질이 높다고 볼 수는 없습니다.
캐니 에지 검출은 어떤 순서로 작동하나요?
1. 잡음을 줄이며 비교할 영상을 준비합니다
기본 설명에서는 가우시안 평활화로 작은 잡음의 영향을 줄입니다. scikit-image의 canny는 sigma로 평활화 폭을 받습니다. 구현마다 평활화가 포함되는 위치와 입력 조건이 다르므로 함수 이름만 보고 같은 전처리라고 가정하지 않습니다. 색상 사진은 선택한 경로에 맞는 회색조와 값 범위로 준비합니다.
2. 가로·세로 기울기의 크기와 방향을 구합니다
Sobel 같은 미분 연산으로 주변 밝기의 변화를 계산합니다. 기울기는 밝기가 빠르게 바뀌는 방향을 가리키므로 경계선을 따라가는 방향과 구별합니다. 결과의 크기는 변화의 세기이며 물체일 확률이나 원본 밝기값이 아닙니다.
3. 비최대 억제로 두꺼운 반응을 가늘게 합니다
한 경계 주변에서 여러 픽셀이 동시에 강하게 반응할 수 있습니다. 기울기 방향의 앞뒤를 비교해 국소적으로 큰 위치를 남기고 주변 반응을 억제합니다. 이 단계의 목적은 경계 후보를 가늘게 만드는 일입니다. 영상의 모든 선이 반드시 서로 분리되거나 완전히 닫힌 곡선이 된다는 보장은 없습니다.
4. 두 임계값과 연결 관계로 최종 후보를 고릅니다
높은 임계값의 강한 후보를 출발점으로 삼고 낮은 기준을 만족하는 후보 중 연결된 것을 남깁니다. scikit-image 설명과 확인한 구현은 상하좌우뿐 아니라 대각선도 이웃인 8방향 연결을 사용합니다. 후보를 따라 여러 단계로 이어진 경로도 포함되며 강한 시작점이 없는 약한 덩어리는 제외합니다.
실전 팁: 원본, 평활화 설정, 임계값과 최종 에지 지도를 함께 보관하세요. 최종 흑백 그림만으로는 선이 사라진 원인을 구별하기 어렵습니다.
주요 설정과 결과는 어떻게 읽나요?
두 임계값은 밝기가 아니라 기울기를 가릅니다
OpenCV의
threshold1
과
threshold2
는 히스테리시스에 쓰는 기준입니다. 문서는 둘 중 작은 값을 연결에, 큰 값을 강한 시작점에 사용한다고 설명합니다. scikit-image는
low_threshold
와
high_threshold
를 명시하며 낮은 값이 높은 값보다 크면 오류가 납니다. API마다 순서 처리도 확인합니다.
임계값을 낮추면 더 많은 잡음이 남고 높이면 약한 경계가 끊길 수 있습니다. 다만 연결 관계까지 작동하므로 원본 밝기가 기준보다 크면 무조건 검출된다는 설명은 틀립니다. 앞의 예시에서 높은 기준을 150으로 낮추면 고립된 D도 강한 후보가 되어 남습니다.
sigma와 Sobel 설정은 서로 다른 역할입니다
scikit-image의
sigma
는 가우시안 필터의 표준편차입니다. OpenCV의
apertureSize
는 Sobel 연산의 커널 크기이므로 같은 설정으로 바꾸어 읽지 않습니다. OpenCV의
L2gradient
도 기울기 크기의 계산 방식을 고르는 옵션입니다. 기본값은
False
이며
True
로 바꾸면 임계값의 결과도 다시 비교합니다.
scikit-image에서
use_quantiles=True
이면 두 기준을 기울기 크기 분포의 분위수로 해석합니다. 이때 값은 0~1 범위입니다. 최종 선의 픽셀 수를 그 비율로 맞추는 기능은 아니며 비최대 억제와 연결 과정까지 거친 결과는 별도로 확인합니다.
출력 지도와 값의 단위를 함께 확인합니다
OpenCV 이미지 입력 API는 8비트 입력과 같은 크기의 단일 채널 8비트 에지 지도를 안내합니다. scikit-image의 canny는 2차원 회색조 입력을 받아 이진 에지 지도를 반환하며 확인한 구현의 출력은 불리언입니다. 보기에는 흑백이어도 저장 자료형과 후속 함수가 기대하는 값을 확인합니다.
scikit-image가 임계값을 생략했을 때 쓰는 10%·20% 기준은 입력 자료형의 최대값을 기준으로 설명됩니다. 영상별 최솟값과 최댓값을 자동으로 재서 최적 기준을 찾는다는 뜻이 아닙니다. 정수와 실수로 표현한 영상의 범위, 변환 규칙과 경계 처리도 같이 고정합니다.
캐니 에지 검출과 헷갈리는 용어는 무엇이 다른가요?
밝기 이진화·Sobel과의 차이
단순 밝기 이진화는 원본 밝기를 기준으로 픽셀을 나눕니다. Sobel은 밝기 변화의 기울기를 계산합니다. 캐니는 기울기 계산 뒤 가늘게 정리하는 단계와 두 기준의 연결 판정까지 묶습니다. 같은 흑백 화면이 나와도 각 픽셀을 남긴 이유가 다릅니다.
HOG·이미지 분할과의 차이
HOG는 작은 영역의 기울기 방향을 모아 특징 벡터로 만듭니다. 캐니는 경계 후보의 위치를 영상 형태로 남깁니다. 이미지 분할은 픽셀을 영역이나 대상에 할당하는 과제입니다. 캐니만으로 안쪽을 모두 채우거나 상품과 배경의 의미 라벨을 얻지는 않습니다.
탐지 상자의 비최대 억제와의 차이
객체 탐지의 NMS는 점수와 겹침을 기준으로 탐지 상자를 줄이는 후처리입니다. 캐니의 비최대 억제는 기울기 방향의 주변 픽셀을 비교해 반응을 얇게 만듭니다. 이름은 비슷하지만 입력·비교 단위가 달라 IoU 임계값을 캐니에 그대로 넣지 않습니다.
비교 정리: 캐니는 경계 위치의 지도, HOG는 방향 분포의 특징 벡터, 이미지 분할은 영역 라벨입니다. 객체 탐지 NMS는 상자 후보를 정리하는 별도 계산입니다.
실전에서는 어디에 쓰이나요?
문서와 제품의 경계 후보를 점검합니다
문서의 바깥 선이나 제품의 직선 부분을 찾는 처리 흐름에서 후보 영상을 만드는 용도로 검토합니다. 글자와 반사도 경계로 잡힐 수 있으므로 원본에 겹쳐 확인한 뒤 필요한 구역과 선을 선택합니다. 검출된 픽셀만 세어 실제 제품 둘레나 결함 길이라고 부르지 않습니다.
영상 전처리의 기준선을 비교합니다
해상도·조명·필터를 바꿀 때 같은 사진의 에지 결과를 비교하면 어떤 세부가 유지되는지 살필 수 있습니다. 연결이 끊긴 위치와 불필요한 배경선을 따로 기록합니다. 후속 OCR·형태 판정이 목적이라면 그 작업의 실제 오류도 함께 재야 합니다. 에지 수 감소 자체를 개선으로 정의하지 않습니다.
캐니 에지 검출을 적용할 때 어떤 순서로 확인하나요?
1. 필요한 경계와 입력 조건을 정합니다
그림자까지 찾을지 제품의 바깥 윤곽만 필요한지 먼저 적습니다. 원본 크기·촬영 거리·회색조 변환·자료형과 값 범위를 고정합니다. 여러 장의 같은 물체를 비교할 때 확대 비율이 달라지면 선의 두께와 평활화의 상대 범위도 달라집니다.
2. 작은 사례에서 연결 규칙을 확인합니다
강한 선에 이어진 약한 선, 고립된 약한 선과 끊긴 선을 각각 확인합니다. 양쪽 임계값·평활화·기울기 계산을 한꺼번에 바꾸지 말고 어느 변경이 영향을 줬는지 남깁니다. 공식 예제의 숫자는 출발 예시이며 새 이미지의 정답 설정은 아닙니다.
3. 실제 실패와 후속 결과를 함께 평가합니다
검증용 이미지에서 설정을 고른 뒤 다른 촬영 사례를 남겨 최종 확인합니다. 놓친 경계, 잘못 남긴 무늬, 선 연결의 오류와 후속 업무 실패를 나눠 봅니다. 사용한 라이브러리 버전·좌표 변환·설정과 처리 비용도 보관해 같은 조건으로 재검사합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 경계가 곧 물체의 외곽은 아닙니다. 그림자·질감·반사도 강한 밝기 변화를 만듭니다. 낮은 대비나 비슷한 색의 대상은 실제 물체가 있어도 경계가 약할 수 있습니다. 출력의 모든 선을 같은 의미로 취급하지 않습니다.
둘째, 평활화와 임계값을 크게 하면 무조건 좋아지지 않습니다. 잡음을 줄이는 과정에서 작은 문자와 얇은 균열도 사라질 수 있습니다. 필요한 세부의 크기와 사진 해상도를 함께 보고, 예쁜 결과 몇 장만 골라 합격시키지 않습니다.
셋째, 선이 닫혀 있다고 가정하지 않습니다. 가림이나 흐림 때문에 경계가 끊길 수 있고 다른 무늬와 이어질 수도 있습니다. 안쪽 영역 채우기와 면적 계산에는 별도의 연결·영역 검증과 촬영 보정이 필요합니다.
넷째, 라이브러리의 임계값을 그대로 교환하지 않습니다. 입력 범위·미분 필터·기울기 크기·평활화가 다르면 같은 숫자도 같은 결과가 아닙니다. scikit-image의 mask도 단순한 최종 잘라내기와 동일하다고 가정하지 말고 마스크 주변 처리를 확인합니다.
주의: 캐니 에지 지도는 밝기 변화의 계산 결과입니다. 사람·상품의 식별, 결함의 확정 판정이나 안전 판단에는 별도 검증과 필요한 사람 검토를 둡니다.
자주 묻는 질문
Q1. 캐니는 딥러닝 모델인가요?
아닙니다. 캐니 자체는 정한 규칙으로 밝기 경계 후보를 고르는 영상 처리 알고리즘입니다. 이를 뒤의 학습 모델과 결합할 수 있지만 두 단계의 역할은 나누어 봅니다.
Q2. 높은 임계값보다 밝은 픽셀은 모두 검출되나요?
아닙니다. 임계값은 원본의 밝기가 아니라 기울기 크기와 관련됩니다. 앞뒤 비교와 연결 판정도 적용되므로 밝은 평탄 영역이 통째로 경계가 되지는 않습니다.
Q3. 약한 후보는 강한 후보 바로 옆에 있어야 하나요?
바로 옆으로만 제한되지 않습니다. 낮은 기준을 통과한 후보의 연결 경로가 강한 시작점에 닿으면 여러 단계 떨어진 약한 후보도 남습니다. 연결되지 않은 약한 덩어리는 제외합니다.
Q4. 선이 많을수록 검출이 잘된 건가요?
항상 그렇지는 않습니다. 불필요한 무늬와 잡음이 늘었을 수도 있습니다. 필요한 경계의 누락과 잘못 남긴 선을 원본·평가 기준에 맞춰 따로 확인합니다.
Q5. 캐니 결과로 바로 배경을 제거할 수 있나요?
에지 지도는 선의 위치를 남깁니다. 대상 안쪽을 채운 영역 마스크와는 다르며 경계가 끊기거나 그림자와 이어질 수도 있습니다. 배경 제거에 연결하려면 영역 선택과 결과 검수를 별도로 수행합니다.
Q6. sigma와 apertureSize는 같은 설정인가요?
아닙니다. 여기서 sigma는 가우시안 평활화의 표준편차이고 apertureSize는 OpenCV의 Sobel 커널 크기입니다. 입력과 전처리까지 맞춰 별도로 비교합니다.
출처
마무리
캐니 에지 검출은 잡음 완화, 기울기 계산, 비최대 억제와 두 임계값의 연결 판정으로 가는 경계 후보를 남기는 방법입니다. 강한 후보에 이어진 약한 선을 살리는 원리를 알면 임계값 하나로 밝기를 자르는 처리와 구별할 수 있습니다.
감자나라ai님이 적용한다면 원본 값 범위와 평활화, 두 임계값부터 기록해 보세요. 필요한 선이 남았는지 원본과 겹쳐 보고 고립된 잡음·끊긴 경계·후속 업무 오류를 함께 확인합니다. 에지 지도와 물체 인식·영역 분할을 구별하는 것이 출발점입니다.
