<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://boofcv.org/index.php?action=history&amp;feed=atom&amp;title=Example_Multiview_Uncalibrated_Reconstruction_Sparse</id>
	<title>Example Multiview Uncalibrated Reconstruction Sparse - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://boofcv.org/index.php?action=history&amp;feed=atom&amp;title=Example_Multiview_Uncalibrated_Reconstruction_Sparse"/>
	<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;action=history"/>
	<updated>2026-05-14T05:33:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=3165&amp;oldid=prev</id>
		<title>Peter at 23:24, 17 January 2022</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=3165&amp;oldid=prev"/>
		<updated>2022-01-17T23:24:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:24, 17 January 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Code:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/lessthanoptimal/BoofCV/blob/v0.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;38&lt;/del&gt;/examples/src/main/java/boofcv/examples/reconstruction/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/lessthanoptimal/BoofCV/blob/v0.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;40&lt;/ins&gt;/examples/src/main/java/boofcv/examples/reconstruction/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l129&quot;&gt;Line 129:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 129:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			bundleAdjustmentRefine();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			bundleAdjustmentRefine();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rodrigues_F64 &lt;/del&gt;rod = new Rodrigues_F64();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;var &lt;/ins&gt;rod = new Rodrigues_F64();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		for (PairwiseImageGraph.View pv : pairwise.nodes.toList()) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		for (PairwiseImageGraph.View pv : pairwise.nodes.toList()) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;var wv = &lt;/del&gt;working.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;lookupView&lt;/del&gt;(pv.id)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;if (!&lt;/ins&gt;working.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;containsView&lt;/ins&gt;(pv.id))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if (wv == null&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				continue;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				continue;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			SceneWorkingGraph.View wv = working.lookupView(pv.id);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			int order = working.listViews.indexOf(wv);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			int order = working.listViews.indexOf(wv);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			ConvertRotation3D_F64.matrixToRodrigues(wv.world_to_view.R, rod);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			ConvertRotation3D_F64.matrixToRodrigues(wv.world_to_view.R, rod);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l350&quot;&gt;Line 350:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 350:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			ShowImages.showWindow(viewer.getComponent(), &amp;quot;Refined Scene&amp;quot;, true);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			ShowImages.showWindow(viewer.getComponent(), &amp;quot;Refined Scene&amp;quot;, true);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DogArray&amp;lt;Point3dRgbI_F64&amp;gt; &lt;/del&gt;copy = new DogArray&amp;lt;&amp;gt;(Point3dRgbI_F64::new);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;var &lt;/ins&gt;copy = new DogArray&amp;lt;&amp;gt;(Point3dRgbI_F64::new);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			viewer.copyCloud(copy);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			viewer.copyCloud(copy);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			try (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;FileOutputStream &lt;/del&gt;out = new FileOutputStream(&amp;quot;saved_cloud.ply&amp;quot;)) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			try (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;var &lt;/ins&gt;out = new FileOutputStream(&amp;quot;saved_cloud.ply&amp;quot;)) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				PointCloudIO.save3D(PointCloudIO.Format.PLY, PointCloudReader.wrapF64RGB(copy.toList()), true, out);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				PointCloudIO.save3D(PointCloudIO.Format.PLY, PointCloudReader.wrapF64RGB(copy.toList()), true, out);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			} catch (IOException e) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			} catch (IOException e) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2996&amp;oldid=prev</id>
		<title>Peter at 06:09, 25 July 2021</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2996&amp;oldid=prev"/>
		<updated>2021-07-25T06:09:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 06:09, 25 July 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multiview_Reconstruction_Dense|Dense Multiview Reconstruction]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multiview_Reconstruction_Dense|Dense Multiview Reconstruction]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Videos:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [https://youtu.be/BbTPQ9mIoQU?t=6 Improvements in v0.38]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Tutorials:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Tutorials:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2984&amp;oldid=prev</id>
		<title>Peter at 00:13, 13 July 2021</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2984&amp;oldid=prev"/>
		<updated>2021-07-13T00:13:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:13, 13 July 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multiview_Reconstruction_Dense|Dense Multiview Reconstruction]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multiview_Reconstruction_Dense|Dense Multiview Reconstruction]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tutorials:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[3D_Reconstruction_on_Desktop_Tutorial|Photogrammetry / 3D Reconstruction on Desktop]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Example Code =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Example Code =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2947&amp;oldid=prev</id>
		<title>Peter at 19:43, 12 July 2021</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2947&amp;oldid=prev"/>
		<updated>2021-07-12T19:43:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:43, 12 July 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Code:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/lessthanoptimal/BoofCV/blob/v0.38/examples/src/main/java/boofcv/examples/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;segmentation&lt;/del&gt;/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/lessthanoptimal/BoofCV/blob/v0.38/examples/src/main/java/boofcv/examples/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;reconstruction&lt;/ins&gt;/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2943&amp;oldid=prev</id>
		<title>Peter at 19:40, 12 July 2021</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2943&amp;oldid=prev"/>
		<updated>2021-07-12T19:40:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:40, 12 July 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Code:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/lessthanoptimal/BoofCV/blob/v0.38/examples/src/main/java/boofcv/examples/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;sfm&lt;/del&gt;/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/lessthanoptimal/BoofCV/blob/v0.38/examples/src/main/java/boofcv/examples/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;segmentation&lt;/ins&gt;/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2941&amp;oldid=prev</id>
		<title>Peter at 19:36, 12 July 2021</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2941&amp;oldid=prev"/>
		<updated>2021-07-12T19:36:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;amp;diff=2941&amp;amp;oldid=2854&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2854&amp;oldid=prev</id>
		<title>Peter at 20:51, 22 December 2020</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2854&amp;oldid=prev"/>
		<updated>2020-12-22T20:51:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:51, 22 December 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l16&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Concepts:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Structure from Motion&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Structure from Motion&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Multiple View Stereo&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Multi Baseline Stereo&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Sparse_Bundle_Adjustment|Sparse Bundle Adjustment]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Sparse_Bundle_Adjustment|Sparse Bundle Adjustment]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2853&amp;oldid=prev</id>
		<title>Peter at 20:43, 22 December 2020</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2853&amp;oldid=prev"/>
		<updated>2020-12-22T20:43:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:43, 22 December 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;center&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;center&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| [[file:Snow_tree.jpg|border|thumb|x400px]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [[file:Multi_view_uncalibrated_sparse_snowtree.mp4|border|thumb|400px|start=0]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [[file:Multi_view_uncalibrated_sparse_snowtree.mp4|border|thumb|400px|start=0]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Scene being reconstructed&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Pseudo color sparse reconstruction from uncalibrated input images.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Pseudo color sparse reconstruction from uncalibrated input images.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
	<entry>
		<id>https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2847&amp;oldid=prev</id>
		<title>Peter: Created page with &quot;&lt;center&gt; {| | start=0 |- | Pseudo color sparse reconstruction from uncalibrated input images. |}  &lt;/cen...&quot;</title>
		<link rel="alternate" type="text/html" href="https://boofcv.org/index.php?title=Example_Multiview_Uncalibrated_Reconstruction_Sparse&amp;diff=2847&amp;oldid=prev"/>
		<updated>2020-12-22T20:34:55Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;center&amp;gt; {| | &lt;a href=&quot;/index.php?title=File:Multi_view_uncalibrated_sparse_snowtree.mp4&quot; title=&quot;File:Multi view uncalibrated sparse snowtree.mp4&quot;&gt;border|thumb|400px|start=0&lt;/a&gt; |- | Pseudo color sparse reconstruction from uncalibrated input images. |}  &amp;lt;/cen...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[file:Multi_view_uncalibrated_sparse_snowtree.mp4|border|thumb|400px|start=0]]&lt;br /&gt;
|-&lt;br /&gt;
| Pseudo color sparse reconstruction from uncalibrated input images.&lt;br /&gt;
|} &lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reconstruction from uncalibrated images is one of the more challenging problems in 3D scene reconstruction since the lens parameters are not initially known and are notoriously unstable to estimate. In this example BoofCV takes a sequence of uncalibrated images and carefully estimates the metric reconstruction from the sparse features. This will then be used to perform dense reconstruction.&lt;br /&gt;
&lt;br /&gt;
Example Code:&lt;br /&gt;
* [https://github.com/lessthanoptimal/BoofCV/blob/v0.37/examples/src/main/java/boofcv/examples/sfm/ExampleMultiViewSparseReconstruction.java ExampleMultiViewSparseReconstruction.java]&lt;br /&gt;
&lt;br /&gt;
Concepts:&lt;br /&gt;
* Structure from Motion&lt;br /&gt;
* Multiple View Stereo&lt;br /&gt;
* Multi Baseline Stereo&lt;br /&gt;
* [[Example_Sparse_Bundle_Adjustment|Sparse Bundle Adjustment]]&lt;br /&gt;
* [[Example_Multi_Baseline_Stereo|Multi Baseline Stereo]]&lt;br /&gt;
* [[Example_Multiview_Reconstruction_Dense|Dense Multiview Reconstruction]]&lt;br /&gt;
&lt;br /&gt;
= Example Code =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Estimate scene parameters using a sparse set of features across uncalibrated images. In this example, a KLT&lt;br /&gt;
 * feature tracker will be used due to speed and simplicity even though there are some disadvantages&lt;br /&gt;
 * mentioned below. After image features have been tracked across the sequence we will first determine 3D&lt;br /&gt;
 * connectivity through two-view geometry, followed my a metric elevation. Then a final refinement&lt;br /&gt;
 * using bundle adjustment.&lt;br /&gt;
 *&lt;br /&gt;
 * This is unusual in that it will estimate intrinsic parameters from scratch with very few assumptions.&lt;br /&gt;
 * Most MVS software uses a data base of known camera parameters to provide an initial seed as this can simplify&lt;br /&gt;
 * the problem and make it more stable.&lt;br /&gt;
 *&lt;br /&gt;
 * @author Peter Abeles&lt;br /&gt;
 */&lt;br /&gt;
public class ExampleMultiViewSparseReconstruction {&lt;br /&gt;
&lt;br /&gt;
	// Instead of processing all the frames just process the first N frames&lt;br /&gt;
	int maxFrames = 40;&lt;br /&gt;
&lt;br /&gt;
	String workDirectory;&lt;br /&gt;
	List&amp;lt;String&amp;gt; imageFiles = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
	PairwiseImageGraph pairwise = null;&lt;br /&gt;
	LookUpSimilarImages similarImages;&lt;br /&gt;
	SceneWorkingGraph working = null;&lt;br /&gt;
	SceneStructureMetric scene = null;&lt;br /&gt;
&lt;br /&gt;
	boolean rebuild = false;&lt;br /&gt;
&lt;br /&gt;
	public static void main( String[] args ) {&lt;br /&gt;
		var example = new ExampleMultiViewSparseReconstruction();&lt;br /&gt;
//		example.maxFrames = 100;       // This will process the entire sequence&lt;br /&gt;
		example.compute(&amp;quot;tree_snow_01.mp4&amp;quot;);&lt;br /&gt;
//		example.compute(&amp;quot;ditch_02.mp4&amp;quot;);&lt;br /&gt;
//		example.compute(&amp;quot;holiday_display_01.mp4&amp;quot;);&lt;br /&gt;
//		example.compute(&amp;quot;log_building_02.mp4&amp;quot;);&lt;br /&gt;
		example.visualizeSparseCloud();&lt;br /&gt;
&lt;br /&gt;
		System.out.println(&amp;quot;done&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void compute( String videoName ) {&lt;br /&gt;
		// Turn on threaded code for bundle adjustment&lt;br /&gt;
		DDoglegConcurrency.USE_CONCURRENT = true;&lt;br /&gt;
&lt;br /&gt;
		// Create a directory to store the work space&lt;br /&gt;
		String path = UtilIO.pathExample(&amp;quot;mvs/&amp;quot; + videoName);&lt;br /&gt;
		workDirectory = &amp;quot;mvs_work/&amp;quot; + FilenameUtils.getBaseName(videoName);&lt;br /&gt;
&lt;br /&gt;
		// Convert the video into an image sequence. Later on we will need to access the images in random order&lt;br /&gt;
		var imageDirectory = new File(workDirectory, &amp;quot;images&amp;quot;);&lt;br /&gt;
		if (!imageDirectory.exists())&lt;br /&gt;
			checkTrue(imageDirectory.mkdirs(), &amp;quot;Failed to image directory&amp;quot;);&lt;br /&gt;
		SimpleImageSequence&amp;lt;InterleavedU8&amp;gt; sequence = DefaultMediaManager.INSTANCE.openVideo(path, ImageType.IL_U8);&lt;br /&gt;
		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
		System.out.println(&amp;quot;### Decoding Video&amp;quot;);&lt;br /&gt;
		BoofMiscOps.profile(() -&amp;gt; {&lt;br /&gt;
			int frame = 0;&lt;br /&gt;
			while (sequence.hasNext() &amp;amp;&amp;amp; frame &amp;lt; maxFrames) {&lt;br /&gt;
				InterleavedU8 image = sequence.next();&lt;br /&gt;
				File imageFile = new File(imageDirectory, String.format(&amp;quot;frame%d.png&amp;quot;, frame++));&lt;br /&gt;
				imageFiles.add(imageFile.getPath());&lt;br /&gt;
				// This is commented out for what appears to be a JRE bug.&lt;br /&gt;
				// V  [libjvm.so+0xdc4059]  SWPointer::SWPointer(MemNode*, SuperWord*, Node_Stack*, bool)&lt;br /&gt;
//				if (imageFile.exists())&lt;br /&gt;
//					continue;&lt;br /&gt;
				UtilImageIO.saveImage(image, imageFile.getPath());&lt;br /&gt;
			}&lt;br /&gt;
		}, &amp;quot;Video Decoding&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		computePairwiseGraph();&lt;br /&gt;
		metricFromPairwise();&lt;br /&gt;
		bundleAdjustmentRefine();&lt;br /&gt;
&lt;br /&gt;
		Rodrigues_F64 rod = new Rodrigues_F64();&lt;br /&gt;
		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
		for (PairwiseImageGraph.View pv : pairwise.nodes.toList()) {&lt;br /&gt;
			var wv = working.lookupView(pv.id);&lt;br /&gt;
			if (wv == null)&lt;br /&gt;
				continue;&lt;br /&gt;
			int order = working.viewList.indexOf(wv);&lt;br /&gt;
			ConvertRotation3D_F64.matrixToRodrigues(wv.world_to_view.R, rod);&lt;br /&gt;
			System.out.printf(&amp;quot;view[%2d]=&amp;#039;%2s&amp;#039; f=%6.1f k1=%6.3f k2=%6.3f T={%5.1f,%5.1f,%5.1f} R=%4.2f\n&amp;quot;,&lt;br /&gt;
					order, wv.pview.id, wv.intrinsic.f, wv.intrinsic.k1, wv.intrinsic.k2,&lt;br /&gt;
					wv.world_to_view.T.x, wv.world_to_view.T.y, wv.world_to_view.T.z, rod.theta);&lt;br /&gt;
		}&lt;br /&gt;
		System.out.println(&amp;quot;   Views used: &amp;quot; + scene.views.size + &amp;quot; / &amp;quot; + pairwise.nodes.size);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * For a pairwise graph to be constructed, image feature relationships between frames are needed. For a video&lt;br /&gt;
	 * sequence, KLT is an easy and fast way to do this. However, KLT will not &amp;quot;close the loop&amp;quot;, and it will&lt;br /&gt;
	 * not realize you&amp;#039;re back at the initial location. Typically this results in a noticeable miss alignment.&lt;br /&gt;
	 */&lt;br /&gt;
	private void trackImageFeatures() {&lt;br /&gt;
		if (similarImages!=null)&lt;br /&gt;
			return;&lt;br /&gt;
		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
		System.out.println(&amp;quot;### Creating Similar Images&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		// Configure the KLT tracker&lt;br /&gt;
		int radius = 5;&lt;br /&gt;
		var configTracker = new ConfigPointTracker();&lt;br /&gt;
		configTracker.typeTracker = ConfigPointTracker.TrackerType.KLT;&lt;br /&gt;
		configTracker.klt.pruneClose = true;&lt;br /&gt;
		configTracker.klt.toleranceFB = 2;&lt;br /&gt;
		configTracker.klt.templateRadius = radius;&lt;br /&gt;
		configTracker.klt.maximumTracks.setFixed(800);&lt;br /&gt;
		configTracker.klt.config.maxIterations = 30;&lt;br /&gt;
		configTracker.detDesc.typeDetector = ConfigDetectInterestPoint.DetectorType.POINT;&lt;br /&gt;
		configTracker.detDesc.detectPoint.type = PointDetectorTypes.SHI_TOMASI;&lt;br /&gt;
		configTracker.detDesc.detectPoint.shiTomasi.radius = 6;&lt;br /&gt;
		configTracker.detDesc.detectPoint.general.radius = 4;&lt;br /&gt;
//		configTracker.detDesc.detectPoint.general.threshold = 0;&lt;br /&gt;
		configTracker.detDesc.detectPoint.general.selector = ConfigSelectLimit.selectUniform(2.0);&lt;br /&gt;
&lt;br /&gt;
		PointTracker&amp;lt;GrayU8&amp;gt; tracker = FactoryPointTracker.tracker(configTracker, GrayU8.class, null);&lt;br /&gt;
&lt;br /&gt;
		var trackerSimilar = new PointTrackerToSimilarImages();&lt;br /&gt;
&lt;br /&gt;
		// Track features across the entire sequence and save the results&lt;br /&gt;
		BoofMiscOps.profile(() -&amp;gt; {&lt;br /&gt;
			boolean first = true;&lt;br /&gt;
			for (int frameId = 0; frameId &amp;lt; imageFiles.size(); frameId++) {&lt;br /&gt;
				String filePath = imageFiles.get(frameId);&lt;br /&gt;
				GrayU8 frame = UtilImageIO.loadImage(filePath, GrayU8.class);&lt;br /&gt;
				if (first) {&lt;br /&gt;
					first = false;&lt;br /&gt;
					trackerSimilar.initialize(frame.width, frame.height);&lt;br /&gt;
				}&lt;br /&gt;
				tracker.process(frame);&lt;br /&gt;
				int active = tracker.getTotalActive();&lt;br /&gt;
				int dropped = tracker.getDroppedTracks(null).size();&lt;br /&gt;
				tracker.spawnTracks();&lt;br /&gt;
				trackerSimilar.processFrame(tracker);&lt;br /&gt;
				String id = frameId + &amp;quot;&amp;quot;;//trackerSimilar.frames.getTail().frameID;&lt;br /&gt;
				System.out.println(&amp;quot;frame id = &amp;quot; + id + &amp;quot; active=&amp;quot; + active + &amp;quot; dropped=&amp;quot; + dropped);&lt;br /&gt;
&lt;br /&gt;
				// TODO drop tracks which have been viewed for too long to reduce the negative affects of track drift?&lt;br /&gt;
&lt;br /&gt;
				// To keep things manageable only process the first few frames, if configured to do so&lt;br /&gt;
				if (frameId &amp;gt;= maxFrames)&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
		}, &amp;quot;Tracking Features&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		similarImages = trackerSimilar;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * This step attempts to determine which views have a 3D (not homographic) relationship with each other and which&lt;br /&gt;
	 * features are real and not fake.&lt;br /&gt;
	 */&lt;br /&gt;
	public void computePairwiseGraph() {&lt;br /&gt;
		var savePath = new File(workDirectory, &amp;quot;pairwise.yaml&amp;quot;);&lt;br /&gt;
		try {&lt;br /&gt;
			pairwise = MultiViewIO.load(savePath.getPath(), (PairwiseImageGraph)null);&lt;br /&gt;
		} catch (UncheckedIOException ignore) {}&lt;br /&gt;
&lt;br /&gt;
		// Recompute if the number of images has changed&lt;br /&gt;
		if (!rebuild &amp;amp;&amp;amp; pairwise != null &amp;amp;&amp;amp; pairwise.nodes.size == imageFiles.size()) {&lt;br /&gt;
			System.out.println(&amp;quot;Loaded Pairwise Graph&amp;quot;);&lt;br /&gt;
			return;&lt;br /&gt;
		} else {&lt;br /&gt;
			rebuild = true;&lt;br /&gt;
			pairwise = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		trackImageFeatures();&lt;br /&gt;
		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
		System.out.println(&amp;quot;### Creating Pairwise&amp;quot;);&lt;br /&gt;
		var generatePairwise = new GeneratePairwiseImageGraph();&lt;br /&gt;
		BoofMiscOps.profile(() -&amp;gt; {&lt;br /&gt;
			generatePairwise.setVerbose(System.out, null);&lt;br /&gt;
			generatePairwise.process(similarImages);&lt;br /&gt;
		}, &amp;quot;Created Pairwise graph&amp;quot;);&lt;br /&gt;
		pairwise = generatePairwise.getGraph();&lt;br /&gt;
		MultiViewIO.save(pairwise, savePath.getPath());&lt;br /&gt;
		System.out.println(&amp;quot;  nodes.size=&amp;quot; + pairwise.nodes.size);&lt;br /&gt;
		System.out.println(&amp;quot;  edges.size=&amp;quot; + pairwise.edges.size);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Next a metric reconstruction is attempted using views with a 3D relationship. This is a tricky step&lt;br /&gt;
	 * and works by finding clusters of views which are likely to have numerically stable results then expanding&lt;br /&gt;
	 * the sparse metric reconstruction.&lt;br /&gt;
	 */&lt;br /&gt;
	public void metricFromPairwise() {&lt;br /&gt;
		var savePath = new File(workDirectory, &amp;quot;working.yaml&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		if (!rebuild) {&lt;br /&gt;
			try {&lt;br /&gt;
				working = MultiViewIO.load(savePath.getPath(), pairwise, null);&lt;br /&gt;
			} catch (UncheckedIOException ignore) {}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Recompute if the number of images has changed&lt;br /&gt;
		if (working != null){&lt;br /&gt;
			System.out.println(&amp;quot;Loaded Metric Reconstruction&amp;quot;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		trackImageFeatures();&lt;br /&gt;
		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
		System.out.println(&amp;quot;### Metric Reconstruction&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		var metric = new MetricFromUncalibratedPairwiseGraph();&lt;br /&gt;
		metric.setVerbose(System.out, null);&lt;br /&gt;
		metric.getInitProjective().setVerbose(System.out, null);&lt;br /&gt;
		metric.getExpandMetric().setVerbose(System.out, null);&lt;br /&gt;
		BoofMiscOps.profile(() -&amp;gt; {&lt;br /&gt;
			if (!metric.process(similarImages, pairwise)) {&lt;br /&gt;
				System.err.println(&amp;quot;Reconstruction failed&amp;quot;);&lt;br /&gt;
				System.exit(0);&lt;br /&gt;
			}&lt;br /&gt;
		}, &amp;quot;Metric Reconstruction&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		working = metric.getWorkGraph();&lt;br /&gt;
		MultiViewIO.save(working, savePath.getPath());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Here the initial estimate found in the metric reconstruction is refined using Bundle Adjustment, which just&lt;br /&gt;
	 * means all parameters (camera, view pose, point location) are optimized all at once.&lt;br /&gt;
	 */&lt;br /&gt;
	public void bundleAdjustmentRefine() {&lt;br /&gt;
		var savePath = new File(workDirectory, &amp;quot;structure.yaml&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		if (!rebuild) {&lt;br /&gt;
			try {&lt;br /&gt;
				scene = MultiViewIO.load(savePath.getPath(), (SceneStructureMetric)null);&lt;br /&gt;
			} catch (UncheckedIOException ignore) {}&lt;br /&gt;
		}&lt;br /&gt;
		// Recompute if the number of images has changed&lt;br /&gt;
		if (scene != null) {&lt;br /&gt;
			System.out.println(&amp;quot;Loaded Refined Scene&amp;quot;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		trackImageFeatures();&lt;br /&gt;
		System.out.println(&amp;quot;----------------------------------------------------------------------------&amp;quot;);&lt;br /&gt;
		System.out.println(&amp;quot;Refining the scene&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		var refine = new RefineMetricWorkingGraph();&lt;br /&gt;
		BoofMiscOps.profile(() -&amp;gt; {&lt;br /&gt;
			// Bundle adjustment is run twice, with the worse 5% of points discarded in an attempt to reduce noise&lt;br /&gt;
			refine.bundleAdjustment.keepFraction = 0.95;&lt;br /&gt;
			refine.bundleAdjustment.getSba().setVerbose(System.out, null);&lt;br /&gt;
			if (!refine.process(similarImages, working)) {&lt;br /&gt;
				System.out.println(&amp;quot;SBA REFINE FAILED&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		}, &amp;quot;Bundle Adjustment refine&amp;quot;);&lt;br /&gt;
		scene = refine.bundleAdjustment.structure;&lt;br /&gt;
		MultiViewIO.save(scene, savePath.getPath());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * To visualize the results we will render a sparse point cloud along with the location of each camera in the&lt;br /&gt;
	 * scene.&lt;br /&gt;
	 */&lt;br /&gt;
	public void visualizeSparseCloud() {&lt;br /&gt;
		checkTrue(scene.isHomogenous());&lt;br /&gt;
		List&amp;lt;Point3D_F64&amp;gt; cloudXyz = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;
		Point4D_F64 world = new Point4D_F64();&lt;br /&gt;
&lt;br /&gt;
		// NOTE: By default the colors found below are not used. Look before to see why and how to turn them on.&lt;br /&gt;
		//&lt;br /&gt;
		// Colorize the cloud by reprojecting the images. The math is straight forward but there&amp;#039;s a lot of book&lt;br /&gt;
		// keeping that needs to be done due to the scene data structure. A class is provided to make this process easy&lt;br /&gt;
		var imageLookup = new LookUpImageFilesByIndex(imageFiles);&lt;br /&gt;
		var colorize = new ColorizeMultiViewStereoResults&amp;lt;&amp;gt;(new LookUpColorRgbFormats.PL_U8(), imageLookup);&lt;br /&gt;
&lt;br /&gt;
		DogArray_I32 rgb = new DogArray_I32();&lt;br /&gt;
		rgb.resize(scene.points.size);&lt;br /&gt;
		colorize.processScenePoints(scene,&lt;br /&gt;
				( viewIdx ) -&amp;gt; viewIdx + &amp;quot;&amp;quot;, // String encodes the image&amp;#039;s index&lt;br /&gt;
				( pointIdx, r, g, b ) -&amp;gt; rgb.set(pointIdx, (r &amp;lt;&amp;lt; 16) | (g &amp;lt;&amp;lt; 8) | b)); // Assign the RGB color&lt;br /&gt;
&lt;br /&gt;
		// Convert the structure into regular 3D points from homogenous&lt;br /&gt;
		for (int i = 0; i &amp;lt; scene.points.size; i++) {&lt;br /&gt;
			scene.points.get(i).get(world);&lt;br /&gt;
			// If the point is at infinity it&amp;#039;s not clear what to do. It would be best to skip it then the color&lt;br /&gt;
			// array would be out of sync. Let&amp;#039;s just throw it far far away then.&lt;br /&gt;
			if (world.w == 0.0)&lt;br /&gt;
				cloudXyz.add(new Point3D_F64(0, 0, Double.MAX_VALUE));&lt;br /&gt;
			else&lt;br /&gt;
				cloudXyz.add(new Point3D_F64(world.x/world.w, world.y/world.w, world.z/world.w));&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		PointCloudViewer viewer = VisualizeData.createPointCloudViewer();&lt;br /&gt;
		viewer.setFog(true);&lt;br /&gt;
		// We just did a bunch of work to look up the true color of points, however for sparse data it&amp;#039;s easy to see&lt;br /&gt;
		// the structure with psuedo color. Comment out the line below to see the true color.&lt;br /&gt;
		viewer.setColorizer(new TwoAxisRgbPlane.Z_XY(1.0).fperiod(40));&lt;br /&gt;
		viewer.setDotSize(1);&lt;br /&gt;
		viewer.setTranslationStep(0.15);&lt;br /&gt;
		viewer.addCloud(cloudXyz, rgb.data);&lt;br /&gt;
		viewer.setCameraHFov(UtilAngle.radian(60));&lt;br /&gt;
&lt;br /&gt;
		SwingUtilities.invokeLater(() -&amp;gt; {&lt;br /&gt;
			// Show where the cameras are&lt;br /&gt;
			BoofSwingUtil.visualizeCameras(scene, viewer);&lt;br /&gt;
&lt;br /&gt;
			// Size the window and show it to the user&lt;br /&gt;
			viewer.getComponent().setPreferredSize(new Dimension(600, 600));&lt;br /&gt;
			ShowImages.showWindow(viewer.getComponent(), &amp;quot;Refined Scene&amp;quot;, true);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peter</name></author>
	</entry>
</feed>