【问题标题】:Add overlay image on top of other image在其他图像之上添加叠加图像
【发布时间】:2021-01-28 23:37:09
【问题描述】:

假设我有一个 RGB 图像RGB 和一个二进制图像binary,其中包含图像RGB 的分割结果。如何在图像'RGB'上绘制图像binary并将分割显示为红色透明区域?我尝试了以下操作,但出现错误。请帮我找出 MATLAB 中的最佳方法

I=imread('RGB.png');
[M,N,C] = size(I);
h=imshow(I);
alpha= imread('binary.png');
alpha = cat(3,alpha,zeros(M,N), zeros(M,N));
set(h, 'AlphaData', alpha);

这里是输入图像:

【问题讨论】:

  • 有机会发布输入图片吗?
  • @MichaelTr7 发布

标签: image matlab image-processing image-segmentation


【解决方案1】:

如果你有图像处理工具箱,这个功能会做你想做的:

https://www.mathworks.com/help/images/ref/labeloverlay.html

【讨论】:

  • 这是一个很棒的解决方案!!!我不知道它存在。
【解决方案2】:

这是一种在蒙版的选定区域中添加红色叠加层的方法。可以对这些脚本进行修改,以用白色或黑色填充剩余区域。使用逻辑数组选择掩模上的感兴趣区域。

在蒙版的白色区域上叠加红色

Overlay_Opacity = 0.5;

Image =imread('RGB.png');
imshow(Image);

Red_Channel = imread('binary.png');
White_Mask_Region = Overlay_Opacity*(Red_Channel ~= 0);

Overlay_Image(:,:,1) = White_Mask_Region;
Overlay_Image(:,:,2) = 0;
Overlay_Image(:,:,3) = 0;

hold on
Overlay = image(Overlay_Image);
Overlay.AlphaData = White_Mask_Region;
saveas(gcf,'Overlay_1.png');

在蒙版的黑色区域上覆盖红色

Overlay_Opacity = 0.5;

Image =imread('RGB.png');
imshow(Image);

Red_Channel = imread('binary.png');
Black_Mask_Region = Overlay_Opacity*(Red_Channel == 0);

Overlay_Image(:,:,1) = Black_Mask_Region;
Overlay_Image(:,:,2) = 0;
Overlay_Image(:,:,3) = 0;

hold on
Overlay = image(Overlay_Image);
Overlay.AlphaData = Black_Mask_Region;
saveas(gcf,'Overlay_2.png');

【讨论】:

    【解决方案3】:

    您只需将二进制文件alpha(仅一层)用作AlphaData

    【讨论】:

    • 但这不会创建透明的红色叠加层
    • 确实如此,但这就是 alpha 的工作方式。如果要单独调制 RGB 通道,则需要相应地计算图像,例如: I(:,:,1) = I(:,:,1) .* alpha_R + background .* (1-alpha_R)红色通道,其他通道类似。如果您只需要红色通道,则可以在应用单层 alpha 之前执行 I(:,:,2:3)=0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多