Я пытаюсь подражать функциональности альфа-компоновки в Matlab или, более конкретно, создавать типы CopyOpacity и Over из ImageMagick. Первая цель - замаскировать область с большими краями сглаживания, такими как черные области на изображениях в наборе (image set with aliasing edges). Это должно быть сделано с совместимой маской шкалы серого, чтобы черные области были устранены, а белый должен быть сохранен, см. gray scale mask. Важным является непрерывный переход между черным и белым, что приводит к непрерывному переходу между прозрачным и непрозрачным, см. screenshot with transparent regions).Matlab: Alpha-Compositing с серой маской
Существует два подхода к составлению переднего плана FG с фоном BF с маской CM_mask_blur_alpha с серой шкалой, но результаты были не такими, как ожидалось (см. image set with post-processing с ImageMagick в качестве ссылки для чистой процедуры Matlab).
1) В первом коде серая шкалы маска неожиданно рассматриваются как бинарная маска, в результате неприемлемых эффектов наложения спектров на краях бывшего черных областей (image set for first approach):
FG = uint8(CM_mask_blur_alpha .* FG + (1 - CM_mask_blur_alpha) .* BG);
2) Второй подход приводим к видимому непрерывному переходу между передним планом и фоном, но есть эффект наложения спектров от FG оставшегося (image set for second approach):
FG = uint8(bsxfun(@times, CM_mask_blur_alpha, FG) + bsxfun(@times, (1 - CM_mask_blur_alpha), BG));
кажется, что один шаг подход не работает так, Я ищу двухступенчатый подход, например, в ImageMagick с маскировкой из черных областей, что приводит к промежуточному изображению с прозрачностью и в качестве второго шага составляют это промежуточное изображение на фоне. Отчасти это проблема, как в MATLAB: Applying transparent mask over an RGB image and blending with another, но нет маски маску серого, и я не мог адаптировать части решения, такие как генерация альфа-канала со значениями, полученными из серой маски.