diff --git a/src/unwrap.jl b/src/unwrap.jl
index 8776f2b5..3fbded79 100644
--- a/src/unwrap.jl
+++ b/src/unwrap.jl
@@ -94,7 +94,8 @@ mutable struct Pixel{T}
         return pixel
     end
 end
-Pixel(v, rng) = Pixel{typeof(v)}(0, v, rand(rng), 1)
+Pixel(v, rel::Float64) = Pixel{typeof(v)}(0, v, rel, 1)
+Pixel(v, rng::AbstractRNG) = Pixel(v, rand(rng))
 @inline Base.length(p::Pixel) = p.head.groupsize
 
 struct Edge{T}
@@ -146,8 +147,13 @@ end
 # function to broadcast
 function init_pixels(wrapped_image::AbstractArray{T, N}, rng) where {T, N}
     pixel_image = similar(wrapped_image, Pixel{T})
-    Threads.@threads for i in eachindex(wrapped_image, pixel_image)
-        pixel_image[i] = Pixel(wrapped_image[i], rng)
+
+    # Initialize reliability values before going parallel. This ensures that
+    # reliability values are generated in a deterministic order.
+    rels = rand(rng, Float64, size(wrapped_image))
+
+    Threads.@threads for i in eachindex(wrapped_image, pixel_image, rels)
+        pixel_image[i] = Pixel(wrapped_image[i], rels[i])
     end
     return pixel_image
 end