diff --git a/code/cpp/include/depthmap_stitcher.hpp b/code/cpp/include/depthmap_stitcher.hpp
index 0b9652dded50dcfacdee738ebd248e786f7ae393..62c2f0079ff828ec6b3dda4361bb08e4c52dd222 100644
--- a/code/cpp/include/depthmap_stitcher.hpp
+++ b/code/cpp/include/depthmap_stitcher.hpp
@@ -121,7 +121,7 @@ public:
 
 	// depth map's sub map filename regular expression
 	int index_digit_number = 3;
-	std::string depthmap_filename_regexp = "[a-zA-Z0-9\\_]*\\_depth\\_[0-9]{3}.pfm";
+	std::string depthmap_filename_regexp = "[a-zA-Z0-9\\_]*\\_disp\\_erp\\_[0-9]{3}.pfm";
 	std::string rgb_filename_regexp = "[a-zA-Z0-9\\_]*\\_rgb\\_[0-9]{3}.jpg";
 	std::string corr_filename_regexp = "[a-zA-Z0-9\\_]*\\_corr\\_[0-9]{3}\\_[0-9]{3}.json";
 	// pixels corresponding filename regular expression
diff --git a/code/cpp/src/depthmap_stitcher.cpp b/code/cpp/src/depthmap_stitcher.cpp
index a1f6a2fb9cc6a01e6e3f53d41f4789a1d466ad77..28f7750060d85e7d42d6e16006f9e4a97c5eaf56 100644
--- a/code/cpp/src/depthmap_stitcher.cpp
+++ b/code/cpp/src/depthmap_stitcher.cpp
@@ -122,9 +122,9 @@ void DepthmapStitcher::load_data(const std::string& data_root_dir, const std::ve
 		intidx2extidx[index] = depthmap_extindex;
 	}
 	smatch m_prefixs;
-	regex_search(depthmap_filename_list[0], m_prefixs, std::regex("[a-zA-Z0-9]*_rgb"));
+	regex_search(depthmap_filename_list[0], m_prefixs, std::regex("[a-zA-Z0-9\\_]*\\_disp"));
 	std::string prefix = m_prefixs[0].str();
-	filename_prefix = prefix.substr(0, prefix.length());
+	filename_prefix = prefix.substr(0, prefix.length()-5);
 	LOG(INFO) << "File name prefix is " << filename_prefix;
 
 	// 1) load the pixel corresponding relationship
diff --git a/code/cpp/src/depthmap_stitcher_group.cpp b/code/cpp/src/depthmap_stitcher_group.cpp
index 96c85b2d7a6c61e9dc7b379dda23045f62f5bf19..41ed11673479fa3f54f83724b8c1aea81ddb1177 100644
--- a/code/cpp/src/depthmap_stitcher_group.cpp
+++ b/code/cpp/src/depthmap_stitcher_group.cpp
@@ -201,9 +201,12 @@ struct DepthmapStitcherGroup::ScaleResidual {
 		T sum_number(0);
 		for (int index = 0; index < grid_width_ * grid_height_; index++)
 		{
-			sum_number += 1.0 / scale_list[index];
+			sum_number += 1.0 / (scale_list[index] + T(1e-10));
 		}
 		residual[0] = sum_number;
+//        if (ceres::isinf(residual[0]) || ceres::isnan(residual[0])){
+//            printf("INFINITY SCALE\n");
+//        }
 		return true;
 	}
 
diff --git a/code/python/src/utility/blending.py b/code/python/src/utility/blending.py
index 45e348d77692994add64396fe95c85b711691e70..fcbd2085fe50566381b1f20546725b6bb124e785 100644
--- a/code/python/src/utility/blending.py
+++ b/code/python/src/utility/blending.py
@@ -33,7 +33,7 @@ class BlendIt:
         # sub-image number
         self.fidelity_weight = 1.0
         self.inflection_point = 10  # point where slope starts to affect the radial blendweights
-        self.diagonal_percentage = 30  # Percentage of diagonal until weights start decaying in frustum weights
+        self.diagonal_percentage = 48.5  # Percentage of diagonal until weights start decaying in frustum weights
         self.n_subimages = n_subimages
         self.blending_method = blending_method
         self.padding = padding
@@ -153,23 +153,19 @@ class BlendIt:
                                                                 erp_image_height, sph_modulo=False)
 
             # process the image boundary
