# `Monty.Frameworks.Models.Salience.Strategies.Protocol.SalienceStrategy`
[🔗](https://github.com/d-led/ex.tbp.monty/blob/v0.1.0/packages/ex_tbp_monty_core/lib/monty/frameworks/models/salience/strategies/protocol/salience_strategy.ex#L1)

How a salience module decides where in a view is worth looking.

Mirrors
`tbp/monty/frameworks/models/salience/strategies/protocol.py::SalienceStrategy`,
a `Protocol` in Monty so a config can name any callable. It is a behaviour
here: a strategy answers a salience map of the same shape as the depth image —
one number per pixel saying how interesting that pixel is.

The `Monty.Context` comes with the images because a strategy may sample — a
random walk over candidate locations does — and anything that samples has to be
reproducible from the episode seed (`docs/monty-differences.md` §2.1).

# `depth`

```elixir
@type depth() :: [[float()]]
```

A pixel's depth, rows of numbers.

# `rgba`

```elixir
@type rgba() :: [[[float()]]]
```

An RGBA image: rows of pixels, each four channels.

# `t`

```elixir
@type t() :: struct()
```

# `call`

```elixir
@callback call(t(), Monty.Context.t(), rgba(), depth()) :: [[float()]]
```

One salience value per pixel of `depth`.

---

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