show_metadata/
show_metadata.rs

1// Example: Display all extracted metadata from a VK6 file
2// This demonstrates the comprehensive metadata extraction capabilities
3
4use read_vk6::read_vk6;
5use std::path::Path;
6
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let path = Path::new("tests/data/sample.vk6");
9    
10    if !path.exists() {
11        eprintln!("Error: Please place a VK6 file at {:?}", path);
12        eprintln!("You can obtain VK6 files from Keyence VK-X series microscopes");
13        return Ok(());
14    }
15
16    // Read the VK6 file with RGB image
17    println!("Reading VK6 file...");
18    let surface = read_vk6(path, true)?;
19
20    // Display quick summary
21    println!("\n{}", surface.metadata.summary());
22
23    // Display comprehensive metadata
24    println!("\n=== COMPREHENSIVE METADATA ===\n");
25
26    println!("Basic Information:");
27    println!("  Title: {:?}", surface.metadata.title);
28    println!("  Lens Name: {:?}", surface.metadata.lens_name);
29    println!("  Timestamp: {:?}", surface.metadata.timestamp);
30    println!("  UTC Offset: {:?}", surface.metadata.diff_from_utc);
31
32    println!("\nImage Attributes:");
33    println!("  Image Attributes: {:?}", surface.metadata.img_attributes);
34    println!("  User Interface Mode: {:?}", surface.metadata.user_interface_mode);
35    println!("  Color Composite Mode: {:?}", surface.metadata.color_composite_mode);
36    println!("  Image Layer Number: {:?}", surface.metadata.img_layer_number);
37    println!("  Omit Color Image: {:?}", surface.metadata.omit_color_img);
38
39    println!("\nMeasurement Modes:");
40    println!("  Run Mode: {:?}", surface.metadata.run_mode);
41    println!("  Peak Mode: {:?}", surface.metadata.peak_mode);
42    println!("  Sharpening Level: {:?}", surface.metadata.sharpening_level);
43    println!("  Speed: {:?}", surface.metadata.speed);
44    println!("  Distance: {:?}", surface.metadata.distance);
45    println!("  Pitch: {:?}", surface.metadata.pitch);
46
47    println!("\nOptical Settings:");
48    println!("  Optical Zoom: {:?}", surface.metadata.optical_zoom);
49    println!("  Objective Magnification: {:?}", surface.metadata.objective_magnification);
50    println!("  Lens ID: {:?}", surface.metadata.lens_id);
51    println!("  Numerical Aperture: {:?}", surface.metadata.num_aperture);
52    println!("  Head Type: {:?}", surface.metadata.head_type);
53
54    println!("\nLine Measurement:");
55    println!("  Number of Lines: {:?}", surface.metadata.number_of_lines);
56    println!("  Line 0 Position: {:?}", surface.metadata.line0_position);
57
58    println!("\nPMT Settings:");
59    println!("  PMT Gain Mode: {:?}", surface.metadata.pmt_gain_mode);
60    println!("  PMT Gain: {:?}", surface.metadata.pmt_gain);
61    println!("  PMT Gain 2: {:?}", surface.metadata.pmt_gain_2);
62    println!("  PMT Offset: {:?}", surface.metadata.pmt_offset);
63
64    println!("\nFilter Settings:");
65    println!("  ND Filter: {:?}", surface.metadata.nd_filter);
66    println!("  Light Filter Type: {:?}", surface.metadata.light_filter_type);
67
68    println!("\nShutter & Exposure:");
69    println!("  Persist Count: {:?}", surface.metadata.persist_count);
70    println!("  Shutter Speed Mode: {:?}", surface.metadata.shutter_speed_mode);
71    println!("  Shutter Speed: {:?}", surface.metadata.shutter_speed);
72
73    println!("\nWhite Balance & Color:");
74    println!("  White Balance Mode: {:?}", surface.metadata.white_balance_mode);
75    println!("  White Balance Red: {:?}", surface.metadata.white_balance_red);
76    println!("  White Balance Blue: {:?}", surface.metadata.white_balance_blue);
77    println!("  Camera Gain: {:?}", surface.metadata.camera_gain);
78
79    println!("\nCompensation:");
80    println!("  Plane Compensation: {:?}", surface.metadata.plane_compensation);
81
82    println!("\nUnits & Decimal Places:");
83    println!("  XY Length Unit: {:?}", surface.metadata.xy_length_unit);
84    println!("  Z Length Unit: {:?}", surface.metadata.z_length_unit);
85    println!("  XY Decimal Place: {:?}", surface.metadata.xy_decimal_place);
86    println!("  Z Decimal Place: {:?}", surface.metadata.z_decimal_place);
87
88    println!("\nResolution (raw values in picometers):");
89    println!("  X Length per Pixel: {:?} pm", surface.metadata.x_length_per_pixel);
90    println!("  Y Length per Pixel: {:?} pm", surface.metadata.y_length_per_pixel);
91    println!("  Z Length per Digit: {:?} pm", surface.metadata.z_length_per_digit);
92
93    println!("\nResolution (calculated in micrometers):");
94    println!("  Step X: {:.6} µm/pixel", surface.step_x);
95    println!("  Step Y: {:.6} µm/pixel", surface.step_y);
96    if let Some(z_len) = surface.metadata.z_length_per_digit {
97        println!("  Step Z: {:.6} µm/digit", z_len as f64 * 1e-6);
98    }
99
100    println!("\nGamma Correction:");
101    println!("  Gamma Reverse: {:?}", surface.metadata.gamma_reverse);
102    println!("  Gamma: {:?}", surface.metadata.gamma);
103    println!("  Gamma Correction Offset: {:?}", surface.metadata.gamma_correction_offset);
104
105    println!("\nCCD Settings:");
106    println!("  CCD BW Offset: {:?}", surface.metadata.ccd_bw_offset);
107
108    println!("\nLight LUT (Look-Up Table):");
109    println!("  Light LUT Mode: {:?}", surface.metadata.light_lut_mode);
110    println!("  LUT Point 0: In={:?}, Out={:?}", surface.metadata.light_lut_in0, surface.metadata.light_lut_out0);
111    println!("  LUT Point 1: In={:?}, Out={:?}", surface.metadata.light_lut_in1, surface.metadata.light_lut_out1);
112    println!("  LUT Point 2: In={:?}, Out={:?}", surface.metadata.light_lut_in2, surface.metadata.light_lut_out2);
113    println!("  LUT Point 3: In={:?}, Out={:?}", surface.metadata.light_lut_in3, surface.metadata.light_lut_out3);
114    println!("  LUT Point 4: In={:?}, Out={:?}", surface.metadata.light_lut_in4, surface.metadata.light_lut_out4);
115
116    println!("\nPosition:");
117    println!("  Upper Position: {:?}", surface.metadata.upper_position);
118    println!("  Lower Position: {:?}", surface.metadata.lower_position);
119
120    println!("\nEffective Bit Depth:");
121    println!("  Light Effective Bit Depth: {:?}", surface.metadata.light_effective_bit_depth);
122    println!("  Height Effective Bit Depth: {:?}", surface.metadata.height_effective_bit_depth);
123
124    println!("\n=== DATA SUMMARY ===");
125    println!("Height map shape: {:?}", surface.height.dim());
126    println!("Height map min: {:.6} µm", surface.height.iter().fold(f64::INFINITY, |a, &b| a.min(b)));
127    println!("Height map max: {:.6} µm", surface.height.iter().fold(f64::NEG_INFINITY, |a, &b| a.max(b)));
128    println!("RGB image present: {}", surface.rgb_image.is_some());
129    if let Some(ref rgb) = surface.rgb_image {
130        println!("RGB image shape: {:?}", rgb.dim());
131    }
132
133    Ok(())
134}