Как вычислить, какой процент пикселя находится в границах фигуры

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

У меня также есть фигура, нарисованная на этой сетке. В моем случае форма представляет собой глиф и описывается сегментами. Каждый сегмент имеет начальную точку, конечную точку и несколько точек вне кривой. Эти отрезки могут быть квадратичными кривыми или линиями. Важно то, что я могу знать точки и функции, составляющие контур фигуры.

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

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

Цель этого заключалась в том, чтобы затем я мог включить этот пиксель только на 15% и, таким образом, получить более чистые края для окончательного растрового изображения.

Хотя мне удалось найти алгоритмы определения того, попадает ли данная точка в многоугольник (трассировка лучей ), Я не смог найти ничего об этом типе проблемы.

Может ли кто-нибудь указать мне на какие-то алгоритмы для достижения этой цели? Также дайте мне знать, если я собираюсь решить эту проблему неправильно!


person Julien Zakaib    schedule 01.04.2019    source источник
comment
Самый простой способ - это, вероятно, суперсэмплинг: проверьте не только центр пикселя, но и целую кучу точек в пикселе. Если вы хотите быть точным, вам нужно вычислить пересечение формы и области пикселей. Это может быть сложно.   -  person Nico Schertler    schedule 02.04.2019
comment
@NicoSchertler Такая техника, как суперсэмплинг, в значительной степени именно то, что я искал. Для меня это отличная отправная точка, чтобы узнать больше об этой теме. Спасибо!   -  person Julien Zakaib    schedule 04.04.2019


Ответы (1)


Это похоже на проблему X, Y.

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

Если вы работаете только с одноцветными 2D-фигурами (например, с красными, синими, пурпурными ... квадратами, линиями, кривыми ...), очень простое решение - создать свое изображение и затем размыть результат.

Это автоматически даст вам плавный контур, и его легко реализовать на многих языках.

person Makogan    schedule 02.04.2019
comment
Я думаю, что это определенно неплохое решение и, вероятно, сработает в большинстве случаев. Однако я могу представить себе случаи, когда размытие пикселя привело бы к плохому значению, например, пиксель, который перекрывает контур только на небольшой процент, но окружен пикселями, которые полностью включены. - person Julien Zakaib; 04.04.2019
comment
Мой совет: попробуйте, это займет у вас около 15 минут, например, вы можете использовать OpenCV. Посмотрите, подходит ли он для ваших целей, а затем примите решение. Не позволяйте лучшему быть врагом хорошего. - person Makogan; 04.04.2019