Как разрешить сглаживание при изменении цвета изображения в C #? - PullRequest
1 голос
/ 11 августа 2010

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

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

Кто-нибудь сталкивался с подобной проблемой или есть мысли / предложения по ее устранению?

Большое спасибо в advnace за вашу помощь!

С уважением, Тануш

1 Ответ

2 голосов
/ 29 августа 2010

Может быть связано с сглаживанием. Суть сглаживания состоит в том, что чем больше пиксель находится ближе к краю (границе чего-либо), тем больше цвета пикселя смешивается с цветом фона (или мы можем сказать, что он более «прозрачный»). Таким образом, проблема может заключаться в том, что вам нужно не только заменить исходный цвет на целевой цвет, но также и пиксели, которые были смешаны из исходного цвета в цвет фона. Для этого вам необходимо:

1) Выполните какой-нибудь алгоритм обнаружения фронта - он может быть простым или расширенным, как вы хотите.

2) Если пиксель близок к краю, а пиксель находится рядом с другим пикселем исходного цвета, рассчитайте коэффициент непрозрачности (1-прозрачность), который будет равен

opacity = (pixel_color-background_color)/(source_color-background_color)

3) Теперь вычислите ваш цвет, которому вы должны заменить текущий сглаженный пиксель:

new_color = background_color * (1-opacity) + opacity * target_color

И поместите этот новый цвет вместо сглаженного пикселя.

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

Самая сложная часть алгоритма - обнаружение сглаженных пикселей - потому что вы не можете быть уверены, что нашли все краевые пиксели с вероятностью 100%. Кроме того, вы не можете быть уверены, что сглаживает пиксель или изначально был сделан из такого цвета). Из-за этого вы можете получить некоторый цветовой шум в конечном продукте. Но в любом случае это должно быть лучше, чем просто сидеть и ждать :)

удачи

...