org = imread('original_image.jpg');
bin = imread('binary_image.jpg') > 128; % 0-255なのでFalse/Trueのマスクにする
bgd = imread('background.jpg');
masked_org = org .* uint8(repmat(bin,[1 1 3])); % 元画像とマスクのANDを取る
masked_bgd = bgd .* uint8(repmat(~bin,[1 1 3])); % 背景画像と反転したマスクのANDを取る
final_image = masked_org + masked_bgd; % 最終的に得たい画像
montage({org, bgd, bin, masked_org, masked_bgd, final_image},'Size', [2 3], 'BorderSize', [50 50], 'BackgroundColor', 'white');