본문으로 건너뛰기

M13.01 · 점군 좌표·필터·다운샘플링·군집화

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • 점군의 프레임·단위·유효값과 관심영역 필터의 계약을 읽고 서로 다른 제외 이유를 구분한다.
  • voxel 키·대표점과 반경 이웃 필터의 단계별 결과를 계산하고 정보 손실을 설명한다.
  • 거리 연결 군집을 계산하고 임계값에 따른 합침/분할과 실제 물체·장애물 판정의 한계를 설명한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M02.01의 좌표/거리, M02.05의 수치 계산, M12.02의 카메라 기하를 사용한다. 일반 코딩은 할 수 있다고 전제하며 언어 문법·ML 학습·PCL 설치는 요구하지 않는다. 제공된 작은 합성 점군으로 계산하고 실제 LiDAR·PCL·ROS·장비 실행 결과와 구분한다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

점의 목록 앞에 프레임과 단위가 있다

점군(point cloud)은 같은 해석 계약으로 읽는 여러 공간 점의 집합이다. XYZ만 있을 수도 있고 반사 강도·색·법선 같은 속성이 더 있을 수도 있다. 점 수가 많다고 실제 표면이 완전하게 관측된 것은 아니다. 가림·측정 실패·센서 시야 밖에는 점이 없을 수 있다. 점이 없다는 사실과 빈 공간을 확인했다는 주장은 구분한다.

좌표는 프레임에 대한 값이다. 이 단위의 sensor 프레임은 x 앞·y 왼쪽·z 위, 길이는 m라고 명시한다. REP103 원문의 일반 body 축과 camera optical의 x 오른쪽·y 아래·z 앞은 다르다. M12.02의 optical Z>0 조건을 모든 점군에 그대로 옮기지 않는다. 예를 들어 sensor 좌표의 z=-0.05m는 센서보다 아래라는 뜻일 수 있으며 그 자체로 무효가 아니다.

다른 프레임의 점을 합치려면 같은 시각 기준의 적절한 변환을 적용해야 한다. 좌표의 frame 이름만 바꿔 붙이는 것은 변환이 아니다. mm 자료를 m라고 해석하면 거리·관심영역·voxel 크기를 모두 잘못 적용한다. 또한 실제 회전형 LiDAR의 여러 점이 한 메시지에 담겼다고 모두 같은 순간의 관측인 것은 아니다. 여기서는 모든 점이 같은 합성 시각·프레임에 있다고 가정하고 스캔 중 움직임 보정은 다루지 않는다.

Jazzy PointCloud2 공식 정의는 header의 시각/프레임, fields와 binary data의 배치를 구분한다. organized 점군은 영상처럼 2차원 구조일 수 있고, unorganized 점군의 행 순서가 공간 이웃을 뜻하지는 않는다. 실제 자료에서는 field offset/자료형, point_step/row_step·endian·배열 구조를 확인한다. “XYZ니까 항상 점마다12byte”라고 추측하지 않는다. XYZ 길이 단위의 전용 필드가 자동으로 붙는 것은 아니므로 발행자/센서 인터페이스의 단위 계약도 확인한다. is_dense도 정의된 유효점 표시이지 좌표계·보정·물체 의미가 정확하다는 증명은 아니다.

유효값 검사와 관심영역은 다른 질문이다

먼저 XYZ가 유한한 수인지 확인한다. NaN은 특정한 위치0이 아니라 유효한 수치 좌표가 없음을 나타낼 수 있는 값이다. 이를 원점으로 치환하면 측정 실패를 센서 바로 앞의 점처럼 만들 수 있다. 무효값의 개수와 처리 이유를 남긴다. 영상/픽셀과의 대응을 유지해야 하는 organized 자료를 압축하면 원래 인덱스와의 매핑도 관리한다.

관심영역(ROI, region of interest) 필터는 유효한 좌표 중 이번 과제에서 분석할 범위를 고르는 조건이다. 아래에서는 x만 0≤x<1m로 고르고 y/z는 추가로 자르지 않는다. x=1.00m는 밖이고 x=0은 안이다. 이 선택 밖의 점은 좌표가 틀린 것이 아니라 이번 ROI에서 제외된 것이다. 다른 과제의 범위나 실제 센서 탐지 한계를 이 숫자로 일반화하지 않는다.

이웃이 적은 점을 골라 제외하는 필터는 또 다른 기준이다. 유한값·ROI·공간 밀도의 제외 이유를 모두 “노이즈 삭제”로 뭉치면 원인을 설명하기 어렵다. 특히 가늘거나 먼 물체는 정상 관측이어도 이웃이 적을 수 있다. 필터가 점을 없앴다는 사실로 그 위치에 장애물이 없었다고 결론 내리지 않는다.

작은 합성 점군을 단계별로 남긴다

다음12개는 실제 센서 기록이 아닌 교육용 점이다. 모든 y=z=0.02m이고 x만 다르다. p10의 x는 NaN이다. 이 단순 배치는 3차원 거리 계산이 x 차이의 절댓값과 같아지게 만들며, 일반 점군이 한 줄이라는 뜻은 아니다.

