Dev Seminar

2026-10-23

Brice

Plate Solver 만들기V3

2026-10-23

Brice

지난 이야기

그동안의 이야기

2022-06 · Dev Seminar
Introduction to Plate Solving
  • 동료 사진을 사람이 풀어 보기
  • Astrometry.net의 quad + KD-tree
  • 이과생의 별 헤는 밤: 찍은 시각 맞히기
  • 목표: 내 Plate Solver 만들기
2023-04 · 전사 미팅, 드림 챌린지
개발자의 별 헤는 밤
  • 삼각형 284만 개 → 실패 선언
  • 발표 직전에 "성…공..?"
  • 북두칠성 5시간 → 3분 24초
2025-03 · Dev Seminar
Plate Solver 만들기 V2
  • quad + HEALPix + KD-tree
  • 사람이 별을 고쳐 주면 풀린다
  • 남은 일 세 가지

Plate Solving

사진 속 점 하나하나가

하늘의 어느 방향인지 알아내는 일

= 이 사진에 찍힌 별은 무엇이고, 어떤 별자리일까?

V2는 이렇게 풀었습니다

1
사진 고르기
→
2
별 찾기
OpenCV로 밝은 점
+ 사람이 고친다
→
3
별 4개의 모양으로
별 지도에서 찾기
quad · 가장 가까운 것 = 답
→
4
주변 별 표시
짝지은 4개로 변환을 구해
별 지도를 사진에 겹친다

별 배치를 알아보려면?

별 4개로, 돌려도 키워도 옮겨도 그대로인 지문 만들기

V2에서 남은 일

  • 올바른 결정하기
  • 주변 별 정보 표시에서 오차 보정
  • 아무나 시도해 볼 수 있도록 웹사이트 배포

샘플 16장: V2 결과

성공
틀림
틀림
틀림
성공
성공
틀림
틀림
틀림
틀림
틀림
틀림
틀림
틀림
성공
틀림

샘플 16장: V3 결과

성공
성공
성공
시각·장소
성공
성공
성공
성공
성공
성공
성공
성공
성공
성공
성공
모름

V3 구경부터 해볼까요?

V2와 무엇이 달라졌나

V2V3
별 찾기사람이 마커를 고친다알아서, 필요할 때만 사람이
자동으로 풀리는 샘플16장 중 4장16장 중 14장 (시각·장소를 알면 15장)
1순위가 틀린 사진12장 (맞는지 판정 없음)0장
처음 받는 양약 28MB약 0.68MB

1. 올바른 결정하기

V2: 가장 가까운 quad가 곧 답

지문이 가장 가까운 quad를 찾으면 끝

나머지 중에 맞은 별이 있는지는 눈으로 확인

찾은 답을 사진에 겹쳐서 비교해보면

우리 만남은 우연이 아니야

필연의 기준은 왜 10억 분의 1일까

10-010-2010-4010-6010-80 기준 10-9 사진마다 가장 그럴듯한 가짜 진짜 답 (풀리는 14장) ← 흔한 일 우연일 확률 · 드문 일 →
  • 못 푸는 사진은 8초 동안 후보를 3만 개 안팎 본다 → 기준 10-9이면 가짜가 통과하는 건 사진 3만 장에 한 번
  • 샘플 16장: 가짜는 모두 10-4.3보다 흔하고, 진짜는 모두 10-17.7보다 드물다
  • Astrometry.net도 같은 크기(10억)를 쓴다

모르면 모른다고 하기

다시 판정 끝까지 모르면 사람이 확인 V2 후보 quad 지문 1등 = 답 V3 후보 quad 필연인가? 예 정답 표시 아니오 모름 다음 방법으로 시도

2. 주변 별 정보 표시에서 오차 보정

멀어질수록 늘어나는 오차를 어떻게 보정할까?

V3: 오차 보정

  • 몇 쌍씩 무작위로 맞춰 보고, 가장 많은 별이 동의하는 것 고르기 (RANSAC)
  • 건물을 똑바로 세운 사진은 사다리꼴까지 맞추는 원근 변환으로
  • 확신한 뒤 별 60개로 한 번 더 다듬기

최종으로 풀리는 사진 14장 중 가장 아슬아슬한 사진도 우연일 확률 10⁻¹⁷·⁷
기준 10⁻⁹보다 한참 아래

남은 일

  • 올바른 결정하기
  • 주변 별 정보 표시에서 오차 보정
  • 아무나 시도해 볼 수 있도록 웹사이트 배포

3. 사람이 하던 일을 컴퓨터로

별 찾기는 "주변보다 밝은 점" 찾기

