Какие существуют алгоритмы нечеткой заливки? - PullRequest
0 голосов
/ 03 февраля 2011

Я реализую алгоритм заливки для проекта, над которым я сейчас работаю.Я использую это для обычной цели, редактирования изображений.У меня нет проблем с базовым алгоритмом, но я хотел бы, чтобы заливка выглядела лучше.

Во многих случаях области моего изображения будут иметь области, которые в основном одного цвета, но окаймлены пикселями, которые немногосветлее или темнее.Я хотел бы знать алгоритм для «нечеткой» заливки, которая не оставляет эти пиксели границы.Я попытался заполнить все пиксели двумя разными, простыми метриками расстояния исходного пикселя:

  1. Манхэттенское расстояние для всех трех цветовых компонентов: красного, зеленого и синего
  2. Максимальное расстояние между цветовыми компонентами.

Ничего из этого не помогает, часто оставляя границы и иногда заполняя смежные области визуально отличным, но "близким" цветом.

Я не думаю, что есть волшебная пулячтобы решить мою проблему, но мне было бы интересно знать любые алгоритмы, которые я мог бы попытаться получить лучший результат, или даже где я мог бы с пользой искать эти алгоритмы.Оглядываясь в сети, я нашел ссылку на то, что называется "нечеткий алгоритм заполнения смещения потока", но я не уверен, что это даже то же самое.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2011

Возможно, вы могли бы попытаться использовать качества локальных пикселей, а не исходных пикселей. Вы можете создать эффект, похожий на анизотропный диффузионный фильтр. Поставьте соседу в очередь, если градиент между текущим пикселем (в заливке) и соседним пикселем достаточно низкий.

0 голосов
/ 01 июля 2013

Вы должны установить допуск не с одним числом, а с диапазоном. Скажем, от 20% до 50% означало бы, что когда разница в цвете составляет 20%, вы полностью меняете цвет этого пикселя. Когда оно больше 50%, вы не заполняете этот пиксель. И когда разница лежит в диапазоне от 20% до 50%, вы смешиваете старый цвет с новым цветом с соотношением (d-t_min) / (t_max-t_min), где d - разность цветов, а t_max и t_min - ваш диапазон допуска (выражается в 0 ... 1). Я никогда не видел такой алгоритм, когда-либо реализованный; возможно я только что изобрел это.

0 голосов
/ 04 февраля 2011

Использование фактического расстояния кажется естественным: D = Sqrt (R ^ 2 + G ^ 2 + B ^ 2)

Затем определите параметр допуска, который определяет максимальное расстояние от исходного пикселя (в цветовом пространстве), которым может быть тестовый пиксель. Если оно больше этого значения, не заливайте его из этого пикселя наружу.

Изменяйте допуск от 0 до Sqrt (255 ^ 2 + 255 ^ 2 + 255 ^ 2), пока не увидите желаемый эффект.

...