Similar to what @WhiteboxDev suggested, another filter type that could be used is a `sieve filter`. Instead of looking at whether the 0s or 1s "win" for a given region, it looks at the number of neighbours a given pixel has, that matches its starting value, and chains those neighbours together. For example, the following case: 0 0 0 1 1 1 0 0 0 With a majority filter, this would end up as all `0`, while a `sieve filter`, with threshold of 3 would keep the area as is. The strength of a `sieve filter` is that you can keep long narrow features, which may be desirable, for some applications - for example a binary classification of flooded areas, where a majority filter could end up removing well defined streams.