Информация об изменениях

Сообщение Re: Удалить фон изображения от 10.01.2021 3:45

Изменено 10.01.2021 3:51 Nuzhny

Re: Удалить фон изображения
Здравствуйте, vsb, Вы писали:

vsb>Если это сильно облегчит задачу, можно изначально рисовать исходное изображение на фоне любого другого цвета. Хотя мне показалось, что это только исказит цвета.


Сама задача называется маттирование (matting), когда каждому пикселю изображения соответствует полупрозрачный цвет. Применяется во всяких Фотошопах для вырезания людей (как у тебя), или для видео трансляций при замене фона, или уже для классического хромакея в кино. Стандартные подходы из коробки у тебя вряд ли заведутся — изображение искусственное.
С другой стороны, раз оно искусственное, то можно попробовать применить простые методы, тот же ICA, который используют в том числе для восстановления линейно смешанных изображений. Но для тебя ICA будет даже много, модно его упростить. Раз ты рисуешь на любом фоне, то надо нарисовать дважды на двух разных фонах.
Тогда каждый пиксель картинки будет равен:
Img1[x, y] = OBJ[x, y] * T[x, y] + Color1 * (1 — T[x, y])
Img2[x, y] = OBJ[x, y] * T[x, y] + Color2 * (1 — T[x, y])

Тут Img1 и Img2 — это готовые изображения (они известны), а OBJ — это изображение объекта (его надо найти), Color1 и Color2 — два разных цвета фона (известны), T — это полупрозрачная маска со значениями в [0, 1] (неизвестна), x, y — координаты каждого пикселя.
Получаем для каждого пикселя систему из двух линейных уравнений с двумя неизвестными OBJ[x, y] и T[x, y]. Решив её получим цвет пикселя объекта, который рисуешь, и значение полупрозрачности для него. Кажется и всё. Хотя для каждого пикселя будет 3 системы — для R, G и B.
Re: Удалить фон изображения
Здравствуйте, vsb, Вы писали:

vsb>Если это сильно облегчит задачу, можно изначально рисовать исходное изображение на фоне любого другого цвета. Хотя мне показалось, что это только исказит цвета.


Сама задача называется маттирование (matting), когда каждому пикселю изображения ищется соответствующее полупрозрачное значение. Применяется во всяких Фотошопах для вырезания людей (как у тебя), или для видео трансляций при замене фона, или уже для классического хромакея в кино. Стандартные подходы из коробки у тебя вряд ли заведутся — изображение искусственное.
С другой стороны, раз оно искусственное, то можно попробовать применить простые методы, тот же ICA, который используют в том числе для восстановления линейно смешанных изображений. Но для тебя ICA будет даже много, можно его упростить. Раз ты рисуешь на любом фоне, то надо нарисовать дважды — на двух разных фонах.
Тогда каждый пиксель картинки будет равен:
Img1[x, y] = OBJ[x, y] * T[x, y] + Color1 * (1 — T[x, y])
Img2[x, y] = OBJ[x, y] * T[x, y] + Color2 * (1 — T[x, y])

Тут Img1 и Img2 — это готовые изображения (они известны), а OBJ — это изображение объекта (его надо найти), Color1 и Color2 — два разных цвета фона (известны), T — это полупрозрачная маска со значениями в [0, 1] (неизвестна), x, y — координаты каждого пикселя.
Получаем для каждого пикселя систему из двух линейных уравнений с двумя неизвестными OBJ[x, y] и T[x, y]. Решив её получим цвет пикселя объекта, который рисуешь, и значение полупрозрачности для него. Кажется и всё. Хотя для каждого пикселя будет 3 системы — для R, G и B.