Edge Detection & Gradients ​
Gradients and edge maps highlight structural changes and borders within images. Iris provides standard first and second-order image derivative approximations, plus geometric shape detectors.
Gradient Operators ​
Sobel ​
Calculates first-order derivatives along the X and Y axes. Returns a single gradient magnitude image.
// Compute Sobel gradient magnitude
let edges = image.sobel()?;Scharr ​
Provides more accurate derivative estimations compared to the Sobel operator.
// Compute Scharr gradient magnitude
let scharr_img = image.scharr()?;Laplacian ​
Calculates the second-order derivative (sum of second spatial derivatives), emphasizing high-frequency regions.
// Compute Laplacian
let laplacian = image.laplacian()?;Canny Edge Detection ​
Canny edge detection is a multi-stage process that reduces noise, computes gradients, performs non-maximum suppression, and uses hysteresis thresholding.
// Run Canny edge detector with low/high thresholds
let edges = image.canny(0.1, 0.3)?;Hough Transforms ​
Probabilistic Hough Line Transform ​
Detects line segments in a binary edge image. Returns a vector of LineSegment as ((x1,y1), (x2,y2)).
let lines = edges.hough_lines_p(
1.0, // rho: distance resolution
std::f32::consts::PI / 180.0, // theta: angle resolution
50, // threshold: minimum votes
50, // min_line_length
10, // max_line_gap
)?;
for ((x1, y1), (x2, y2)) in lines {
println!("Line from ({}, {}) to ({}, {})", x1, y1, x2, y2);
}Hough Circle Transform ​
Detects circles in a grayscale image. Returns circles as (center_x, center_y, radius).
let circles = image.hough_circles(
1.0, // dp: accumulator resolution ratio
20.0, // min_dist: minimum distance between circles
50.0, // param1: upper Canny threshold
30.0, // param2: accumulator threshold
10, // min_radius
100, // max_radius
)?;
for (cx, cy, r) in circles {
println!("Circle at ({}, {}) with radius {}", cx, cy, r);
}