MATLAB:在 RGB 图像上应用透明蒙版并与另一个图像混合

2023-12-13

我有 2 张图像:前景和背景。前景是一个范围从-50到300的数字矩阵。我通过imagesc显示它。 (即这不是 RGB 图像)。背景是 RGB 图像。

我想首先在前景上应用透明蒙版来改变它的外观。这很容易通过使用

altered_foreground = imagesc(foreground, 'AlphaData', Alphamask)

现在,我想将 alter_foreground 叠加在背景之上。问题是,由于我已经在前台使用了 Alphamask,所以我无法通过以下方式叠加它:

imagesc(background)
hold on
bimage = imagesc(altered_foreground)
set(bimage, 'AlphaData', altered_foreground)

(与我只想将未改变的前景叠加在我将使用的背景上相比,这不起作用:

imagesc(background)
hold on
bimage = imagesc(foreground)
set(bimage, 'AlphaData', foreground)

有任何想法吗?

EDIT

这是一个数据示例:

前景:


(source: gawkerassets.com)

下载图片;输入以下代码来处理它:

Foreground = im2double(imread('500x_54.jpg'));
Foreground = Foreground + 50*randn(101,1);

我改变的前景可以很简单,比如使图像的前 100 列完全透明(实际上,它有点复杂,我对值和类似的东西进行阈值设置)

背景:

同样,下载图像并输入:

Background = imread('2-effect1-500x225.jpg');

编辑:很抱歉昨天误解了你的问题,所以这是你的全彩版本:P


基本思想几乎相同MATLAB:组合两个具有不同 Alpha 的灰度图像,但就您而言,需要更多的操作才能获得正确的东西。

首先,使用提供的示例重新创建您所描述的情况

% load foreground image, and scale to [-50, 300]
Foreground = imread('500x_54.jpg');
figure(1)
imshow(Foreground)
Foreground = im2double(Foreground)*350-50;

% load background image
Background = im2double(imread('2-effect1-500x225.jpg'));
figure(2)
imshow(Background)

然后从头开始制作一个 Alpha 通道。请注意,我没有使用imagesc但编写一个普通的双精度数组。这确实是一个 Alpha 通道!不需要那么多谜团。

% build alpha layer for Foreground
alpha = bsxfun(@times, ones(size(Foreground,1), size(Foreground,2)), .6);
alpha(:,[1:53,149:203,290:352,447:end])=0;
alpha([1:58,170:end],:)=0;
figure(3)
imshow(alpha)

在混合之前,我想将前景“向后”缩放为[0,1]。由于背景图像是从常规图片中新鲜加载的,因此不需要标准化;只有 -50 到 300 范围内的前景可以。

问题是有时你有疯狂的数据,比如-100 or 1000。我不知道你想如何解释它们。如果你采取[-50. 300]作为常规的、典型的、应该的范围,那么你如何映射-100 or 1000进入颜色级别?

有 2 个选项/方法可以处理这种情况: 1) 使用[-100, 1000]作为一个新的尺度。所以-100将是纯黑色并且1000颜色纯正; 2)继续使用[-50, 300]作为比例范围,因此超出该范围的所有内容都将被映射(强制)到最近的边界。

这里我选择第一个,有自适应机制,至少限制范围[-50, 300]。所以如果你的数据像[-10,200],你仍然得到了规模[-50, 300]。我认为这更有意义。

% find a scale dynamically with some limit
Foreground_min = min( min(Foreground(:)), -50 );
Foreground_max = max( max(Foreground(:)), 300 );

混合过程与那篇文章几乎相同。但您使用的是 RGB 图像,因此您需要add所有 3 个颜色层的编号;bsxfun用于替换较慢的+ and .*运营。

% overlay the image by blending
Background_blending = bsxfun(@times, Background, bsxfun(@minus,1,alpha));
% Background_blending = Background.*repmat((1-alpha), 1, 1, 3);
Foreground_blending = bsxfun( @times, bsxfun( @rdivide, ...
    bsxfun(@minus, Foreground, Foreground_min), ... 
    Foreground_max-Foreground_min ), alpha );
% Foreground_blending = (Foreground-Foreground_min) / ...
%     (Foreground_max-Foreground_min).*repmat(alpha, 1, 1, 3);
% out = bsxfun(@plus, Background_blending, Foreground_blending);
out = Background_blending + Foreground_blending;
figure(4)
imshow(out)

除第一行之外的注释行是“常规”分配命令而不使用bsxfun,但做同样的工作,并且更容易理解:)

Result

result

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB:在 RGB 图像上应用透明蒙版并与另一个图像混合 的相关文章

  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • Numpy 相当于 MATLAB 的 hist [重复]

    这个问题在这里已经有答案了 由于某种原因 Numpy 的 hist 总是返回比 MATLAB 的 hist 少 1 个 bin 例如在 MATLAB 中 x 1 2 2 2 1 4 4 2 3 3 3 3 Rep Val hist x un
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod

