회색조 동시 발생 행렬(GLCM)이란? AI에서 밝기 쌍의 빈도로 이미지의 질감을 표현하는 방법
TL;DR
회색조 동시 발생 행렬(GLCM)은 정한 거리와 방향으로 떨어진 두 픽셀의 밝기 조합이 얼마나 자주 나타나는지 세는 표입니다. 밝기 하나의 분포만 볼 때 놓치는 이웃 관계를 기록합니다. 이 표에서 대비·동질성·에너지 같은 특징을 계산해 질감을 비교합니다. GLCM 자체가 재질 이름을 고르는 분류기는 아니며 밝기 구간·이동 방향·영역 크기가 같아야 결과를 일관되게 읽을 수 있습니다.
핵심 3줄 요약
- 핵심 1
픽셀 하나 대신 밝기 쌍을 셉니다. 행은 출발 픽셀의 밝기, 열은 정한 위치에 있는 이웃의 밝기를 나타냅니다. - 핵심 2
행렬과 요약 특징은 다릅니다. GLCM은 쌍의 집계표이고 대비·동질성 등은 그 표를 줄여 표현한 숫자입니다. - 핵심 3
설정이 바뀌면 특징의 뜻도 바뀝니다. 밝기 구간·거리·각도·대칭화·영역을 고정하고 별도 자료에서 분류 성능을 확인합니다.
이 글에서 다룰 내용
- GLCM의 한 문장 정의
- 여섯 픽셀로 이해하는 밝기 쌍 집계
- 밝기 구간·이동 위치·대칭화·정규화의 순서
- 대비·동질성·에너지와 출력 배열의 뜻
- 히스토그램·LBP·HOG·혼동 행렬과의 차이
- 질감 분석의 사용처와 실전 체크리스트
- 방향·해상도·영역 경계와 평가의 주의점
회색조 동시 발생 행렬을 한 문장으로 정의하면 무엇인가요?
회색조 동시 발생 행렬은 이미지에서 특정한 상대 위치를 가진 픽셀 쌍을 찾아 두 밝기값의 조합별 출현 횟수나 비율을 기록하는 질감 표현입니다.
영문명은 Gray-Level Co-occurrence Matrix이며 GLCM으로 줄여 씁니다. 명암도 동시 발생 행렬이라는 번역도 같은 개념을 가리킵니다. 여기서 동시 발생은 같은 시각의 영상 두 장을 비교한다는 뜻이 아닙니다. 한 이미지 안에서 정한 위치 관계로 함께 나타나는 밝기 조합을 뜻합니다.
scikit-image 공식 API는 이를 주어진 위치 차이에서 함께 나타나는 회색조 값의 히스토그램으로 정의합니다. 이 글의 구현 설명은 0.26.0 문서와 같은 버전의 소스를 기준으로 합니다. 입력은 2차원 정수 회색조 이미지이며 출력 표의 축은 원본 영상의 가로·세로 좌표가 아닙니다.
한 줄 정리: 얼마나 밝은 픽셀이 많은지에 더해, 어느 밝기 옆에 어느 밝기가 자주 놓이는지를 기록합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 두 밝기값만 있는 작은 영상을 본다고 가정해 보겠습니다. 첫 행은
[0, 0, 1]
이고 둘째 행은
[0, 1, 1]
입니다. 0은 어두움, 1은 밝음을 나타냅니다. 오른쪽 한 칸의 이웃만 세고 역방향은 추가하지 않는 직접 만든 예시입니다.
첫 행에서는
(0,0)
과
(0,1)
이 나오고 둘째 행에서는
(0,1)
과
(1,1)
이 나옵니다. 두 행의 맨 오른쪽 픽셀은 오른쪽 이웃이 영상 밖이므로 출발점으로 세지 않습니다. 유효한 쌍은 모두 4개입니다.
행과 열을 밝기 0·1 순서로 놓으면 집계표의 첫 행은
[1, 2]
이고 둘째 행은
[0, 1]
입니다. 첫 행 둘째 칸의 2는 어두운 픽셀 오른쪽에 밝은 픽셀이 두 번 놓였다는 뜻입니다. 밝은 픽셀이 총 두 개라는 뜻은 아닙니다.
각 칸을 전체 쌍 수 4로 나누면
[[1/4, 1/2], [0, 1/4]]
가 됩니다. 이 분포에서 밝기 차이의 제곱을 평균한 대비는 0.5입니다. 같은 영상도 아래쪽 한 칸의 쌍을 세면 유효한 쌍은 3개이고 대비는
1/3
이므로 방향 설정을 생략하면 결과를 제대로 비교하기 어렵습니다.
이 숫자는 Python 표준 라이브러리의 정확한 분수 연산과 작은 배열의 쌍 집계로 확인했습니다. scikit-image 함수를 실행하거나 실제 표면 사진의 분류 정확도를 측정한 결과는 아닙니다. 사진을 처리할 때는 라이브러리의 입력 변환과 이동 위치 처리까지 함께 확인합니다.
쉬운 예시: 한 밝기의 개수만 세면 배치가 사라집니다. GLCM은 정한 방향에서 이어지는 두 밝기의 조합을 남깁니다.
왜 AI에서 회색조 동시 발생 행렬이 중요한가요?
같은 밝기 분포에서도 다른 무늬를 구별합니다
한 행짜리
[0, 0, 1, 1]
과
[0, 1, 0, 1]
은 어두움과 밝음이 각각 두 개입니다. 일반 밝기 히스토그램은 같지만 오른쪽 한 칸의 정규화한 대비는 각각
1/3
과 1입니다. 같은 값의 빈도라도 이웃 배치가 다르면 질감 특징이 달라집니다.
큰 집계표를 작은 특징으로 요약합니다
밝기 구간마다 쌍을 모두 저장한 표는 크지만 대비나 동질성처럼 선택한 숫자로 줄여 후속 모델에 전달할 수 있습니다. 어떤 특징이 유용한지는 자료에 따라 다릅니다. 밝기 관계를 요약하면서 버린 위치와 색상 정보가 작업에 필요한지도 살핍니다.
특징 계산과 최종 분류를 나눠 점검합니다
공식 질감 예제는 풀과 하늘 영역에서 비유사도와 상관 특징을 구해 점으로 그립니다. 예제에는 새 이미지의 라벨을 고르는 분류기 학습 단계가 포함되지 않습니다. 점들이 나뉘어 보이는 결과와 별도 사진에서 실제로 맞힌 비율은 다른 증거입니다.
핵심 인사이트: GLCM은 질감의 공간 관계를 숫자로 만드는 방법입니다. 특징을 계산했다는 사실만으로 재질이나 결함의 판정이 끝나지는 않습니다.
회색조 동시 발생 행렬은 어떤 순서로 작동하나요?
1. 회색조와 밝기 구간을 정합니다
색상 영상을 어떻게 회색조로 바꿀지 정하고 밝기를 정수 구간에 대응시킵니다.
levels
는 집계할 밝기 단계 수입니다.
levels=16
이라면 입력값은 0부터 15까지여야 합니다. 이 인자만 바꿔서는 원본 0~255를 자동으로 16구간으로 묶지 못합니다.
2. 거리와 각도로 픽셀 쌍을 고릅니다
어느 출발 픽셀과 어느 이웃을 함께 셀지 정합니다. 이 API의
angles
는 라디안 단위이고 0은 오른쪽 방향입니다. 공식 쌍 집계 구현은 거리·각도에서 계산한 행·열 이동량을 반올림해 정수 격자의 이웃을 찾습니다. 다른 각도의 위·아래 방향은 배열 좌표 규칙까지 대조합니다.
집계는 출발점과 이웃이 모두 영상 안에 있는 쌍에 한정됩니다. 영상 밖을 0인 픽셀로 채워 세는 방식이 아닙니다. 패치가 작거나 거리가 크면 유효한 쌍이 줄어듭니다. 같은 영역 크기라도 방향별로 쌍 수가 달라질 수 있습니다.
3. 밝기 조합을 세고 대칭화 여부를 적용합니다
밝기 i에서 밝기 j로 이어지면 표의 i행 j열에 횟수를 더합니다. 기본
symmetric=False
는 순서를 유지합니다.
symmetric=True
는 집계표에 전치표를 더해 역순 조합도 함께 반영합니다. 이미지 자체를 좌우로 뒤집는 명령은 아닙니다.
앞 예시를 대칭화하면
[[2, 2], [2, 2]]
가 되고 합은 8입니다. 대각선의 같은 밝기 쌍도 두 번 반영됩니다. 합이 픽셀 수와 다르거나 두 배가 됐다는 사실만으로 오류라고 판단하지 않고 설정과 유효 쌍 수를 먼저 확인합니다.
4. 정규화한 표에서 요약 특징을 계산합니다
normed=True
는 각 거리·각도별 표를 해당 표의 전체 횟수로 나눕니다. 유효한 쌍이 있으면 합이 1인 분포가 됩니다. 특징 계산 공식 구현의
graycoprops
도 특징 계산 전에 각 표를 정규화하므로 원시 횟수를 받았다고 그대로 가중합하지 않습니다.
실전 팁: 원본 패치·밝기 구간 영상·쌍 집계표·요약 특징을 따로 저장하세요. 전처리 오류와 특징 계산의 차이를 나눠 확인하기 좋습니다.
주요 설정과 결과는 어떻게 읽나요?
거리·각도·밝기 단계는 출력의 축을 정합니다
graycomatrix
의 반환 모양은 밝기 단계 수 × 밝기 단계 수 × 거리 개수 × 각도 개수입니다. 거리와 각도를 여러 개 넣으면 각각의 조합에 표가 하나씩 생깁니다.
graycoprops
는 고른 특징에 대해 거리 개수 × 각도 개수의 값을 반환합니다. 자동으로 각도를 평균내지는 않습니다.
한 거리·각도 표는 16단계면 256칸, 256단계면 65,536칸입니다. 밝기 단계를 늘리면 두 밝기 축이 함께 커집니다. 세밀함이 늘어도 표본 쌍이 적으면 빈 칸이 많아질 수 있습니다. 단계 수를 줄이는 전처리는 계산량과 정보 손실을 함께 바꾸는 선택입니다.
대비·동질성·에너지는 서로 다른 특징입니다
대비인
contrast
는 밝기 차이의 제곱을 쌍의 분포로 평균합니다.
dissimilarity
는 절댓값 차이를 사용합니다.
homogeneity
는 밝기 차이가 작은 대각선 주변에 더 큰 가중치를 줍니다. 이 구현의 분모는
1 + (i-j)**2
입니다. 숫자를 품질의 좋고 나쁨으로 바로 바꾸지는 않습니다.
ASM
은 정규화한 각 칸의 값을 제곱해 더한 양이고
energy
는 그 제곱근입니다. 두 이름을 같은 숫자로 사용하지 않습니다.
correlation
은 이웃한 두 밝기의 상관을 나타냅니다. 동일 표면일 확률이나 분류기의 정답 신뢰도는 아닙니다.
기본값과 예제의 선택을 구분합니다
이 API에서
distances
와
angles
는 지정하는 인자입니다. 공식 예제의 수평 거리 5는 기본 설정이 아닙니다. 대칭화와 정규화의 기본값도 모두 False입니다. 따라 한 예제와 실제 호출의 옵션을 함께 남깁니다.
부동소수점 입력이나 음수는 이 구현에서 받지 않습니다. 특히 0~1 실수를 정수로 바로 잘라 밝기 정보가 사라지지 않게 구간 변환을 정합니다.
levels
는 관측 최댓값보다 커야 합니다. 반환 횟수는 기본 uint32이고 정규화하면 float64가 됩니다.
회색조 동시 발생 행렬과 헷갈리는 용어는 무엇이 다른가요?
밝기 히스토그램·국소 이진 패턴과의 차이
밝기 히스토그램은 픽셀 하나의 값별 빈도를 셉니다. GLCM은 위치 관계가 정해진 두 값의 조합을 셉니다. 국소 이진 패턴(LBP)은 중심과 주변의 대소 관계를 비트 코드로 만들고 그 분포를 모읍니다. 같은 질감 분석이라도 집계하는 대상이 다릅니다.
HOG·CNN·이미지 분할과의 차이
HOG는 밝기 기울기의 방향을 셀·블록에 모읍니다. CNN은 특징을 찾는 필터 가중치를 학습합니다. GLCM의 기본 쌍 집계는 고정된 규칙입니다. 이미지 분할처럼 각 픽셀에 대상 영역을 붙이는 결과도 아닙니다.
혼동 행렬·Haralick 특징과의 차이
혼동 행렬은 정답과 예측 범주의 조합을 셉니다. GLCM의 두 축은 밝기값이며 정답·예측이 아닙니다. Haralick 특징은 GLCM에서 유도하는 질감 통계와 연결되는 이름입니다. GLCM 표 자체와 특정 구현이 지원하는 특징 목록을 같은 것으로 부르지 않습니다.
비교 정리: 히스토그램은 한 밝기, GLCM은 이웃 밝기 쌍, LBP는 국소 비교 코드, HOG는 기울기 방향을 모읍니다. 같은 길이의 벡터가 나와도 각 칸의 의미는 다릅니다.
실전에서는 어디에 쓰이나요?
질감 영역의 수치 분포를 탐색합니다
공식 예제처럼 같은 영상에서 풀과 하늘의 패치를 골라 특징 분포를 볼 수 있습니다. 원단이나 제품 표면에 응용한다면 촬영 배율과 조명·관심 영역을 먼저 고정합니다. 해당 예제의 분리는 탐색 결과이며 새로운 생산 환경의 결함 검출 성능을 보장하지 않습니다.
후속 분류기의 비교 입력으로 검토합니다
여러 거리·각도에서 얻은 요약값을 정한 순서로 연결해 분류기의 입력 후보로 사용합니다. 원본 밝기 특징이나 LBP를 쓰는 기준 결과와 같은 자료 분할에서 비교합니다. 방향별 특징을 유지할지 평균낼지도 선택 사항입니다. 평균내면 일부 방향 차이도 함께 버립니다.
회색조 동시 발생 행렬을 적용할 때 어떤 순서로 확인하나요?
1. 영역과 밝기 변환 규칙을 고정합니다
사진 전체인지 같은 크기의 패치인지 정합니다. 색상 변환·밝기 범위·구간 경계·levels를 기록합니다. 입력마다 서로 다른 최솟값·최댓값으로 구간을 만들면 같은 번호의 밝기 의미가 달라질 수 있습니다. 자료에서 경계를 학습한다면 훈련 분할 안에서만 정합니다.
2. 작은 배열로 집계 방향과 총횟수를 확인합니다
어두움·밝음의 위치를 직접 아는 배열로 검사합니다. 오른쪽 한 칸의 쌍, 반대 순서, 같은 밝기 쌍, 바깥으로 나가는 쌍을 포함합니다. 각 거리·각도의 원시 합과 대칭화 후 합을 대조하고 정규화한 분포의 합도 봅니다. 코드가 실행된 것과 좌표 해석이 맞는 것은 별개입니다.
3. 특징 순서와 독립 평가를 함께 보관합니다
거리·각도·특징 이름의 연결 순서를 고정합니다. 같은 원본 사진에서 나온 비슷한 패치를 훈련과 테스트 양쪽에 섞지 말고 제품·장면·촬영 세션처럼 실제 독립 단위로 나눕니다. 설정은 검증 자료에서 선택하고 최종 자료의 오류와 총처리 시간·메모리를 별도로 남깁니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 대칭화를 회전 불변으로 읽지 않습니다. 역순 밝기 쌍을 함께 세도 수평 무늬와 수직 무늬의 차이가 자동으로 사라지지는 않습니다. 여러 방향을 집계하고 평균내는 설계를 추가해도 실제 회전·보간·잘림이 만든 변화는 따로 시험합니다.
둘째, 거리를 실제 표면 길이로 바로 해석하지 않습니다. 픽셀 간격이 같아도 촬영 거리와 해상도가 바뀌면 보는 무늬 크기가 달라집니다. 영상 크기를 맞추는 과정도 질감을 바꿀 수 있으므로 배율과 전처리를 함께 기록합니다.
셋째, 배경을 밝기 0으로 지운 효과를 확인합니다. 0도 유효한 밝기 단계라서 배경과 대상의 쌍이 집계됩니다. 이 함수에는 별도 마스크 인자가 없습니다. 대상 내부 쌍만 필요하다면 잘라낸 영역이나 별도 집계 절차의 경계 조건을 명시합니다.
넷째, 유효 쌍이 없는 출력을 정상 분포로 보지 않습니다. 큰 이동량에서는 쌍이 하나도 없을 수 있습니다. 확인한 구현은 이런 0표를 정규화해도 0으로 남깁니다. 상관 계산의 거의 0인 표준편차는 1로 처리하므로 그 값만 보고 질감이 완벽히 일치했다고 판정하지 않습니다.
주의: GLCM은 선택한 영역과 이동 위치에서 관찰한 밝기 관계입니다. 밝기 구간이 달라진 대비값, 서로 다른 방향의 특징, 별도 환경의 분류 정확도를 같은 척도로 섞지 않습니다.
자주 묻는 질문
Q1. GLCM은 딥러닝 모델인가요?
기본 GLCM은 정한 상대 위치에서 밝기 쌍을 세는 전통적 영상 표현입니다. 특징을 후속 분류기에 넣을 수 있지만 행렬 계산 자체가 신경망 가중치를 학습하는 과정은 아닙니다.
Q2. 동시 발생은 동영상의 같은 시각을 뜻하나요?
여기서는 한 이미지 안에서 정한 거리·방향 관계로 나타나는 두 밝기의 조합입니다. 시간 축의 두 프레임을 비교하는 뜻으로 설명하지 않습니다.
Q3. levels만 줄이면 입력 밝기도 자동으로 묶이나요?
아닙니다. 집계에 들어갈 정수 구간 영상을 먼저 만듭니다. 모든 값이 0 이상이고 levels보다 작은지 검사합니다. 큰 값이 남았는데 표 크기만 줄이면 입력 검증에서 오류가 납니다.
Q4. normed=True이면 재질의 확률이 나오나요?
유효한 쌍이 있는 표에서 밝기 조합의 경험적 비율이 나옵니다. 재질 클래스의 확률이 아니며 모든 칸이 0인 경우에는 합도 1이 되지 않습니다. 유효 쌍 수를 함께 확인합니다.
Q5. energy와 ASM은 같은 특징인가요?
확인한 graycoprops에서는 energy가 ASM의 제곱근입니다. 같은 설정의 같은 표라도 숫자는 일반적으로 다릅니다. 이름·정의·구현 버전을 고정하고 다른 자료의 특징 열을 합칩니다.
Q6. 대비가 크면 표면이 더 좋은 건가요?
대비는 선택한 밝기 단계에서 이웃 차이가 얼마나 큰지 요약합니다. 품질의 좋고 나쁨은 업무의 정답 정의가 필요합니다. 그림자·배경·구간 변경으로도 수치가 달라지므로 원본과 독립 평가를 함께 봅니다.
출처
마무리
회색조 동시 발생 행렬은 정해진 위치 관계에 있는 두 픽셀의 밝기 조합을 세는 표입니다. 한 밝기의 히스토그램과 이웃 쌍의 집계, 원시 횟수와 정규화한 비율, 행렬과 요약 특징을 구분하면 질감 분석의 입력과 출력을 더 정확히 읽을 수 있습니다.
감자나라ai님이 처음 검토한다면 작은 배열에서 유효한 쌍과 총횟수부터 확인해 보세요. 같은 밝기 구간과 거리·각도로 특징을 만들고 원본 패치와 함께 저장합니다. 마지막에는 촬영 조건이 다른 자료의 오류와 후속 분류 성능을 따로 확인하는 것이 출발점입니다.