점군 처리 단계가 만드는 다른 집합: 원본 점/계약 → 유효값/관심영역 필터 → Voxel 대표점 → 이웃/군집.그림 원본 크기로 보기

그림 M13.01-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.

IDx (m)유한값/ROI 판정
p10.02유지
p20.04유지
p30.12유지
p40.22유지
p50.62유지
p60.64유지
p70.72유지
p80.95유지
p91.50유효 좌표지만 ROI 밖
p10NaN유효한 수치 좌표 없음
p11-0.01유효 좌표지만 이번 ROI 밖
p121.00유효 좌표지만 ROI 상한 밖

유한값 검사 뒤11점, ROI 뒤8점이다. 원래12점은 ROI 유지8·ROI 제외3·무효1로 설명된다. 파일명만 남기지 말고 frame/시각·단위·입력 식별자와 단계별 남긴/제외한 ID·조건을 기록한다. 같은 입력에서 조건을 하나씩 바꿔야 왜 달라졌는지 비교하기 쉽다.

Voxel은 공간을 묶으며 대표점은 관측 요약이다

voxel은 공간을 나누는 작은 3차원 셀이다. 이 예제는 원점 o=(0,0,0)m, 각 축 크기 h=0.1m를 고정하고 key를 아래처럼 정의한다. floor는 그 수보다 크지 않은 가장 큰 정수다. 각 셀은 하한을 포함하고 상한을 제외한다. 식의 j는 x,y,z 각 축을 뜻한다.

kj=⌊pj−ojh⌋.k_j=\left\lfloor\frac{p_j-o_j}{h}\right\rfloor.

x=0.10은 key1, x=0.099는 key0이다. ROI를 적용하기 전 별도 예로 x=-0.01이면 floor(-0.1)=-1이며 정수 변환으로0에 잘라 붙이면 다른 셀이 된다. 격자 원점/경계 규약과 부동소수 표현은 실제 구현에서 확인해야 한다. 이 key 식을 모든 라이브러리의 내부 인덱스 번호와 동일하다고 가정하지 않는다.

PCL VoxelGrid 설명은 셀 안의 점들을 centroid로 요약한다. centroid는 점 좌표의 산술평균이며 셀의 기하학적 중심과 다르다. p1/p2의 대표 x는(0.02+0.04)/2=0.03m다. 이 셀의 중심 x=0.05m를 쓴 것이 아니다. 색·강도·법선 같은 다른 속성은 어떤 방식으로 집계할지 별도로 정한다.

대표점x key원래 ID대표 x (m)
A0p1,p20.03
B1p30.12
C2p40.22
D6p5,p60.63
E7p70.72
F9p80.95

여기서는 모든 y/z key가0, 대표 y/z도0.02m다. ROI8점이6개 대표점으로 줄었다. 대표점은 두 관측의 요약일 수 있으며 새로 측정한 표면점이라고 단정하지 않는다. 한 셀에 서로 다른 표면이 들어오면 그 사이에 원래 없던 평균점이 생길 수도 있다. 다운샘플링은 계산량을 줄이지만 얇은 물체·경계·표본 수 정보를 잃을 수 있다.

Voxel 안의 입력 점과 대표점. 3D voxel의 아이디어를 보여 주는 별도 xy 단면도다. 파란 점들을 같은 셀끼리 묶어 주황 평균점으로 요약했다. 대표점은 센서가 그 위치를 직접 측정했다는 뜻이 아니며 본문 계산 표의 원본 점 집합과는 별개다.그림 원본 크기로 보기

그림 M13.01-2. 3D voxel의 아이디어를 보여 주는 별도 xy 단면도다. 파란 점들을 같은 셀끼리 묶어 주황 평균점으로 요약했다. 대표점은 센서가 그 위치를 직접 측정했다는 뜻이 아니며 본문 계산 표의 원본 점 집합과는 별개다. 직접 제작.

반경 이웃은 어떤 단계의 점을 세는지 명시한다

두 점 p/q의 유클리드 거리는 sqrt((p_x-q_x)²+(p_y-q_y)²+(p_z-q_z)²)다. PCL 반경 이웃 필터 소개는 주변 이웃 수를 사용하는 방법을 설명한다. 여기서는 라이브러리를 실행하는 대신 voxel 뒤 대표점에서, 자기 자신을 제외하고, 거리≤0.11m인 다른 대표점이1개 이상이면 유지라는 교육용 규칙을 정한다. API의 자기 포함 여부·검색 경계·파라미터 기본값과 자동으로 같다고 읽지 않는다.

A-B는0.09m, B-C는0.10m, A-C는0.19m다. D-E는0.09m이고 C-D는0.41m, E-F는0.23m다. 따라서 이웃 수는 A1/B2/C1/D1/E1/F0이다. F만 제외되어5개 대표점이 남는다. F의 원본 p8은 유효하고 ROI 안이었지만 이 밀도 기준에 의해 제외되었다. 이 세 이유를 구별한다.

