Matlab 把 ROI mask 以一定透明度叠加到黑白图像上
方法一:直接把mask写入im
先把im转化为hsv图像,由于是黑白图,即把黑白图的灰度值赋给hsv的v通道。
然后mask 信息只加载在saturation通道,saturation越低,透明度越低。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| function converted_im = mask_overlay_im(im,mask)
im = single(im); HSV = zeros([size(im), 3], 'single');
if max(im(:)) > 1 v = im / 255; else v= im; end
HSV(:,:,3) = v;
n_roi = max(mask(:)); hues = linspace(0, 1, n_roi+1); hues = hues(randperm(n_roi));
for n = 1:max(mask(:)) mask_indices = (mask == n); HSV(mask_indices) = hues(n); HSV(:,:,2) = HSV(:,:,2) .* ~mask_indices + 0.4*mask_indices; end
converted_im = uint8(hsv2rgb(HSV) * 255); end
|
将图片转化为hsv后,将roi信息写入saturation通道,实现图片叠加
方法二:使用imshow
在Figure上显示底下的图片,然后hold on在画一张,利用imshow的handles可以设置AlphaData,只设置roi区域有一定透明度,空白区域AlphaData设置为0,从而实现图像叠加。
1 2 3 4 5 6 7 8 9 10 11
| colored_mask = mask_to_rgb(matlab_mask); binary_mask = matlab_mask>0;
figure imshow(im,[]) hold on alpha = 0.3; h = imshow(colored_mask,[]) h.AlphaData=binary_mask*alpha;
|
使用imshow绘制两层,调整顶层mask透明度,实现图片叠加
⚠注意:使用imshow的CData更改图像,scale不会改变……所以是需要让两张图片的最大灰度值相差不大的,比如都设置成255. 如果一个最大灰度值是255,一个最大灰度值只是1,就会导致图片过曝惨白一片。