mlbench123 commited on
Commit
29b394e
·
verified ·
1 Parent(s): da39403

Update scalingtestupdated.py

Browse files
Files changed (1) hide show
  1. scalingtestupdated.py +34 -2
scalingtestupdated.py CHANGED
@@ -198,6 +198,7 @@ PAPER_SIZES = {
198
  }
199
 
200
 
 
201
  def calculate_paper_scaling_factor(
202
  paper_contour: np.ndarray,
203
  paper_size: str,
@@ -205,12 +206,17 @@ def calculate_paper_scaling_factor(
205
  ) -> Tuple[float, str]:
206
  """
207
  Calculate scaling factor based on detected paper dimensions with proper unit handling.
 
208
 
209
  :param paper_contour: Detected paper contour
210
  :param paper_size: Paper size identifier ("A4", "A3", "US Letter")
211
  :param output_unit: Desired unit for scaling factor ("mm" or "inches")
212
  :return: Tuple of (scaling_factor, unit_string)
213
  """
 
 
 
 
214
  # Get paper dimensions in the desired unit
215
  if output_unit == "inches":
216
  expected_width = PAPER_SIZES[paper_size]["width_inches"]
@@ -230,12 +236,38 @@ def calculate_paper_scaling_factor(
230
  scale_x = expected_width / detected_width_px
231
  scale_y = expected_height / detected_height_px
232
 
233
- # Use the minimum scale to ensure the object fits within expected dimensions
234
- scaling_factor = min(scale_x, scale_y)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
 
236
  print(f"Paper detection: {detected_width_px}x{detected_height_px} px")
237
  print(f"Expected paper size: {expected_width}x{expected_height} {output_unit}")
238
  print(f"Scale X: {scale_x:.6f}, Scale Y: {scale_y:.6f}")
 
 
239
  print(f"Final scaling factor: {scaling_factor:.6f} {unit_string}")
240
 
241
  return scaling_factor, unit_string
 
198
  }
199
 
200
 
201
+
202
  def calculate_paper_scaling_factor(
203
  paper_contour: np.ndarray,
204
  paper_size: str,
 
206
  ) -> Tuple[float, str]:
207
  """
208
  Calculate scaling factor based on detected paper dimensions with proper unit handling.
209
+ Includes empirical correction factor for improved accuracy.
210
 
211
  :param paper_contour: Detected paper contour
212
  :param paper_size: Paper size identifier ("A4", "A3", "US Letter")
213
  :param output_unit: Desired unit for scaling factor ("mm" or "inches")
214
  :return: Tuple of (scaling_factor, unit_string)
215
  """
216
+ # Empirical correction factor based on measurement analysis
217
+ # Your measurements show DXF is ~79% of original size, so we need to reduce scaling by this factor
218
+ CORRECTION_FACTOR = 0.79 # Adjust this value if needed based on more measurements
219
+
220
  # Get paper dimensions in the desired unit
221
  if output_unit == "inches":
222
  expected_width = PAPER_SIZES[paper_size]["width_inches"]
 
236
  scale_x = expected_width / detected_width_px
237
  scale_y = expected_height / detected_height_px
238
 
239
+ # Try different approaches to find the best scaling factor
240
+
241
+ # Method 1: Use minimum scale (your current approach)
242
+ scaling_factor_min = min(scale_x, scale_y)
243
+
244
+ # Method 2: Use average scale (often more accurate for real-world images)
245
+ scaling_factor_avg = (scale_x + scale_y) / 2
246
+
247
+ # Method 3: Use aspect ratio to determine orientation and pick appropriate scale
248
+ detected_aspect_ratio = detected_width_px / detected_height_px
249
+ expected_aspect_ratio = expected_width / expected_height
250
+
251
+ if abs(detected_aspect_ratio - expected_aspect_ratio) < abs(detected_aspect_ratio - (1/expected_aspect_ratio)):
252
+ # Same orientation
253
+ scaling_factor_oriented = (scale_x + scale_y) / 2
254
+ else:
255
+ # Rotated 90 degrees
256
+ scale_x_rot = expected_height / detected_width_px
257
+ scale_y_rot = expected_width / detected_height_px
258
+ scaling_factor_oriented = (scale_x_rot + scale_y_rot) / 2
259
+
260
+ # Choose the best method (you can experiment with different methods)
261
+ base_scaling_factor = scaling_factor_avg # Changed from min to avg
262
+
263
+ # Apply correction factor
264
+ scaling_factor = base_scaling_factor * CORRECTION_FACTOR
265
 
266
  print(f"Paper detection: {detected_width_px}x{detected_height_px} px")
267
  print(f"Expected paper size: {expected_width}x{expected_height} {output_unit}")
268
  print(f"Scale X: {scale_x:.6f}, Scale Y: {scale_y:.6f}")
269
+ print(f"Base scaling (avg): {base_scaling_factor:.6f}")
270
+ print(f"Correction factor: {CORRECTION_FACTOR}")
271
  print(f"Final scaling factor: {scaling_factor:.6f} {unit_string}")
272
 
273
  return scaling_factor, unit_string