실패한 로직 1: 흐릿한 별 지우기

가짜가 크게 퍼진다 → 크게 퍼진 점은 지우자

밝은 진짜 별도 크게 퍼진다 → 정답 별 7개를 지우라고 했다

점선 줄의 밝기 (배경을 뺀 값) · 노란 막대 = 꼭대기 절반 높이에서의 폭 · 같은 사진은 같은 배율

실패한 로직 2: 칸마다 고르게 뽑기

칸마다 1등씩 뽑자 (10×10)

점이 잡힌 칸 83개 → 칸 1등 83개
(그중 진짜 별 30개)

그중 밝은 순으로 25개를 뽑으면
→ 진짜 별 4개, 가짜 21개

  • ○ 뽑힌 진짜 별
  • ○ 뽑힌 가짜
  • ○ 칸 1등이지만 뽑히지 못한 점

사람을 흉내 내자

사람은 땅을 가리고 하늘만 본다

사진 전체로 못 풀면 위쪽만 체크하기

위쪽 45%에서 성공

  • ○ 풀이에 처음 넣은 밝은 별 15개
  • ▲ 후보의 출발점 (별 3~4개 묶음)
  • ┄ 모름: 가장 그럴듯했던 후보의 별자리선
  • ━ 성공: 찾은 별자리선
  • ┄ 가린 경계

밝은 순으로 고르면 불빛이 다 차지한다

quad를 줄였더니 북두칠성이 빠졌다

삼각형을 쓰면 어떨까

삼각형은 닮은 가짜가 너무 많다

+ 사진에서 잰 모양 값 · ● 정답 · ○ 풀이가 확인하는 가장 닮은 8개 · ● 별 지도의 모양 · 점선 원: 정답까지 거리

14장 전체로 보면, 정답이 8등 안에 드는 비율 삼각형 1% · quad 61%

삼각형과 quad는 서로 못 푸는 사진을 푼다: 둘 다 쓰자

삼각형 (별 셋)quad (별 넷)
사진에서 만들 수 있는 진짜 모양304개64개 (10° 안만)
정답보다 더 닮은 가짜 (중간값)3,052개1개
혼자서 푸는 사진 (14장 중)14장10장
걸린 시간 (풀린 사진, 가장 오래)3.3초0.3초

quad로 먼저 빠르게 → 못 풀면 삼각형

가짜 삼각형 줄이기: 화각을 짐작하면 크기로 거를 수 있다

V3: 사람 손 없이 샘플 16장

성공
성공
성공
모름
성공
성공
성공
성공
성공
성공
성공
성공
성공
성공
성공
모름
V2 quad + 판정1장
고친 quad5장
+ 삼각형6장
+ 땅 가리기13장
+ 원근 변환14장

샘플 16장에만 맞춘 건 아닐까

시험풀림틀린 확신
정답을 아는 합성 사진 48장
창문·전봇대·반사광·위성·비행기를 섞어 그림
46장0
풀리는 14장을 다시 압축·축소한 112장
앱과 같은 8초 제한으로
108장0
별하늘지기 카페 사진 6장
처음 보는 사진 · 이 사진들로는 어떤 값도 고치지 않음
5장0
인터넷 밤하늘 사진 200장
처음 보는 사진 · 앱과 같은 8초 제한으로
102장0

처음 보는 인터넷 사진 200장

102 / 200
8초 안에 확신 (51%) · 그중 겹친 별로 정답 101, 애매 1
0
틀린 답을 확신 (8초)
98
모름 — 후보만 보여 줌

분류별 8초 확신

별밭8/8
희미함7/8
별자리24/32
구름10/15
망원3/5
달4/7
오로라13/24
도시 불빛9/17
은하수21/51
어안2/12
박명1/10
별 궤적0/10

못 푼 98장의 원인

불빛·구름·박명·달23
원인 미확정23
어안·초광각16
광각 가장자리11
별 궤적11
8초 부족6
밝은 별 밀림6
별 적음2

4. 이과생의 별 헤는 밤, 다시

같은 하늘은 한 달에 2시간씩 일찍 온다

지평선을 알 수 있다면?

버즈빌은 해외로 워크샵을 가곤 했다는 전설이 있다.

별 8개만으로는
단서가 부족하다.

여기에
'언제',

'어디서',

'지평선'
이 더해지면

별을 특정할 수 있다.

그런데 실제로는 찍은 시각이
22:10 무렵 (사이판 시각)

첫 번째 사진이 귀국 후
캡처한 것인 걸 알 수 있다.

달은 날짜를 말해준다

5. 아무나 해 볼 수 있게