-            erp_image_col_start = int(erp_image_col_start) if int(erp_image_col_start) > 0 else int(
-                erp_image_col_start - 0.5)
-            erp_image_col_stop = int(erp_image_col_stop + 0.5) if int(erp_image_col_stop) > 0 else int(
-                erp_image_col_stop)
-            erp_image_row_start = int(erp_image_row_start) if int(erp_image_row_start) > 0 else int(
-                erp_image_row_start - 0.5)
-            erp_image_row_stop = int(erp_image_row_stop + 0.5) if int(erp_image_row_stop) > 0 else int(
-                erp_image_row_stop)
+            erp_image_col_start = int(erp_image_col_start + 0.5)
+            erp_image_col_stop = int(erp_image_col_stop + 0.5)
+            erp_image_row_start = int(erp_image_row_start + 0.5)
+            erp_image_row_stop = int(erp_image_row_stop + 0.5)
 
             triangle_x_range = np.linspace(erp_image_col_start, erp_image_col_stop,
-                                           erp_image_col_stop - erp_image_col_start + 1)
+                                           erp_image_col_stop - erp_image_col_start, endpoint=False)
             triangle_y_range = np.linspace(erp_image_row_start, erp_image_row_stop,
-                                           erp_image_row_stop - erp_image_row_start + 1)
+                                           erp_image_row_stop - erp_image_row_start, endpoint=False)
             triangle_xv, triangle_yv = np.meshgrid(triangle_x_range, triangle_y_range)
             # process the wrap around
             triangle_xv = np.remainder(triangle_xv, erp_image_width)
-            triangle_yv = np.remainder(triangle_yv, erp_image_height)
+            triangle_yv = np.clip(triangle_yv, 0, erp_image_height - 1)
 
             # 2) sample the pixel value from tanget image
             # project spherical coordinate to tangent plane
@@ -328,29 +324,6 @@ class BlendIt:
         height, width = size
         weight_matrix = np.zeros((height, width), dtype=np.float)
 
-        # Line in the form x = o + td. Where o origin and d direction vector
-        if height == width:
-            origin = np.array([0., 0.])
-            dir_vector = np.array([height - origin[0], width - origin[1]])
-            top_left = (origin + self.diagonal_percentage / 100. * dir_vector).astype(np.int)
-            bottom_right = (origin + (1 - self.diagonal_percentage / 100.) * dir_vector).astype(np.int)
-            weight_matrix[top_left[0]:bottom_right[0], top_left[1]:bottom_right[1]] = 1.
-
-        # If the image is not squared then two lines of the form above are needed displaced in X at the center of the img
-        else:
-            # Both lines are supposed to have slope 1. The beginning of the bottom line is the end of the top line
-            # displaced (width/height) horizontally
-            tophalf_diag_line_origin = np.array([0., 0.])
-            tophalf_diag_line_dir = np.array([height//2, height//2]) - tophalf_diag_line_origin
-
-            bottomhalf_diag_line_origin = np.array([height//2, width/height*width*0.5])
-            bottomhalf_diag_line_dir = np.array([height, width]) - bottomhalf_diag_line_origin
-
-            top_left = (tophalf_diag_line_origin + 2 * self.diagonal_percentage / 100. * tophalf_diag_line_dir).astype(np.int)
-            bottom_right = (bottomhalf_diag_line_origin + (1 - (2 * self.diagonal_percentage / 100.)) *
-                            bottomhalf_diag_line_dir).astype(np.int)
-            weight_matrix[top_left[0]:bottom_right[0], top_left[1]:bottom_right[1]] = 1.
-
         x_list = np.linspace(0, width, width, endpoint=False)
         y_list = np.linspace(0, height, height, endpoint=False)
         grid_x, grid_y = np.meshgrid(x_list, y_list)
@@ -361,11 +334,20 @@ class BlendIt:
         dist_to_top    = grid_y
         dist_to_bottom = np.abs(grid_y - height)
 
+        # Build pyramid of distances
         total_dist = np.dstack((dist_to_right, dist_to_left, dist_to_top, dist_to_bottom))
         total_dist = np.min(total_dist, axis=2)
-        total_dist[np.where(weight_matrix != 0.)] = 0
         total_dist = (total_dist - np.min(total_dist)) / np.ptp(total_dist)
-        total_dist[np.where(weight_matrix != 0.)] = 1
+        peak_coors = np.where(total_dist == 1)
+        peak_top_left = np.array([np.min(peak_coors[0]), np.min(peak_coors[1])])
+        peak_bottom_right = np.array([np.max(peak_coors[0]), np.max(peak_coors[1])])
+
+        unit_dir = np.array([1/np.sqrt(2), 1/np.sqrt(2)])
+        top_left = (peak_top_left - 2*self.diagonal_percentage*unit_dir).astype(np.int)
+        bottom_right = (peak_bottom_right + 2*self.diagonal_percentage*unit_dir).astype(np.int)
+        total_dist[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1] = 0
+        total_dist = (total_dist - np.min(total_dist)) / np.ptp(total_dist)
+        total_dist[top_left[0]:bottom_right[0] + 1, top_left[1]:bottom_right[1] + 1] = 1
         return total_dist
 
     def laplacian_matrix(self, n, m):