随机推荐

  • 模板中的变量包含模板

    我试图将值放入 标题 模板中 例如标题和导航链接 但无法访问我从包含的模板发送到主模板的变量 渲染模板 templateName index args map string string Title Main Page Body This
  • 如何为 PHP 文件启用 mod_deflate?

    我有一个 Liquid Web VPS 帐户 我已确保 mod deflate 已安装并正在运行 活动 我曾经通过 PHP 来 gzip 我的 css 和 js 文件 以及我的 PHP 文件本身 但是 我现在尝试通过 mod deflate
  • 更改数字精度

    例如 您将如何更改数字的精度 float n 1 2345并将其存储回变量 n 并将其更改为1 23 float n 1 2345 int scaled n 100 n static cast
  • 修复 go 使用的工具版本

    我希望用 go 创建可重复的构建 对于个别项目 我们使用 glide 例如我使用 glide get github com stretchr testify 修复 testify 包的版本 然而 这不适用于工具 例如 glide insta
  • 使用 Application.FileDialog 选择文件夹

    我使用 Application FileDialog 让用户选择一个文件夹 如下所示 Dim F As FileDialog Set F Application FileDialog msoFileDialogFolderPicker 在这
  • 将 PostCSS 更新到 React 版本 8 后应用程序无法运行

    当我在我的应用程序中工作时 我注意到我有 80 个漏洞 主要是因为同行版本 比如一个要求 React 16 8 0 而我有 17 0 1 之类的东西 但另一个说 Moderate Regular Expression Denial of S
  • 在 FireFox/Greasemonkey 中使用 JavaScript 发送全局击键

    我目前有一个 GM 脚本 可以捕获击键并以编程方式单击网页上的元素 但是 这仅在页面 选项卡具有焦点时才有效 有什么方法可以捕获第二个页面 选项卡中的击键并将单击应用于第一个页面 选项卡上的元素吗 我知道我可以通过在 JavaScript
  • xampp 1.7.4 + winxp + eclipse

    我下载了最新的 Xampp 版本 1 7 4 在 Windows XP 下安装它 禁用防火墙并根据 eclipse 安装说明配置 php ini 和 eclipse 当在 eclipse 内部和外部运行 phpinfo 函数时 我看到 Xd
  • 如何将新项目推送到对象内部的数组

    我的 JSON 目前看起来像这样 id 393 item 34 comments name kevin messages item item name ryan messages item item
  • E:无法找到包 heroku-toolbelt

    我正在尝试安装Heroku Toolbelt在 Linux Mint 15 Olivia x86 64 上 当我尝试运行在 Debian 机器上安装的标准命令时 wget qO https toolbelt heroku com insta
  • Ionic PouchDb Sqlite 插件问题

    我们正在认真探索 Ionic PouchDb 和 CouchDb 作为满足我们需求之一的解决方案 我们需要构建一个可以提供离线同步功能并且与平台无关的移动应用程序 我们的另一个主要要求之一是 离线模式下的数据本质上是持久性的 并且可以增长超
  • 为什么我们需要在 CUDA 内核中跨步?

    我想知道 为什么需要使用网格跨度跨步执行以下循环 for int i index i lt ITERATIONS i stride C i A i B i 我们将步幅和索引设置为 index blockIdx x blockDim x th
  • 如何仅对字符串的一小部分执行字符串替换?

    我想要一种有效的方法 可以起到这样的作用 编辑 抱歉 我没有输入我之前尝试过的内容 我现在更新了这个例子 Method signature Only replaces first instance or how many are speci
  • webpack 捆绑的 React 应用程序中的 node-mssql 错误

    每当我尝试使用时 我的 React 应用程序都无法构建节点 MSSQL图书馆 在客户端执行此操作很重要 因为我必须从旧的 IIS 服务器提供此应用程序 看来在 Webpack 浏览器包中执行需要额外的配置 也许是某种 Polyfill 我在
  • 对 PHP 输出的 HTML 属性进行双引号转义

    通常 在编写 PHP 时 我会让它输出一些像这样的 HTML echo a href title link title link text a 显然这不会解析 因为我需要转义属性中的双引号 a 元素 是否有一个正则表达式可以快速执行此操作
  • 消息:无法使用 Selenium Manager 获取 chromedriver

    我尝试在我的 jupyter 笔记本上编写此代码 它显示了错误 我的目标是进行网络抓取 driver webdriver Chrome ChromeDriverManager install 在此输入图像描述 我还使用 pip 安装了 se
  • LAN 中的主机未解析

    我在 HttpPost 上收到 IOExeption 主机未解析 在本例中 端点是我的 LAN 上具有 Web 服务的计算机 http pc259 8080 test service asmx 我的 LAN 使用 WIFI Android
  • 如何在同一图中绘制由 statsmodels 绘图函数创建的图

    我有以下代码 from statsmodels graphics factorplots import interaction plot import statsmodels api as sm import matplotlib pypl
  • 使用归一化互相关匹配对象外部形状

    我正在与normxcorr2Matlab中的模板匹配函数 然而我想做的和我想做的不一样normxcorr2做 内置的normxcorr2考虑矩形模板中的所有像素来计算互相关 但我只希望某些像素参与归一化互相关过程 例如 我只想在关联时将下图
  • MATLAB:在 RGB 图像上应用透明蒙版并与另一个图像混合

    我有 2 张图像 前景和背景 前景是一个范围从 50到300的数字矩阵 我通过imagesc显示它 即这不是 RGB 图像 背景是 RGB 图像 我想首先在前景上应用透明蒙版来改变它的外观 这很容易通过使用 altered foregrou