{"id":148,"date":"2026-05-09T10:18:20","date_gmt":"2026-05-09T08:18:20","guid":{"rendered":"https:\/\/blogs.uef.fi\/photogrammetry\/?page_id=148"},"modified":"2026-05-09T10:18:42","modified_gmt":"2026-05-09T08:18:42","slug":"block-bundle-adjustment","status":"publish","type":"page","link":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/","title":{"rendered":"Bundle Block Adjustment"},"content":{"rendered":"\n<p>Bundle Block Adjustment (BBA) is a cornerstone of modern photogrammetry and computer vision, serving as the final optimization step in reconstructing three-dimensional scenes from two-dimensional images. By simultaneously refining camera orientations and object point coordinates, it ensures the highest possible geometric accuracy for mapping and modeling projects.<br><br><br><strong>The Core Mechanism: Observational Equations<\/strong><br><\/p>\n\n\n\n<p>At its heart, BBA is built upon the <strong>collinearity condition<\/strong>, which states that the exposure center, the image point, and the corresponding object point must all lie on a single straight line. This relationship is expressed through a set of nonlinear equations that are typically solved using iterative least-squares adjustment.<br><br><br>Beyond the fundamental collinearity equations, a robust bundle adjustment can incorporate various other data sources to strengthen the network:<br><br><strong>Ground Control Points (GCPs):<\/strong> These include height-only, planar, or full 3D coordinates that anchor the model to a real-world reference frame.<br><br><strong>Scale Bar Equations:<\/strong> Known physical distances between points provide a precise scale for the reconstructed model.<br><br><strong>GNSS Observations:<\/strong> Global Navigation Satellite System data provides the camera&#8217;s spatial position at the moment of capture.<br><br><strong>IMU Observations:<\/strong> Inertial Measurement Units provide the platform&#8217;s roll, pitch, and yaw, enabling direct georeferencing and reducing the need for ground control.<br><br><br><strong>Managing Unknown Parameters<\/strong><br>A comprehensive bundle adjustment may involve a large number of unknown parameters that the system must estimate:<br><br><strong>Exterior Orientation Parameters (EOPs):<\/strong> The three-dimensional position ($X_0, Y_0, Z_0$) and orientation angles ($\\omega, \\phi, \\kappa$) for every image in the block.<br><br><strong>Interior Orientation Parameters (IOPs):<\/strong> Camera calibration data, such as focal length, principal point location, and lens distortion coefficients.<br><br><strong>Object Point Coordinates:<\/strong> The calculated 3D coordinates for all tie points and control points in the scene.<br><br><strong>System Calibration:<\/strong> In multi-camera setups, this includes &#8220;lever arm&#8221; offsets (the distance between the camera and GNSS antenna) and &#8220;boresight angles&#8221; (the relative rotation between the IMU and camera).<br><br><br><strong>Coordinate Systems and Constraints<br><\/strong>Defining the coordinate system is critical for a stable solution. Depending on the available data, BBA can be performed in several modes:<br><br><strong>Minimum Constraint:<\/strong> Uses the minimum necessary parameters (e.g., one image origin and one scale) to define the system.<br><br><strong>Inner Constraint:<\/strong> Places the origin at the center-of-gravity of all camera centers, providing a balanced adjustment without external control.<br><br><strong>Over-Constraint:<\/strong> Anchors the block using fixed Ground Control Points or GNSS data, which is the preferred method for high-accuracy georeferencing.<br><br><br><strong>From Theory to Application<\/strong><br>The results of a successful bundle adjustment allow for the generation of high-density point clouds, which are essential for producing orthophotos, digital elevation models (DEMs), and topographic maps. While the mathematical foundations are rigorous, modern educational approaches\u2014such as those utilizing Python implementations\u2014help students grasp these complex concepts through practical, incremental development.<br><br><br>This content is based on &#8220;Photogrammetric Computations,&#8221; Vol. I, Rev. 3 (2025) by Dr. Ehsan Khoramshahi. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bundle Block Adjustment (BBA) is a cornerstone of modern photogrammetry and computer vision, serving as the final optimization step in reconstructing three-dimensional scenes from two-dimensional images. By simultaneously refining camera orientations and object point coordinates, it ensures the highest possible geometric accuracy for mapping and modeling projects. The Core Mechanism: Observational Equations At its heart, [&hellip;]<\/p>\n","protected":false},"author":746,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-148","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bundle Block Adjustment - Learn Photogrammetry<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bundle Block Adjustment - Learn Photogrammetry\" \/>\n<meta property=\"og:description\" content=\"Bundle Block Adjustment (BBA) is a cornerstone of modern photogrammetry and computer vision, serving as the final optimization step in reconstructing three-dimensional scenes from two-dimensional images. By simultaneously refining camera orientations and object point coordinates, it ensures the highest possible geometric accuracy for mapping and modeling projects. The Core Mechanism: Observational Equations At its heart, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn Photogrammetry\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-09T08:18:42+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/block-bundle-adjustment\\\/\",\"url\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/block-bundle-adjustment\\\/\",\"name\":\"Bundle Block Adjustment - Learn Photogrammetry\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/#website\"},\"datePublished\":\"2026-05-09T08:18:20+00:00\",\"dateModified\":\"2026-05-09T08:18:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/block-bundle-adjustment\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/block-bundle-adjustment\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/block-bundle-adjustment\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bundle Block Adjustment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/#website\",\"url\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/\",\"name\":\"Learn Photogrammetry\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.uef.fi\\\/photogrammetry\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bundle Block Adjustment - Learn Photogrammetry","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/","og_locale":"en_US","og_type":"article","og_title":"Bundle Block Adjustment - Learn Photogrammetry","og_description":"Bundle Block Adjustment (BBA) is a cornerstone of modern photogrammetry and computer vision, serving as the final optimization step in reconstructing three-dimensional scenes from two-dimensional images. By simultaneously refining camera orientations and object point coordinates, it ensures the highest possible geometric accuracy for mapping and modeling projects. The Core Mechanism: Observational Equations At its heart, [&hellip;]","og_url":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/","og_site_name":"Learn Photogrammetry","article_modified_time":"2026-05-09T08:18:42+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/","url":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/","name":"Bundle Block Adjustment - Learn Photogrammetry","isPartOf":{"@id":"https:\/\/blogs.uef.fi\/photogrammetry\/#website"},"datePublished":"2026-05-09T08:18:20+00:00","dateModified":"2026-05-09T08:18:42+00:00","breadcrumb":{"@id":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.uef.fi\/photogrammetry\/block-bundle-adjustment\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.uef.fi\/photogrammetry\/"},{"@type":"ListItem","position":2,"name":"Bundle Block Adjustment"}]},{"@type":"WebSite","@id":"https:\/\/blogs.uef.fi\/photogrammetry\/#website","url":"https:\/\/blogs.uef.fi\/photogrammetry\/","name":"Learn Photogrammetry","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.uef.fi\/photogrammetry\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/pages\/148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/users\/746"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/comments?post=148"}],"version-history":[{"count":2,"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/pages\/148\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/pages\/148\/revisions\/151"}],"wp:attachment":[{"href":"https:\/\/blogs.uef.fi\/photogrammetry\/wp-json\/wp\/v2\/media?parent=148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}