같은 기준을 바꿔 자기 제외 이웃을2개 이상 요구하면 B만 남는다. 원래 점을 셌을 때와 대표점을 셌을 때도 밀도가 다르다. 예를 들어 p1은 원본의 p2와0.02m 떨어져 있지만 voxel 뒤에는 A 하나로 요약되어 둘을 다시 이웃2개로 세지 않는다. 따라서 필터 순서를 바꾸고 같은 숫자를 썼다고 같은 결과가 나와야 하는 것은 아니다. 같은 좌표의 중복 표본도 새로운 독립 관측을 보장하지 않는다.

군집은 가까움의 연결이며 물체 이름이 아니다

이제 남은5점에서 거리≤tau=0.11m일 때 간선을 잇는다고 하자. 연결 군집은 이 간선을 여러 번 따라가 도달할 수 있는 점들의 묶음이다. PCL Euclidean cluster 소개의 공간 이웃을 확장하는 생각을 작은 그래프로 계산한다. 최소 군집 크기는 대표점2개로 정한다. 이 경계/크기는 이번 과제의 규칙이다.

A-B-C는 A에서 B, B에서 C로 이어져 하나의3점 군집이고 D-E는2점 군집이다. A-C 거리는0.19m로 이번 tau=0.11m보다 커도 같은 군집에 속한다. 군집의 모든 두 점 거리가 tau 이하라는 조건이 아니다. 출력은 {A,B,C}와 {D,E} 두 묶음이다. 센서가 실제 물체 두 개를 정확히 검출했다는 결론은 아직 없다.

별도의 반례로 x=0.30/0.40/0.50m 세 점과 tau=0.11m를 두면 양끝 거리는0.20m여도 중간 점을 거쳐 한 군집이다. 이 중간 점이 두 물체 사이의 잡음이었다면 원하지 않는 합침이 생긴다. 반대로 같은 물체도 가림·희소성으로 간격이 커지면 여러 군집으로 갈라질 수 있다. tau를 크게 한다고 항상 좋아지는 것이 아니다. 평면/바닥 같은 구조를 그대로 두면 물체와 연결될 수 있지만 평면 모델을 맞춰 바닥을 분리하는 일은 거리 군집과 다른 문제이며 여기서는 수행하지 않는다.

점 수가 줄거나 군집2개가 나왔다는 사실만 보고 끝내지 않는다. 입력/frame/시각/단위, 유한/ROI 제외 이유, voxel 원점·크기·원본 매핑, 이웃 규칙/단계, tau/최소크기, 합침/분할·미확인 범위를 남긴다. 다음 M13.02의 정합에서는 이 전처리가 대응점과 잔차에 어떤 영향을 주는지 이어 본다. 현재 필터·군집을 수행했다고 학습 기반 3D 검출이나 실제 주행 안전을 검증한 것은 아니다.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

설치·장비 없이 위12점을 사용한다. 조건은 같은 sensor 프레임·m·동일 합성 시각, 유한값→ROI(0≤x<1)→원점0/voxel0.1m centroid→자기 제외 반경0.11m 이웃1개 이상→tau0.11m 연결 군집/최소크기2다. 여기의 소수는 손계산용 정확한 값으로 취급하고 실제 float 비교의 경계는 별도로 확인한다.

  1. 각 점의 유지/제외 단계·이유를 적고 단계별 개수를 맞춘다. p11의 음수가 왜 좌표 자체의 무효를 뜻하지 않는지 설명한다.
  2. 셀 key와 대표점/원본 ID를 계산하고6개 대표점의 이웃 수와 필터 뒤 결과를 적는다. 원래8점을 대표6점의 이웃 수로 세면 안 되는 이유도 적는다.
  3. 군집을 구하고 첫 군집의 양끝 거리를 tau와 비교한다. 고립 F가 실제 가는 물체일 수 있는 상황에서 “장애물 없음”이라는 보고를 어떻게 고칠지, tau/전처리를 바꿀 때 비교할 근거를 제안한다.

힌트는 먼저 제외 이유를 유한값/ROI/밀도로 나누는 것이다. 군집은 점 쌍을 전부 한 번에 묶지 말고 허용 거리의 간선을 그려 연결을 따라가 본다. 실제 PCL·LiDAR 실행이 아니라 합성 좌표 계산임을 기록한다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

sensor body 프레임에서 측정한 점(200,100,-50)mm를 m 단위로 사용할 예정이다. 값·프레임을 무엇으로 바꿔야 하며 z가 음수라는 이유만으로 버려도 되는가? PointCloud2를 받을 때 XYZ값 외에 확인할 계약 두 가지도 적어라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

원점0·voxel0.1m에서 x=0.10과 x=-0.01의 key를 구하라. 별도로 같은 셀에 x=.02/.04가 있으면 centroid와 셀 중심은 각각 무엇인가? 본문의 ROI를 적용하면 음수 예제가 제외되는 이유도 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

x=.30/.40/.50m 세 점, 나머지 좌표 동일, tau=.11m·최소크기2인 거리 연결 군집을 구하라. 양끝이 tau보다 멀다는 이유로 분리해야 한다는 주장과, 결과가 한 군집이므로 물체도 하나라는 주장을 각각 평가하라. tau를 .09m로 낮추면 이번 추출 결과는 어떻게 되는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.