해리스 코너(Harris Corner)란? AI에서 여러 방향의 밝기 변화로 이미지의 특징점을 찾는 방법
TL;DR
해리스 코너 검출은 작은 영상 구역의 밝기 변화가 여러 방향으로 큰 위치를 특징점 후보로 찾는 방법입니다. 가로·세로 기울기를 모아 점수 지도를 만들고 높은 국소 반응을 추립니다. 한 장의 사진에서 점을 찾는 계산이며, 다른 사진과의 대응이나 물체의 이름을 혼자 결정하지 않습니다. 점수 지도·좌표 선택·서브픽셀 보정을 나눠 읽고 흐림·크기 변화·반복 무늬에서 실패하는지 확인합니다.
핵심 3줄 요약
- 핵심 1
한 방향의 선과 여러 방향의 변화를 나눕니다. 평탄한 면·에지·코너를 주변 기울기의 분포로 구별합니다. - 핵심 2
점수와 점 좌표는 다른 출력입니다. 해리스 응답에서 임계값과 이웃 최대값으로 좌표를 선택합니다. - 핵심 3
특징점은 대응의 출발점입니다. 기술자·매칭·추적·기하 검증은 필요한 목적에 맞춰 별도로 붙입니다.
이 글에서 다룰 내용
- 해리스 코너의 한 문장 정의
- 평탄한 면·직선 경계·접점으로 보는 쉬운 예시
- 기울기 행렬과 해리스 응답의 작동 원리
- OpenCV·scikit-image 출력과 주요 설정
- 캐니·Shi-Tomasi·SIFT·광학 흐름과의 차이
- 특징점 검토의 사용처와 실전 체크리스트
- 크기 변화·반복 무늬·좌표 보정의 주의점
해리스 코너를 한 문장으로 정의하면 무엇인가요?
해리스 코너 검출은 작은 위치 이동에 따른 밝기 차이를 기울기 행렬로 요약하고, 두 주된 방향 모두에서 변화가 큰 위치를 점수로 찾는 컴퓨터 비전 알고리즘입니다.
영문명은 Harris Corner Detection이며 해리스 코너 검출 또는 해리스 모서리 검출이라고 부릅니다. OpenCV의 해리스 안내는 평탄한 영역, 에지, 코너를 주변 밝기 변화의 방향으로 설명합니다. 여기서 코너는 사진 바깥 네 귀퉁이나 물체의 실제 꼭짓점만 가리키지 않습니다.
글자의 접점이나 바둑판 무늬의 교차점도 후보가 됩니다. 정답 라벨로 신경망을 학습하지 않고 영상의 숫자를 계산합니다. AI 시스템에 결합해도 이 단계의 출력에는 상품 종류, 사람의 관절 이름이나 영속적인 추적 ID가 들어 있지 않습니다.
한 줄 정리: 해리스는 한 장의 영상에서 다시 살펴볼 만한 국소 위치를 찾습니다. 그 점이 무엇이고 다른 장면의 어느 점과 같은지는 다음 단계에서 판단합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 흰 종이에 검은 사각형을 인쇄해 촬영한다고 가정해 보겠습니다. 종이의 빈 부분, 사각형의 긴 변 한가운데, 두 변이 만나는 모서리 주변에 각각 작은 창을 놓습니다. 아래 설명은 알고리즘의 차이를 보여 주기 위한 가상 예시입니다.
빈 부분의 창은 조금 옮겨도 비슷한 흰색을 봅니다. 긴 변에서는 선을 따라 옮길 때 변화가 작고 선을 가로질러 옮길 때 변화가 큽니다. 모서리에서는 여러 방향으로 옮겨도 흰 영역과 검은 영역의 배치가 달라집니다. 해리스는 이런 차이를 가로·세로 기울기의 조합으로 살핍니다.
점수 계산만 떼어 보겠습니다. 대각 원소가 10과 10이고 나머지가 0인 행렬에
k=0.04
를 적용하면 해리스 점수는 84입니다. 대각 원소가 10과 0인 행렬은 -4, 모든 원소가 0이면 0입니다. 두 대각 원소를 모두 1로 줄이면 점수는 0.84입니다.
이 수치는 Python 표준 라이브러리의 정확한 분수 계산으로 확인했습니다. 실제 사진에 OpenCV나 scikit-image를 실행한 검출값이나 정확도가 아닙니다. 두 방향의 상대적인 균형뿐 아니라 변화의 크기도 점수에 영향을 준다는 설명용 계산입니다.
쉬운 예시: 긴 줄은 줄을 따라 미끄러지면 비슷하게 보이지만 접점은 움직일 방향을 바꿔도 주변 배치가 달라집니다. 이 차이가 특징점 후보를 고르는 단서입니다.
왜 AI에서 해리스 코너가 중요한가요?
대응을 시작할 위치를 고릅니다
사진 전체의 모든 픽셀을 같은 방식으로 비교하기보다 구별할 만한 위치를 먼저 고르는 구성에 사용합니다. 영상 정렬이나 점 기반 추적에 넘길 후보를 만들 수 있습니다. 좋은 출발점이라는 말은 이후 프레임에서 반드시 같은 점을 찾는다는 보장은 아닙니다.
검출과 후속 판단을 나누어 점검합니다
점이 거의 없다면 입력의 흐림이나 낮은 대비, 후보 선택 조건을 먼저 살펴볼 수 있습니다. 점은 충분한데 대응이 틀린다면 주변 무늬의 표현과 매칭을 따로 봅니다. 어느 단계에서 정보가 사라졌는지 기록하면 최종 시스템의 실패를 한 숫자로 뭉뚱그리지 않습니다.
해리스 코너는 어떤 순서로 작동하나요?
1. 가로·세로 밝기 변화를 계산합니다
회색조 영상에서 위치별 가로·세로 기울기를 구합니다. 픽셀 밝기 자체가 아니라 이웃 방향으로 얼마나 바뀌는지가 재료입니다. 밝은 종이 위의 평탄한 부분이 어둡지만 뚜렷한 접점보다 큰 점수를 받는다고 생각하면 안 됩니다.
2. 이웃의 기울기를 작은 행렬로 모읍니다
가로 기울기의 제곱, 세로 기울기의 제곱, 두 값의 곱을 주변 창 안에서 합칩니다. 이들을 대칭인 2×2 행렬 M에 놓습니다. 두 고유값은 서로 직교하는 주된 방향의 변화 크기를 설명합니다. 단순히 가로와 세로 밝기값 두 개를 고유값이라고 부르지는 않습니다.
3. 해리스 응답을 계산합니다
기본 점수는
R = det(M) - k × trace(M)²
입니다.
det
는 행렬식,
trace
는 대각 원소의 합입니다. 두 방향의 변화가 작으면 응답도 작고 한 방향만 강하면 에지형 음의 반응이 나타날 수 있습니다. 두 방향 모두 충분히 강한 위치는 큰 양의 후보가 됩니다.
기본 해리스 계산은 고유값을 직접 구하지 않고 행렬식과 대각합으로 응답을 만듭니다. 다만 양수라는 조건 하나로 모든 위치를 최종 코너로 확정하지 않습니다. 입력 척도와 선택한 k에 맞춰 약한 반응을 제외하고 이웃의 상대적 크기까지 살핍니다.
4. 점수 지도에서 좌표를 선택합니다
임계값을 넘는 픽셀 전부가 서로 다른 특징점은 아닙니다. 한 모서리 주변에 여러 픽셀이 반응할 수 있어 국소 최대값과 최소 간격으로 대표 위치를 추립니다. 표시를 크게 하려고 응답을 팽창시키는 시각화와 서로 가까운 후보를 줄이는 선택 과정도 구분합니다.
주요 설정과 결과는 어떻게 읽나요?
OpenCV는 응답 지도와 좌표 목록을 구분합니다
OpenCV Feature Detection API에서
cornerHarris
는 단일 채널 8비트 또는 32비트 부동소수점 입력을 받고, 입력과 같은 크기의 단일 채널 32비트 실수 응답을 반환합니다. 튜토리얼이
float32
로 변환한 예시를 보인다고 모든 허용 입력이 그 한 종류라는 뜻은 아닙니다.
blockSize
는 기울기를 모으는 이웃의 크기이고
ksize
는 Sobel 미분 연산의 크기입니다.
k
는 점수식의 계수입니다. 셋을 점의 개수나 동일한 흐림 강도로 읽지 않습니다. 영상 가장자리의 외삽도 기록하며 이 API는
BORDER_WRAP
을 지원하지 않습니다.
좌표 목록이 필요하면
goodFeaturesToTrack
의 선택 절차를 검토합니다. 기본은 Shi-Tomasi 방식이며
useHarrisDetector=True
로 해리스 점수를 선택합니다.
qualityLevel
은 최고 품질값에 대한 상대 기준,
minDistance
는 점 사이 거리,
maxCorners
는 반환 개수의 상한입니다. 품질값은 정답 확률이 아닙니다.
scikit-image는 응답과 피크 선택을 따로 호출합니다
scikit-image의 특징 API에서
corner_harris
는 응답 지도를 만듭니다. 기본
method="k"
는 해리스 식을 사용하며 기본 k는 0.05입니다.
sigma
는 행렬을 구성할 때 사용하는 가우시안 가중의 표준편차입니다. OpenCV의 정수 창 크기와 같은 인자로 바꿔 읽지 않습니다.
corner_peaks
는 응답에서 점을 고르는 별도 함수입니다. 기본 좌표 반환은 행·열 순서이며 경계 제외와 최소 거리도 결과를 바꿉니다. 기본 거리 규칙이 OpenCV의 유클리드 최소 거리와 같다고 가정하지 않습니다. 좌표를 그림에 표시하거나 다른 도구로 넘기기 전에 축 순서를 확인합니다.
서브픽셀 보정은 초기 점의 위치를 다듬습니다
OpenCV의 서브픽셀 안내는 검출한 점을
cornerSubPix
로 보정합니다. 이미 존재하는 초기 좌표 주변에서 반복하는 단계이며 점수 지도를 입력해 새 점 전체를 자동으로 찾는 함수가 아닙니다.
winSize=(5,5)
는 반쪽 크기여서 실제 탐색 창은 11×11입니다.
반복 횟수와 이동량 기준에서 보정이 멈추며 결과는 소수 좌표가 될 수 있습니다. 소수점이 많다는 이유로 실제 위치 오차가 작다고 결론 내리지 않습니다. 원본의 해상도·잡음·초기 점을 함께 확인하고 좌표를 저장할 때 정수로 잘라 보정 정보를 잃지 않도록 합니다.
해리스 코너와 헷갈리는 용어는 무엇이 다른가요?
캐니 에지 검출·Shi-Tomasi와의 차이
캐니 에지 검출은 밝기 경계의 선을 남깁니다. 해리스는 여러 방향으로 변화가 큰 점 후보를 찾습니다. 긴 직선이 잘 보이는 캐니 결과라도 그 선 위가 모두 좋은 해리스 코너는 아닙니다. 에지 지도를 만들기 위해 해리스 좌표를 이어 붙이는 방법으로 대체하지 않습니다.
Shi-Tomasi 공식 안내의 점수는 두 고유값 중 작은 값입니다. 해리스는 행렬식에서 k를 곱한 대각합의 제곱을 뺍니다. 같은 기울기 행렬을 참고해도 점수식이 다릅니다. 동일 임계값을 두 방식에 넣거나 함수 이름이 같다는 이유로 같은 검출기를 실행했다고 보고하지 않습니다.
SIFT·기술자·광학 흐름과의 차이
SIFT는 여러 스케일의 특징점과 방향에 맞춘 기술자를 함께 다룹니다. 기본 해리스는 고정된 척도의 국소 코너 점수를 계산하며 비교용 기술자를 자동으로 만들지 않습니다. 해리스 점의 좌표를 SIFT 기술자 벡터처럼 바로 비교할 수는 없습니다.
광학 흐름는 두 프레임 사이의 겉보기 이동을 추정합니다. 해리스는 한 프레임에서 위치 후보를 고릅니다. 추적을 시작할 점으로 사용할 수 있어도 이동 벡터와 지속적인 대상 ID가 한 번에 나오는 것은 아닙니다.
비교 정리: 코너 검출은 위치 후보, 기술자는 주변 표현, 매칭은 두 점의 연결, 광학 흐름은 프레임 간 이동 추정입니다. 점수 보정과 실제 대응 검증도 별도 단계로 남깁니다.
실전에서는 어디에 쓰이나요?
영상 정렬의 후보와 실패를 살핍니다
인쇄물이나 제품 무늬가 겹치는 두 사진에서 대응 후보를 준비하는 구성에 검토합니다. scikit-image의 RANSAC 매칭 예제도 해리스 점을 찾은 뒤 좌표 보정, 주변 비교, 이상 연결 제거와 변환 추정을 나눕니다. 이 글에서 그 예제를 실행해 얻은 성능으로 제시하는 것은 아닙니다.
점 기반 추적의 시작점을 검토합니다
영상의 관심 영역 안에서 구별할 만한 점을 선택해 후속 추적에 넘깁니다. 점이 배경에만 몰렸거나 같은 무늬에 반복해서 생기면 원하는 대상을 잘 따라가지 못할 수 있습니다. 충분한 점 수와 대상 전체에 퍼진 배치를 함께 확인하고 사라진 점은 실패로 처리합니다.
해리스 코너를 적용할 때 어떤 순서로 확인하나요?
1. 입력과 지켜야 할 위치를 고정합니다
회색조 변환, 해상도, 밝기 범위, 관심 구역과 촬영 조건을 기록합니다. 점이 많아야 하는 배경과 실제로 대응시킬 대상을 구분합니다. 종이의 평탄한 면·긴 직선·사각형 접점을 포함한 작은 예시부터 원본에 표시해 보고 모든 영상에 같은 개수를 강제로 채우지 않습니다.
2. 지도·선택 좌표·보정 좌표를 따로 저장합니다
응답 지도와 임계값, 국소 최대 선택, 최소 거리, 보정 전후의 위치를 남깁니다. 개수 상한과 간격을 바꿀 때는 다른 조건을 고정합니다. 점이 하나도 없는 입력이나 테두리 가까운 점도 시험하며 출력이 비었다고 임의의 중앙 좌표를 만들어 다음 단계로 보내지 않습니다.
3. 실제 대응 오류와 비용을 평가합니다
같은 표면을 다시 촬영한 자료에서 재검출 위치와 잘못된 연결을 비교합니다. 흐린 장면, 크기가 달라진 장면, 반복 무늬와 가린 장면을 따로 봅니다. 점 수가 늘어도 잘못된 대응이나 후속 계산이 늘 수 있으므로 위치 오차·업무 성공 여부·실행 시간을 같은 조건에서 남깁니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 고정 척도의 코너를 크기 불변 특징으로 부르지 않습니다. 기본 해리스에는 SIFT처럼 스케일을 찾아 기술하는 전체 절차가 없습니다. 이미지를 확대·축소하면 같은 창이 다른 실제 범위를 보므로 후보가 바뀔 수 있습니다. 회전 특성도 보간·픽셀 격자·창 모양을 포함한 실제 영상에서 확인합니다.
둘째, 점수의 수치를 확률이나 보편적인 품질로 읽지 않습니다. 밝기 척도, 미분·가중 방식과 k가 달라지면 점수도 달라집니다. 서로 다른 도구나 전처리 결과에 동일한 절대 기준을 적용하기 전에 출력 분포와 검출 위치부터 대조합니다.
셋째, 반복되는 접점을 같은 대상으로 확정하지 않습니다. 바둑판과 포장 글자는 좋은 코너를 많이 만들지만 주변 무늬가 비슷해 연결이 모호할 수 있습니다. 좌표 개수뿐 아니라 여러 점이 함께 설명하는 위치 관계를 검토하고 관찰되지 않은 대응을 추정 사실로 채우지 않습니다.
넷째, 초기 검출과 정밀 보정을 혼동하지 않습니다. 잘못된 물체의 점을 소수 좌표로 다듬어도 원하는 위치가 되지는 않습니다. 좌표 축을 뒤집거나 보정 뒤 정수로 저장한 문제도 실제 위치 오차와 구별합니다. 촬영 장면의 민감한 정보가 외부에 전달되는지도 확인합니다.
주의: 해리스의 높은 점수, 많은 특징점과 서브픽셀 좌표는 대상 인식의 정확성이나 안전한 자동 실행을 보증하지 않습니다. 후속 검증이 실패한 장면은 성공 사례에 합치지 않습니다.
자주 묻는 질문
Q1. 해리스 코너는 딥러닝 모델인가요?
아닙니다. 이 글의 기본 해리스는 영상 기울기와 작은 행렬로 응답을 계산합니다. 학습된 비전 모델과 결합할 수 있지만 코너 계산 자체에 정답 라벨로 신경망을 훈련하는 과정은 없습니다.
Q2. cornerHarris를 호출하면 점 좌표가 바로 나오나요?
입력과 같은 크기의 실수 응답 지도가 나옵니다. 점 위치는 임계값과 국소 최대 선택 등으로 추립니다. 좌표를 반환하는 보조 함수와 응답 함수를 같은 출력 계약으로 취급하지 않습니다.
Q3. k는 찾을 코너의 개수인가요?
아닙니다. 해리스 점수식에서 사용하는 계수입니다. 반환 개수의 상한이나 점 사이 간격은 별도의 선택 설정입니다. 예제의 k를 바꾼 결과를 출력 개수만으로 좋고 나쁨을 판단하지 않습니다.
Q4. 점수가 양수이면 모두 실제 물체의 모서리인가요?
그렇지 않습니다. 텍스처와 잡음도 반응을 만들 수 있고 하나의 접점 주변에 여러 픽셀이 반응할 수 있습니다. 충분한 응답·이웃 선택·관심 영역과 실제 후속 대응을 함께 확인합니다.
Q5. 서브픽셀 좌표이면 실제 위치도 항상 더 정확한가요?
소수 좌표는 더 세밀한 표현입니다. 정확성은 초기 위치와 입력 품질, 보정 조건과 기준 위치를 비교해야 판단합니다. 검출한 점이 원하는 대상인지와 보정이 제대로 멈췄는지도 별도 확인합니다.
출처
마무리
해리스 코너는 여러 방향으로 밝기가 크게 변하는 국소 위치를 점수로 찾는 방법입니다. 한 방향의 긴 선과 여러 방향의 접점을 구분하며 응답 지도에서 실제 좌표를 고르는 과정까지 나눠 읽어야 합니다.
감자나라ai님이 영상 특징점을 검토한다면 원본·응답·선택 좌표·보정 좌표를 함께 보관해 보세요. 검출한 위치가 대상에 퍼져 있는지 살핀 뒤 별도의 기술자·매칭·추적 결과를 확인합니다. 점이 많아진 결과와 실제 대응이 좋아진 결과를 구별하는 것이 출발점입니다.
