- seq {
- for m' in maxima do
- if m' <> m && m'.elements.Contains(p) then
- if m'.elements.Count + m.elements.Count <= area
- then
- m'.state <- Uncertain
- m'.elements.UnionWith(m.elements)
- if not <| toValidated.Contains m' // FIXME: Maybe use state instead of scanning the whole list.
- then
- toValidated.Push(m')
- stop <- true
- yield false
- } |> Seq.forall id |> ignore
+ let m' = pixels.[p.Y, p.X]
+ if m' <> null
+ then
+ if m'.Elements.Count + m.Elements.Count <= area
+ then
+ m'.State <- AreaState.Removed
+ for e in m'.Elements do
+ pixels.[e.Y, e.X] <- m
+ queue.Remove imgData.[e.Y, e.X, 0] e
+ addEdgeToQueue m'.Elements
+ m.Elements.UnionWith(m'.Elements)
+ let intensityMax = queue.Max
+ if intensityMax <> intensity
+ then
+ intensity <- intensityMax
+ nextElements.Clear()
+ merged <- true