หลายภาพ
รูปเดียวMany pictures,
one shape许多张照片,
一个形状
โดรนบินรอบปราสาทหนึ่งรอบ แล้วกลับมาพร้อมรูปทรง โปรแกรมที่สร้างรูปทรงนั้นชื่อ COLMAP มันไม่ได้เรียนจำใบหน้า มันหามุม ตกลงว่ามุมไหนคือที่เดียวกัน หาว่ากล้องเคยอยู่ตรงไหน แล้วขยับทั้งหมดจนมันเข้ากัน ห้องนี้อธิบายสี่ขั้นนั้น แสดงรีลที่เป็นตัวอย่าง และให้คุณสะสมแบบจำลองศีรษะเล็ก ๆ บนเครื่องนี้ ภาพไม่ถูกส่งออกไป
A drone flew once around a castle and came home with a shape. The program that built it is COLMAP. It did not learn a face. It found corners, agreed which corners were the same place, worked out where the camera had been, and nudged all of that until it held together. This room walks those four steps, shows the reel they come from, and lets you grow a small head model on this device. The pictures stay here.
一架无人机绕城堡飞了一圈,带回一个形状。做出这个形状的程序叫 COLMAP。它没有在学习一张脸。它找出角落,认定哪些角落是同一个地方,算出相机当时在哪里,再把这些一起挪到能对上为止。这个房间讲这四步,放出那段示例短片,并让你在这台设备上长出一个小的头部模型。画面留在这里。
โครงสร้างจากการเคลื่อนที่Structure from motion从运动恢复结构
- หาจุดเด่นFind features找出特征
มุมและขอบที่ยังจำได้เมื่อกล้องขยับCorners and edges you can find again after the camera moves相机移动后仍能再找到的角和边 - จับคู่ข้ามภาพMatch across views跨视图匹配
จุดเดียวกันในคนละเฟรม คู่ที่เรขาคณิตไม่ยอมรับคือคู่ผิดThe same place in two frames. Geometry throws out the rest同一处出现在两帧里。几何关系淘汰其余配对 - ประมาณกล้อง แล้วหาจุดตัดCameras, then points先相机,再交点
เส้นสายตาสองเส้นที่เหลื่อมกัน ตัดกันที่จุดสามมิติTwo sight-lines with a gap between them meet at a 3D point两条隔开的视线交于一个三维点 - ปรับให้เข้ากันRefine一起修正
bundle adjustment ขยับกล้องและจุดพร้อมกันBundle adjustment moves the cameras and the points together光束法平差同时移动相机和点
ภาพคือตารางตัวเลข ตัวเลขส่วนใหญ่เรียบ คือท้องฟ้า กำแพง ผิวหนัง ขยับกล้องนิดเดียวมันก็หน้าตาเดิม จุดเด่นคือหย่อมเล็ก ๆ ที่ไม่เป็นอย่างนั้น มุมหน้าต่าง ขอบกระเบื้อง รอยบากของเปลือกตา ในขั้นตอนคลาสสิกของ COLMAP ตัวตรวจจับ (SIFT) จดหย่อมนั้นเป็นชุดตัวเลขที่ยังคล้ายเดิมเมื่อหย่อมหมุนเล็กน้อยหรือแสงเปลี่ยน
A picture is a grid of numbers. Most of those numbers are smooth — sky, wall, skin — and they look the same if the camera shifts a little. A feature is a small patch that does not: a window corner, a tile edge, the notch of an eyelid. In COLMAP’s classic pipeline the detector (SIFT) writes that patch down as a list of numbers that stays similar when the patch turns a little or the light changes.
一张照片是一格格数字。大多数数字是平滑的,天空、墙、皮肤,相机稍稍一移,看起来还是一样。特征是一小块不平滑的地方:窗角、砖缝、眼睑的缺口。在 COLMAP 的经典流程里,检测器(SIFT)把那一小块写成一串数字。小块稍稍转动,或光线变了,这串数字仍然相近。
มุมเดียวกันโผล่ในหลายเฟรม การจับคู่ถามว่า ชุดตัวเลขในเฟรมที่ 12 แถวไหนคือที่เดียวกับเฟรมที่ 13 ส่วนใหญ่เดาผิด เรขาคณิตทิ้งคู่เหล่านั้น กล้องสองตัวที่มองโลกใบเดียวกันต้องยอมรับเส้นเดียวกัน (เส้นอีพิโพลาร์) คู่ที่ไม่อยู่บนเส้นนั้นไม่ใช่คู่จริง
The same corner shows up in many frames. Matching asks which list of numbers in frame 12 is the same place as which list in frame 13. Most guesses are wrong. Geometry throws them out. Two cameras looking at one world must agree on a line, the epipolar line. A match that misses the line is not a match.
同一个角会出现在很多帧里。匹配问的是:第 12 帧里的哪一串数字,和第 13 帧里的哪一串,是同一个地方。大多数猜测是错的。几何关系把它们丢掉。两台相机看同一个世界,必须在一条线上达成一致,那是极线。对不上这条线的配对,就不是配对。
เมื่อมีคู่ที่อยู่รอดมากพอ โปรแกรมประมาณว่ากล้องแต่ละตัวอยู่ที่ไหน ทั้งตำแหน่งและทิศที่มันมอง แล้วจากเส้นสายตาสองเส้นขึ้นไป หาจุดสามมิติที่เส้นเหล่านั้นตัดกัน นั่นคือการหาจุดตัดด้วยสามเหลี่ยม เฟรมเดียวไม่มีความลึก สองเฟรมที่มีช่องว่างระหว่างกันมีความลึก COLMAP สร้างทีละน้อย เริ่มจากคู่หนึ่ง แล้วเพิ่มทีละภาพ
Once enough matches hold, the program estimates where each camera was — its place and the direction it looked — and, from two or more sight-lines, the 3D point where they cross. That crossing is triangulation. One frame has no depth. Two frames with a gap between them do. COLMAP builds this gradually: a first pair, then one picture at a time.
足够多的配对站得住之后,程序估计每台相机在哪里,包括位置和朝向,再从两条或更多视线求出它们相交的三维点。这个交点就是三角化。单帧没有深度。隔开的两帧才有。COLMAP 是慢慢建的:先用一对,然后一次加进一张照片。
ค่าแรกยังหยาบ bundle adjustment ขยับกล้องและจุดพร้อมกัน จนจุดที่ฉายกลับเข้าไปในทุกภาพตกบนจุดเด่นที่อ้างถึงมัน มันคือการปรับกำลังสองน้อยที่สุดก้อนใหญ่ก้อนเดียว เมฆจุดกระจัดกระจายคือผลลัพธ์ เป็นจุด ไม่ใช่ผิวทึบ
The first estimate is rough. Bundle adjustment moves the cameras and the points together until each point, projected back into every picture, lands on the feature that claimed it. It is one large least-squares fit. The sparse cloud is the result: points, not a solid surface.
第一次的估计是粗的。光束法平差把相机和点一起移动,直到每个点被投回每张照片时,落在声称它的那个特征上。这是一次大的最小二乘拟合。稀疏点云就是结果:是点,不是一块实心的表面。
หลังจากจุดกระจัดกระจายAfter the sparse cloud稀疏点之后
multi-view stereo เริ่มตรงที่ขั้นตอนนี้หยุด เมฆจุดกระจัดกระจายบอกว่า “มีจุดอยู่ที่นี่” สเตอริโอถามทุกพิกเซล ในบรรดาภาพที่มองเห็นมันได้ว่า “ความลึกตรงนี้เท่าไร” Schönberger, Zheng, Frahm และ Pollefeys (ECCV 2016) คือขั้นถัดไป และเป็นเหตุที่การรัน COLMAP มักต่อไปเป็นเมฆจุดหนา จุด 69,316 จุดในรีลคือขั้นกระจัดกระจาย ไม่ใช่ขั้นหนา
Multi-view stereo starts where this stops. The sparse cloud says “a point is here.” Stereo asks every pixel, across the views that can see it, “what is the depth here?” Schönberger, Zheng, Frahm and Pollefeys (ECCV 2016) is that next step, and it is why a COLMAP run often continues into a dense cloud. The 69,316 points in the reel are the sparse step, not the dense one.
多视图立体从这里停下的地方开始。稀疏点云说“这里有一个点”。立体匹配问每一个像素,在能看见它的那些视图里,“这里的深度是多少?”Schönberger、Zheng、Frahm 和 Pollefeys(ECCV 2016)就是下一步,也是 COLMAP 的一次运行常常继续做出稠密点云的原因。短片里的 69,316 个点是稀疏那一步,不是稠密那一步。
NeRF และ Gaussian splatting ต้องการสิ่งที่เมฆจุดกระจัดกระจายมีอยู่แล้ว คือท่าของกล้องในทุกภาพ neural radiance field เรียนปริมาตรต่อเนื่องที่เมื่อเรนเดอร์จากท่าเหล่านั้นแล้วตรงกับภาพถ่าย Gaussian splatting เก็บเมฆที่ระบุได้ชัด เป็นก้อนที่มีตำแหน่ง ขนาด สี และความทึบ มักเริ่มจากจุดกระจัดกระจาย แล้วปรับจนภาพที่เรนเดอร์ตรงกับของจริง Structure-from-Motion ไม่ได้ระบายฉาก มันวัดว่ากล้องอยู่ที่ไหน และจุดจำนวนหนึ่งอยู่ที่ไหน วิธีที่ใหม่กว่ายืมการวัดนั้น แล้วจึงสร้างผิว
NeRF and Gaussian splatting both want the thing the sparse cloud already has: a camera pose for every picture. A neural radiance field learns a continuous volume that, rendered from those poses, matches the photos. Gaussian splatting keeps an explicit cloud — blobs with position, size, colour and opacity — often started from the sparse points, and fits them until the rendered views match. Structure-from-Motion does not paint the scene. It measures where the cameras were and where a modest set of points sat. The newer methods borrow that measurement, and only then invent a surface.
NeRF 和高斯溅射都要稀疏点云已经有的东西:每张照片的相机姿态。神经辐射场学一个连续的体积,从这些姿态渲染出来要和照片一致。高斯溅射保留一团明确的云,每个团块有位置、大小、颜色和不透明度,常常从稀疏点出发,再拟合到渲染结果和照片一致。从运动恢复结构并不涂绘场景。它量的是相机在哪里,以及不多的一批点在哪里。较新的方法借用这次测量,然后才发明一个表面。
ความคิดพื้นฐานThe basic idea基本想法
พิกเซลคือการวัด ไม่ใช่สิ่งของ จุดเด่นคือการวัดที่หาได้อีก การจับคู่คือคำกล่าวอ้างว่าการวัดสองครั้งคือที่เดียวกัน กล้องคือแบบจำลองว่าจุดสามมิติกลายเป็นพิกเซลอย่างไร การหาจุดตัดคือทางกลับ และมันต้องการเส้นฐาน กล้องต้องขยับ การปรับแก้คือการยอมว่าคำตอบแรกเป็นค่าประมาณ ไม่มีขั้นไหนบอกชื่อของสิ่งนั้น มันตกลงกันแค่เรื่องตำแหน่ง
A pixel is a measurement, not a thing. A feature is a measurement you can find again. A match is a claim that two measurements are the same place. A camera is a model of how a 3D point becomes a pixel. Triangulation is the reverse, and it needs a baseline: the cameras must have moved. Refinement is admitting the first answer was approximate. None of these steps names the thing. They only agree on where it is.
像素是一次测量,不是一个东西。特征是你能再找到的测量。匹配是一个说法:两次测量是同一个地方。相机是一个模型,说明三维点怎样变成像素。三角化是反过来的那一步,它需要基线:相机必须移动过。修正就是承认第一个答案只是近似。这些步骤都不给东西起名字。它们只约定它在哪里。
เก้าสิบหกเฟรมNinety-six frames九十六帧
รีลด้านล่างเป็นของ @index.opensource คัดโดย @hyun2xyz ภาพโดรนคือปราสาท Chapultepec เก้าสิบหกเฟรมกลายเป็นจุดสามมิติกระจัดกระจาย 69,316 จุด เราไม่ดาวน์โหลดรีลและไม่เก็บสำเนาไว้ที่นี่ เฟรมที่คุณเห็นมาจากหน้าของ Instagram
The reel below is by @index.opensource, curated by @hyun2xyz. The drone pictures are Chapultepec Castle. Ninety-six frames became 69,316 sparse 3D points. We do not download the reel and we do not keep a copy here. The frames you see come from Instagram’s own page.
下面的短片来自 @index.opensource,由 @hyun2xyz 编选。无人机画面是查普尔特佩克城堡。九十六帧变成 69,316 个稀疏三维点。我们不下载这段短片,也不在这里留副本。你看到的画面来自 Instagram 自己的页面。
เฟรมนี้เป็นหน้าของ Instagram การเปิดมันบอก Instagram ว่าห้องนี้ขอรีลนั้น ภาพจากกล้องของคุณไม่ถูกส่งไปที่นั่น This frame is Instagram’s page. Opening it tells Instagram that this room asked for that reel. Your camera pictures are not sent there. 这个框是 Instagram 的页面。打开它会让 Instagram 知道这个房间请求了那段短片。你的相机画面不会被送到那里。
ลองความคิดเดียวกันกับศีรษะของคุณThe same idea, on your head同一个想法,用在你的头上
นี่ไม่ใช่ COLMAP และไม่ใช่การสแกนกะโหลก MediaPipe Face Landmarker หาจุด 478 จุดบนใบหน้าที่มันเห็น ตา จมูก ปาก คาง ขอบหน้าผาก มันไม่เห็นผม และไม่เห็นหนังศีรษะ เมื่อคุณเอียงจนกระหม่อมจะเข้าเฟรม หน้านี้ต่อหมวกของจุดออกไปพ้นหน้าผาก จุดเหล่านั้นเป็นรูปทรงที่เรากำหนด วาดด้วยสีเทา จุดสีพีชคือจุดที่โมเดลส่งกลับมาจริง ๆ สะสมขณะคุณหัน พวกมันอยู่ในแท็บนี้ ไม่ถูกบันทึก ไม่ถูกอัปโหลด และไม่ใช่บันทึกว่าคุณเป็นใคร
This is not COLMAP, and it is not a scan of your skull. MediaPipe Face Landmarker finds 478 points on the face it can see: eyes, nose, mouth, jaw, the edge of the forehead. It does not see hair, and it does not see the scalp. When you tilt far enough that the crown would be in frame, this page extends a cap of points past the forehead. Those points are a shape we assumed, drawn in grey. The peach points are the landmarks the model actually returned, gathered as you turn. They stay in this tab. They are not saved, not uploaded, and not a record of who you are.
这不是 COLMAP,也不是对你头骨的扫描。MediaPipe Face Landmarker 在它看得见的脸上找 478 个点:眼、鼻、嘴、下颌、额头的边缘。它看不见头发,也看不见头皮。当你歪到头顶会进入画面时,这一页把一顶点组成的帽子延伸到额头之外。那些点是我们假设的形状,画成灰色。桃色的点才是模型真正返回的特征点,在你转动时累积。它们留在这个标签页里。不被保存,不被上传,也不是一份关于你是谁的记录。
จุดแลนด์มาร์กคลุมใบหน้า หนังศีรษะเป็นการประมาณ โดยต่อจากจุดที่สะสมไว้ ไม่ใช่การวัดผมหรือกะโหลก
Face landmarks cover the face. The scalp is approximated, extended from the accumulated points. It is not a measurement of hair or bone.
人脸特征点覆盖的是脸。头顶是近似的,由累积的点向外延伸。它不是对头发或骨头的测量。
กล้องปิดCamera off相机已关闭
ยังไม่มีจุด · เริ่มเมื่อคุณยินยอมNo points yet · They start after you agree还没有点 · 同意之后才开始
- หันซ้ายTurn left向左转ยังไม่มีmissing还没有มีแล้วseen已看到
- หันขวาTurn right向右转ยังไม่มีmissing还没有มีแล้วseen已看到
- เงยหน้าLook up抬头ยังไม่มีmissing还没有มีแล้วseen已看到
- ก้มหน้าLook down低头ยังไม่มีmissing还没有มีแล้วseen已看到
- เอียงให้เห็นศีรษะTilt for the scalp歪头露出头顶ยังไม่มีmissing还没有มีแล้วseen已看到
- หันตรงFace forward正对ยังไม่มีmissing还没有มีแล้วseen已看到
หันซ้าย ขวา เงย ก้ม แล้วเอียงจนเห็นกระหม่อม รายการด้านบนบอกมุมที่ยังขาด ลากเมฆจุดเพื่อหมุน หรือใช้ปุ่มลูกศรเมื่อโฟกัสอยู่ที่ภาพนั้น ซ่อนแท็บแล้วกล้องจะปิด ไม่มีไมโครโฟน Turn left, right, up and down, then tilt until the crown shows. The list above says which angle is still missing. Drag the cloud to turn it, or use the arrow keys while that picture is focused. Hiding the tab turns the camera off. There is no microphone. 向左转、向右转、抬头、低头,再歪到头顶出现。上面的列表告诉你哪个角度还缺。拖动点云来旋转,焦点在那幅图上时也可以用方向键。隐藏标签页会关闭相机。没有麦克风。
เครดิตCredits署名
- รีลโดย @index.opensource คัดโดย @hyun2xyz แสดงผ่านเพจฝังของ Instagram เท่านั้น ไม่ได้ดาวน์โหลดหรือเก็บสำเนาในเว็บนี้
- COLMAP โดย Johannes L. Schönberger และคณะ, ETH Zurich และ University of North Carolina at Chapel Hill สัญญาอนุญาต new BSD · colmap.github.io · github.com/colmap/colmap
- Schönberger และ Frahm, “Structure-from-Motion Revisited”, CVPR 2016 · ฉบับเปิด
- Schönberger, Zheng, Frahm และ Pollefeys, “Pixelwise View Selection for Unstructured Multi-View Stereo”, ECCV 2016 · ฉบับเปิด
- ภาพโดรน: ProtoplasmaKid, CC0, Wikimedia Commons, Sobrevuelo Castillo de Chapultepec ไฟล์นั้นไม่ถูกเก็บในเว็บนี้
- จุดบนใบหน้าในการลองใช้มาจาก MediaPipe Face Landmarker ชุดเดียวกับห้องใบหน้าและสมาธิ รันในเบราว์เซอร์นี้ เป็นแลนด์มาร์ก ไม่ใช่การระบุตัวบุคคล
- Reel by @index.opensource, curated by @hyun2xyz. Shown only through Instagram’s embed. Not downloaded and not copied onto this site.
- COLMAP by Johannes L. Schönberger and colleagues, ETH Zurich and the University of North Carolina at Chapel Hill. New BSD license. colmap.github.io · github.com/colmap/colmap
- Schönberger and Frahm, “Structure-from-Motion Revisited”, CVPR 2016. Open copy
- Schönberger, Zheng, Frahm and Pollefeys, “Pixelwise View Selection for Unstructured Multi-View Stereo”, ECCV 2016. Open copy
- Drone footage: ProtoplasmaKid, CC0, Wikimedia Commons, Sobrevuelo Castillo de Chapultepec. That file is not stored on this site.
- The face points in the demo come from the MediaPipe Face Landmarker already used by the face-and-focus room. It runs in this browser. Landmarks, not identity.
- 短片作者 @index.opensource,编选 @hyun2xyz。只通过 Instagram 的嵌入页面显示。没有下载,也没有复制到本站。
- COLMAP,Johannes L. Schönberger 及其同事,苏黎世联邦理工学院与北卡罗来纳大学教堂山分校。new BSD 许可证。colmap.github.io · github.com/colmap/colmap
- Schönberger 与 Frahm,《Structure-from-Motion Revisited》,CVPR 2016。开放版本
- Schönberger、Zheng、Frahm 与 Pollefeys,《Pixelwise View Selection for Unstructured Multi-View Stereo》,ECCV 2016。开放版本
- 无人机影像:ProtoplasmaKid,CC0,Wikimedia Commons,Sobrevuelo Castillo de Chapultepec。该文件不存放在本站。
- 演示里的脸部点来自人脸与专注房间已经在用的 MediaPipe Face Landmarker。它在这个浏览器里运行。是特征点,不是身份识别。