# `Monty.Frameworks.Utils.EdgeDetection.EdgeFeatures`
[🔗](https://github.com/d-led/ex.tbp.monty/blob/v0.1.0/packages/ex_tbp_monty_core/lib/monty/frameworks/utils/edge_detection/edge_features.ex#L1)

What one patch of an image says about the edge in it.

Mirrors `tbp/monty/frameworks/utils/edge_detection.py::EdgeFeatures`.

`angle` is `nil` when there is no edge — a uniform patch, or one whose edge
does not pass through the middle — and `0.0` would be a lie in that case: zero
radians is a direction, and no edge has none. `is_geometric_edge` says whether
the edge is a crease in the world (depth changes across it) rather than a
change in ink; a texture edge on a surface that is not behind anything is
still an edge, but it is not a boundary.

# `t`

```elixir
@type t() :: %Monty.Frameworks.Utils.EdgeDetection.EdgeFeatures{
  angle: float() | nil,
  coherence: float(),
  has_edge: boolean(),
  is_geometric_edge: boolean(),
  strength: float()
}
```

# `no_edge`

```elixir
@spec no_edge() :: t()
```

The answer for a patch with no edge in it.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
