2.1 Depth Vision 하드웨어
본 연구에서는 현장 활용도를 고려한 경량형 및 저가형 Depth Vision 카메라를 선정하여 하드웨어를 구축하였다. 현장 적용성을 확보하기 위해
Depth Vision 카메라는 Fig. 1에서 표현한 것과 같이 휴대용 짐벌에 장착되어 계측 과정 중 발생 가능한 진동, 바람 등과 같은 외부 요인을 최소화하도록 하였다. 적외선(IR) 스테레오
비전 방식과 수동형(Passive) 스테레오 비전 방식 두 종류의 카메라를 선정하였으며 각각의 성능에 따라 다르게 적용하였다. 먼저 적외선 스테레오
비전 카메라는 좌⋅우측 이미지 센서와 적외선 프로젝터, RGB 카메라로 구성되어 있다. 적외선 프로젝터로부터 투사된 적외선 패턴을 통해 좌우 이미지
간의 대응 위치를 추출하고 카메라별 시차(disparity)를 계산하여 거리 정보를 산출한다. 즉 좌우 이미지에서 동일 물체에 대한 두 점 사이의
픽셀 이동량을 찾아 각 점의 깊이를 계산하는 원리이다(Cho, 2020). 반면, 수동형 스테레오 비전은 별도의 적외선 투사 없이 고해상도의 좌⋅우측 카메라만으로 깊이를 계산하므로, 조명 조건이나 물체의 질감에 따라 정확도가
크게 영향을 받는다(Burger et al., 2023). 따라서 이 방식은 주로 근거리 측정에 적합하며, 본 연구에서는 대상과의 이격 거리 30 cm 내에서만 사용하였다. 또한 볼트 형상 계측 시 거리
조건에 따른 성능 차이를 비교하기 위해 이격 거리 30 cm를 기준으로 근거리용과 원거리용 카메라를 구분하여 실험을 수행하였다. 근거리 계측에 사용된
카메라의 세부 사양은 Table 1, 원거리 계측용 카메라의 사양은 Table 2에 제시하였다.
Table 1. Technical specifications of the Intel Realsense D405 camera
|
Shutter type
|
Global shutter
|
Depth technology
|
Stereoscopic
|
|
RGB FOV (H x V)
|
87° x 58°
|
Depth resolution
|
1280 x 800 pixels
|
|
Depth FOV (H x V)
|
87° x 58°
|
Depth accuracy
|
< 2% at 50 cm
|
|
Use Environment
|
Indoor / Outdoor
|
Ideal Range
|
7 cm∼50 cm
|
|
Weight
|
60 g
|
Volume
|
42 mm x 42 mm x 23 mm
|
Table 2. Technical specifications of the Intel Realsense D435i camera
|
Shutter type
|
Global shutter
|
Depth technology
|
Stereoscopic
|
|
RGB FOV (H x V)
|
69° x 42°
|
Depth resolution
|
1280 x 720 pixels
|
|
Depth FOV (H x V)
|
87° x 58°
|
Depth accuracy
|
< 2% at 2 m
|
|
Use Environment
|
Indoor / Outdoor
|
Ideal Range
|
0.3 m∼3 cm
|
|
Weight
|
72 g
|
Volume
|
90 mm x 25 mm x 25 mm
|
Depth Vision 카메라를 이용하여 강구조물 볼트 접합부의 배면을 Fig. 2와 같이 계측한다. 계측된 깊이 데이터는 강판, 볼트 나사부 및 너트 간의 거리 정보를 포함하며, 이는 Fig. 3과 같이 점군 데이터(Point cloud data)로 저장된다. 이때 볼트의 체결력이 저하되어 느슨해질 경우, 강판을 기준으로 한 나사부의 돌출
높이가 감소하는 경향을 보이게 되고, 볼트 풀림 상태를 정량적으로 감지하기 위해서는 계측된 깊이 데이터로부터 나사부의 돌출 높이를 자동으로 산출할
수 있는 알고리즘이 필요하다. 본 연구에서는 시공 직후 동일 체결력 조건에서 볼트의 초기 돌출 높이가 균일하다는 사실을 전제로, 무기저 방식의 볼트
풀림 감지 알고리즘을 설계하였다.
Fig. 2. Variation in bolt thread protrusion depth resulting from the degradation of bolt clamping force
Fig. 3. Raw point cloud data generated from depth data
2.2 패턴인식 기반 볼트 풀림 자동 감지 방법
2.2.1 Step 1. Point cloud 자동 생성 및 ROI 추적
Depth Vision 하드웨어를 이용하여 볼트 접합부의 배면부를 계측한 후, 각 포인트의 공간 좌표 (x, y, z) 데이터를 수집하였다. 데이터
수집 과정에서 계측 대상의 도장 상태나 표면 반사, 주변 조도 등 외부 요인에 의해 무작위로 발생하는 신호잡음을 최소화하기 위해 고정된 동일한 위치에서
10회 연속 촬영을 수행한 뒤 평균 처리 과정을 거쳤다. 먼저 수집된 10개의 데이터 중 가장 작은 크기를 기준으로 수집 데이터를 정규화하였으며,
동일한 평면 (x, y) 좌표에 대해서는 대응되는 높이 (z)값들의 평균을 계산하여 갱신하였다. 이를 통해 비정상적인 영역에 위치한 무작위 신호잡음를
억제하고 안정화된 점군 데이터를 구축하였다.
이렇게 생성된 점군 데이터는 사용 카메라의 시야각(Field of view, FOV) 특성상 볼트 체결부 외의 영역이 포함된다. 본 연구의 제안 방법은
깊이 데이터의 패턴인식 알고리즘을 기반으로 수행되므로 불필요한 배경 데이터는 분석 속도를 늦출 뿐만 아니라 분석 정확도 또한 저하시킬 우려가 있다.
따라서 주요 관심 영역(Region of interest, ROI)인 볼트 체결부를 유지하면서 배경은 제거하기 위해 RANSAC 알고리즘을 적용하였다.
RANSAC(RANdom SAmple Consensus)은 신호잡음에 강한 알고리즘으로, 임의의 점을 기반으로 반복 수행하여 최적 모델을 탐색할 수
있다(Fischler and Bolles, 1981). 필요 영역 인식을 위해 임의의 3점을 통해 평면 방정식을 탐색하였으며 이때, 식 (1)과 같이 추정 평면 모델과 데이터 포인트 간 거리가 정의한 임계값을 기준으로 분류하였다. 이때, $d(M,\: x_{i})$는 모델 $M$과 포인트
$x_{i}$ 사이의 거리를 측정하는 함수로 설정한 임계값 $t$보다 작으면 내부점(inlier)으로 간주한다. RANSAC 알고리즘을 반복 수행하여
비교적 많은 내부점을 갖는 평면 모델을 후보군으로 도출한 후, 그중 카메라 기준 좌표계에서 평면까지의 거리가 최소인 모델을 최적 평면 모델로 선정하였으며
이를 강판 기준 평면으로 정의하였다. 반복 수행 횟수는 식 (2)에 따라서 산정하였다. 여기서 N은 권장 반복 수행 횟수, $\rho$는 올바른 모델을 찾을 확률이며, $\epsilon$은 데이터에서 외부점(outlier)의
비율, $m$은 모델을 결정하는 데 필요한 최수 샘플 수이다(Derpanis, 2010). 이때 $\epsilon$은 알 수 없을 경우 0.5를 주로 사용하는데, 본 연구에서는 보다 보수적인 0.7로 설정하여서 ROI(볼트 체결부 모델)을
탐색할 수 있도록 하였다.
Fig. 4. Overview of A Fully Automated Algorithm for Quantification and Visualization Bolt Loosening
2.2.2 Step 2. 왜곡 보정
Step 1은 데이터 수집 과정에서 무분별하게 포함되는 신호잡음을 억제하기 위한 과정이었으나, Step 2는 소형 Depth Vision 카메라에
활용되는 렌즈의 굴절 특성과 색수차 등으로 인해 발생되는 영상 왜곡을 보정하는 과정을 수행한다. 카메라와 대상 간의 평행 유무와 상관없이 대상이 평판임에도
불구하고 Fig. 5와 같이 강판의 중앙부에 비해 양끝단이 들뜨는 형태의 왜곡이 발생한다. 해당 왜곡은 중앙 영역과 대략 3 mm의 높이 오차를 보였으며, 이는 이후
볼트 풀림 정량화 과정에서 직접적인 영향을 미칠 수 있다. 따라서 중앙값 및 평균값 필터를 기반으로 한 곡선 접합 과정을 통하여 ROI 데이터에 포함된
신호잡음을 최소화한 후 평면 왜곡 보정을 수행하였다.
먼저 ROI 데이터에서 볼트 체결부를 제외한 강판 영역을 정밀하게 분리하기 위한 전처리 단계로. 강판 양끝단에서 발생하는 기하학적 왜곡을 얻기 위해
강판 영역만을 우선 추출하였다. 이를 위해 xy 평면 상에서 돌출된 상위 z값을 볼트 나사부의 윗면으로 간주하여 군집화를 수행하고 각 군집의 중심
좌표를 계산한 뒤 반경을 설정하였다. 해당 반경 내 포인트를 볼트 영역으로 분류하여 제거하였으며, 설정 반경은 검증 실험에서 사용한 볼트와 너트의
규격을 기준으로 보수적으로 설정하였다. 볼트 영역이 제거되어 생긴 빈 영역은 중앙값 필터 개념을 확장하여 보간하였다. 주로 2D 이미지 필터링에 사용되는
중앙값 필터 기법을 3D 점군 데이터에 맞게 구현하기 위해 각 점에 대해 kNN(k-Nearest Neighbors) 알고리즘을 수행하고 이웃 점들의
중앙값으로 해당 점의 높이 (z)값을 대체하였다(Jia et al., 2019; Dong et al., 2023). 이후, 인위적으로 생성된 점들로 인해 발생할 수 있는 잔여 신호잡음을 제거하고자 평균값 필터 개념을 추가 적용하였다. 각 점에 대해 설정 반경
내의 포인트를 평균 처리하여 높이 (z)값을 보정하였으며, 이때 평면 좌표 (x, y)는 고정하여 점군 데이터 구조를 유지하고자 하였다. 또한 식 (3)과 같이 평균값 필터 적용 시 계산된 평균에 따라 높이 (z)값이 과도하게 이동되는 것을 방지하고자 가중치(α)를 0.7로 설정하여 수행하였다. 이때
$P$는 평균 처리된 좌표이며 $P_{0}$은 기존 좌표, $r_{mean}$은 평균 처리된 값이다.
이후 강판 영역만으로 구성된 점군 데이터를 대상으로 장축 (x축)과 단축 (y축) 방향별로 1-3차 다항식을 비선형 최소자승법을 기반으로 한 Curve
Fitting을 통해 축 방향 왜곡 형태를 가장 잘 나타내는 다항식 모델을 획득하였다. 각 축에서 얻은 다항식을 조합하여 평면 왜곡을 보정하고자 하였으며,
보정 전후 평면에 대한 RMS 오차를 비교하여 오차가 최소가 되는 모델의 차수 조합을 자동으로 선택되도록 구성하였다. 따라서 식 (4)의 $f_{x}(x)$와 $f_{y}(y)$는 최소 RMS 기준으로 산출된 각 축에 대한 평면 보정 함수로 정의된다. 이때, 평면 좌표 (x, y)는
그대로 유지하고 높이 (z)값만 보정된다. 식 (4) 또한 과도한 보정을 방지하기 위해 반복 실험을 통해 도출한 가중치를 적용하여 안정적인 평면 왜곡 보정 과정을 구현하였다. 여기서, $Z_{cor}$는
보정된 z값이고, $Z_{0}$은 기존 좌표의 z값, $\alpha$는 가중치이다.
Fig. 5. Distortion caused by camera performance limits
2.2.3 Step 3. 신호잡음 제거
카메라의 고질적인 왜곡 현상을 보정한 후, Step 3에서는 점군 데이터 전반에 발생하는 미세 신호잡음을 억제하였다. 카메라와 대상 간의 거리가 멀어질수록
평면 계측임에도 불구하고 생성된 점군 데이터의 표면이 거칠고 불규칙한 형태를 보였다. 본 연구는 강판 평면으로부터 돌출된 볼트의 높이 차이를 계산하여
각 볼트 간의 풀림 정도를 비교하여 볼트 풀림을 감지하는 방법을 제안하므로 정확한 높이 계산을 위해 평탄하고 균질한 기준 평면 확보가 필수적이다.
따라서 데이터 구조의 왜곡을 최소화하면서 표면을 평탄화하기 위해 주성분 분석(Principal Component Analysis, PCA)을 적용하였다.
주성분 분석은 공분산 행렬 계산을 통해 고유값(eigenvalue)과 고유벡터(eigenvector)를 산출하여 사용 데이터의 분산과 방향을 정의하는
기법이다(Hotelling, 1933). 본 연구에서는 3차원 점군 데이터를 대상으로 세 개의 주성분을 추출하였으며, 그중 가장 작은 고유값에 대응하는 고유벡터를 제3주성분으로 하여 법선
벡터로 취급하였다(Hoppe et al., 1992). 각 점을 제3주성분이 정의하는 국소 평면에 투영함으로써 과도하게 위아래로 튀어나온 신호잡음을 보정하고 전체 표면의 거칠기를 완화시켰다.
이후, 데이터 처리 효율 향상과 용량 축소를 위해 Voxel Grid Downsampling 과정을 수행하였다. 점군 데이터의 공간을 1 mm 크기의
정육면체(Voxel) 단위로 구분하고, 각 voxel 내에서 정중앙에 위치한 하나의 대표점만을 남겨 데이터 크기를 축소하였다(Martin et al., 1997). 해당 과정은 패턴인식 기반의 점군 데이터 처리 알고리즘으로 컴퓨터 성능 및 하드웨어 환경을 고려하여 점군 크기를 최적화하고자 수행하였다. 본 과정을
통해 원본 데이터 대비 대략 55% 수준으로 포인트 수를 축소하여 처리 효율을 향상시켰으며, 카메라와 대상 간의 거리가 증가할수록 점군 데이터를 구성하는
포인트 밀도가 감소하여 용량 축소 효과는 미비하게 나타났다.
2.2.4 Step 4. 강판 중앙 원점 이동
본 단계에서는 이후 볼트 영역의 인식 및 처리를 용이하게 하기 위해 강판의 중심을 기준으로 좌표계의 원점 (0, 0, 0)을 이동하였다. 점군 데이터
중 강판 영역의 모든 점이 분포상 동일한 z=0 값을 갖지는 않으나, 대부분의 점이 0에 근접하도록 변환하여 평면 기준을 정렬하였다.
이를 위해 앞선 Step 1에서 사용한 RANSAC 알고리즘을 동일하게 적용하여 강판에 해당하는 평면 모델을 탐색하고 내부점을 추출하였다. 이후 추출된
내부점을 기반으로 Step 3의 주성분 분석을 수행하여 평면의 법선 벡터를 추정하였다. 이후 3차원 공간에서 벡터를 회전하여 z축과 정렬하기 위해
로드리게스 회전 공식을 사용하여 추정된 법선 벡터를 좌표계의 z축 방향과 정렬시켜 평행하도록 하였으며, 강판의 중앙으로 원점을 이동시켜 전체 점군
데이터의 좌표계를 재정의하였다. 이 과정을 통해 강판 평면이 대략 xy 평면과 평행하게 되었으며, 이후 수행되는 볼트 영역 인식 및 높이 정량화 과정의
처리 효율과 정확도 향상을 개선시켰다.
2.2.5 Step 5. 볼트 영역 인식 및 높이 정량화
볼트 영역 인식 및 높이 정량화 단계는 총 2번의 군집화 과정으로 구성된다. 먼저 강판 영역의 z값이 0으로 정렬된 상태에서 k-d tree 데이터
구조를 활용하여 반경 기반 이웃 탐색을 수행하여 1차 군집을 형성하였다. k-d tree(k-dimensional tree)는 Jon Bentley가
고안한 개념인 BST(Binary Search Trees)를 다차원 공간으로 확장한 형태이다(Bentley, 1975). 공간을 분할하여 근접점 탐색 또는 반경 기반 이웃점 탐색에 효율적이며, 본 연구에서는 3차원 점군 데이터를 효율적으로 탐색하기 위해 k=3인 k-d
tree를 구성하여 적용하였다. 설정된 반경 내의 점들을 기반으로 1차 군집을 형성하였으며, 이때 설정 반경 값은 성능 검증에서 사용한 볼트 규격
중 나사산의 반경을 참고하여 보수적으로 설정하였다. 또한, 각 볼트 영역이 중복 생성되지 않도록 군집 간 최소 이격 거리를 설정하여 볼트 하나에 단일
군집이 대응되도록 하였다.
1차 군집을 통해 추출된 볼트 후보 영역에 대해서 DBSCAN 알고리즘을 적용하여 2차 군집을 형성하였다. DBSCAN (Density-Based
Spatial Clustering of Applications with Noise)는 밀도에 기반한 군집화 기법으로 반경(ε) 내 최소 포인트 수
이상이 존재할 때 군집으로 분류된다(Ester et al., 1996). 본 연구에서는 볼트 높이 정량화의 신뢰성을 확보하기 위해 고밀도의 영역을 볼트의 핵심 영역으로 간주하고, 저밀도 영역은 신호잡음으로 처리하여 볼트
영역에서 배제하였다. 이때, 반경은 1차 군집에서 사용한 반경을 참고하였으며, 그보다 작은 반경으로 설정하였다.
두 단계의 군집화를 통해 형성된 각 볼트 영역에 대한 풀림 정도를 정량화하기 위해 평균값, 최빈값, 중앙값, 상위값으로 총 4가지의 후보 통계값을
설정하였다. 계측 시 이격 거리가 멀어질수록 점군 데이터 중 돌출부가 가우시안(Gaussian) 형태로 분포하고, 나사부 끝단의 경계가 불분명해지는
경향을 확인하였다. 이에 따라 카메라와 대상 간의 이격 거리 조건을 반영하여 식 (5)와 같이 군집 내 상위 N% 기준으로 한 구간의 z값 범위를 설정하였다. 식 (5)에서 $Z_{N}$은 설정한 상위 N%에 해당하는 z값이고, $Z_{f}$는 통계값 분석에 사용될 필터링된 z값들을 의미한다. 이때 이격 거리를 기준으로
100-300 mm일 때 n=90, 400-500 mm는 n=99로 설정하였다. 이는 이격 거리에 따라 나타나는 가우시안 형태를 반영하여 반복 실험을
통해 얻은 경험적 수치이다. 해당 범위 내 포인트를 기반으로 z값에 대한 평균값, 최빈값, 중앙값, 상위값을 각각 계산하였다. 이후 식 (6)을 통해 각 볼트의 대푯값을 결정하였다. 군집 내 점들의 최빈값과 평균값 간의 차이가 0.1 mm 이하일 경우 최빈값을 대푯값으로, 초과 시에는 중앙값과
평균값의 차를 비교하여 결정하였다. 식 (6)의 조건을 모두 충족하지 않을 경우, 식 (6)의 아래와 같이 상위 10% 구간의 평균값을 대푯값으로 최종 산정하였다. 이와 같은 절차를 통해 각 볼트의 높이를 정량적으로 산출하여 풀림 정도를
계측하였다. 여기서 $Z$는 대푯값이고 $Z_{\bmod e}$는 최빈값, $Z_{mean}$은 평균값, $Z_{median}$은 중앙값, $Z_{\begin{aligned}\top
\\
\end{aligned}}$는 상위 10%의 평균값이으로 모두 식 (5)의 $Z_{f}$를 계산하여 얻은 값들이다.
2.2.6 Step 6. 볼트 풀림 높이 시각화 및 감지
앞선 단계에서 산출된 대푯값을 기반으로 각 볼트의 풀림 정도를 시각화하였다. 계측 과정에서 얻어진 볼트 군집별 대푯값 중 최댓값과 최솟값을 기준으로
색상 범위를 설정하여 해당 구간 내 상대적 높이 분포를 색상으로 나타내었다. 이를 통해 계측된 볼트 영역의 돌출 정도를 색상 차이로 표현함으로써 점검자가
전체 볼트의 풀림 분포를 직관적으로 인식할 수 있도록 하였다.