V2를 배포하지 못한 이유

  • 정확도 아무 사진이나 기대만큼 풀지 못하고, 맞는지 판정하지 못했다
  • 속도 풀이가 너무 오래 걸렸다
  • 용량 받는 양이 많아 서버 비용이 걱정됐다
  • 편의성 개발이 멈춰 쓰기 불편했고, 사람이 별을 고쳐야 풀렸다

V2를 배포하지 못한 이유

  • 정확도 모르면 모른다고 · 사람 손 없이 풀기
  • 속도 후보까지 약 4초 → 확신까지 0.13초 (중앙값)
  • 용량
  • 편의성

처음 받는 양: 약 28MB

OpenCV3.87MB
글꼴2.06MB
quad DB22.15MB
나머지0.42MB

합계 약 28MB V2를 그대로 올렸다면, 플레이트 솔버를 열어 사진 한 장 풀 때까지 (압축)

OpenCV의 손익 계산

OpenCV직접 짜면
역할흑백 · 흐림 · 빼기 · 별 감지같은 일, 약 120줄
용량3.86MB0
준비받기 3.1초(10Mbps) + 불러오기 0.14초0
속도0.16초0.15초
흑백·흐림·빼기, 2.8MP 사진 · 큰 사진(12MP)은 0.7초 vs 0.75~0.9초

OpenCV를 쓰지 말자

글꼴: 쓰인 글자만 받자

통짜 파일나눠 받기
받는 글자한글 1만 1천여 자사이트에서 쓰는 것만
용량2.05MB0.31MB

DB를 받지 말고 만들자

quad DB

V2 65MB(압축 22MB) → 10° 안만 10.8MB → 이진 2MB(압축 1.46MB) → 0

별 위치 + 규칙(HEALPix 192칸)이면
언제든 똑같이 만들어진다

브라우저가 사진 고르는 동안 약 0.75초 (노트북 기준)

처음 받는 양: 28MB → 0.68MB

OpenCV3.87 → 0
글꼴2.06 → 0.31
quad DB22.15 → 0
나머지0.42 → 0.37

합계 약 28MB → 0.68MB

V2를 배포하지 못한 이유

  • 정확도 모르면 모른다고 · 사람 손 없이 풀기
  • 속도 후보까지 약 4초 → 확신까지 0.13초 (중앙값)
  • 용량 약 28MB → 0.68MB
  • 편의성

편의성은 직접 판단해 보세요.

남은 일

  • 올바른 결정하기
  • 주변 별 정보 표시에서 오차 보정
  • 아무나 시도해 볼 수 있도록 웹사이트 배포

2022년에 세운 목표

Introduction to Plate Solving (2022-06) 마지막 장: 나만의 플레이트 솔버 만들기

  • PoC
  • 밝은 별만으로
  • 땅이나 구름이 찍힌 사진에서도
  • 안 되면 사진 두 장만이라도 → 샘플 16장 중 14장 (시각·장소를 쓰면 15장)

V3를 개발하면서 배운 점

  • 모르면 모른다고 한다
  • 짝에 쓰지 않은 별로 확인한다
  • 감 대신 여러 사진으로 잰다
  • 앱과 같은 조건으로 잰다
  • 사람이 하던 일을 흉내 낸다

는 AI가 생각한 배운 점

V3를 개발하면서 사람이 배운 점

  • AI는 저보다 개발을 잘합니다
  • 직접 코드를 짜는 건 아니지만, 여전히 만드는 건 재밌습니다
  • 더 적은 노력으로 높은 퀄리티가 나오니 만족도가 좋습니다
  • 발표자료는 여전히 하나하나 살펴보고 수정해야 합니다
  • 이제는 성불할 수 있습니다

이제는 주소 하나

V2

1. nvm 설치

2. git clone, npm install, ./build_database.sh, npm run dev

3. 웹브라우저에서 http://localhost:5025 열기

V3

star.byb.kr

원리: star.byb.kr/learn
코드: github.com/ybbarng/star.byb.kr

지금 써 보세요

star.byb.kr

내 휴대폰 속 밤하늘 사진을 올려 보세요

사진은 서버로 가지 않아요. 계산은 전부 내 휴대폰에서 합니다.

사진이 없으면 샘플이나 별 놀이터도 있습니다.

감사합니다.

덤: 별 놀이터

V4에서 할 일

  • 풀리는 사진을 다시 압축·축소한 112장 중 8초 안에 못 푸는 4장
  • 별 10개 남짓인 사진: 지금은 시각·장소가 있어야
  • 처음 보는 사진 더 많이
  • 핸드폰에서 얼마나 걸리는지 재기
  • 어안·망원 렌즈 사진도 풀기