Matlab中如何imwarp转点?

2024-03-22

我正在使用 Matlab 将图像转换为目标图像。我有几何变换(tform)。

例如这是我的“tform”:

    1.0235    0.0022   -0.0607         0
   -0.0276    1.0002    0.0089         0
   -0.0170   -0.0141    1.1685         0
   12.8777    5.0311  -70.0325    1.0000

在Matlab2013中,可以使用imwarp轻松完成此操作:

%nii = 3D MR Image
I = nii.img; 
dii=nii.hdr.dime.pixdim(2:4);
Rfixed=imref3d(size(I),dii(2),dii(1),dii(3));    
new_img= imwarp(old_img, Rfixed, tform, 'OutputView', Rfixed);

使用 imwarp 的结果是完美的(图像中的红肺)

我需要知道 imwarp 是如何工作的,然后我编写了自己的函数

function [new_img] = aff3d(old_img, tform, range_x, range_y, range_z)

   [U, V, W] = ndgrid(range_x, range_y, range_z);
   xyz = [reshape(U,[],1)';reshape(V,[],1)';reshape(W,[],1)'];
   xyz = [xyz; ones(1,size(xyz,2))];


   uvw = tform.T * xyz;
   % avoid homogeneous coordinate  
   uvw = uvw(1:3,:)';


   xi = reshape(uvw(:,1), length(range_x),length(range_y),length(range_z));
   yi = reshape(uvw(:,2), length(range_x),length(range_y),length(range_z));
   zi = reshape(uvw(:,3), length(range_x),length(range_y),length(range_z));

   old_img = single(old_img);
   new_img = interp3(old_img,yi,xi,zi,'linear');

   ii = find(isnan(new_img));
   if(~isempty(ii))
      new_img(ii) = 0;
   end
end

我的函数的结果(更多信息 https://stackoverflow.com/questions/30240436/how-to-get-displacement-field-or-control-point-vector-when-we-have-tfrom)与 imwarp 输出不匹配(红肺未定位在正确的位置),有人可以帮助我吗?


正如 Ander 所建议的,尝试乘以逆变换:

Tinv = tform.invert();
TinvMatrix = Tinv.T;

所以你的代码将变成:

function [new_img] = aff3d(old_img, tform, range_x, range_y, range_z)
   [U, V, W] = ndgrid(range_x, range_y, range_z);
   xyz = [reshape(U,[],1)';reshape(V,[],1)';reshape(W,[],1)'];
   xyz = [xyz; ones(1,size(xyz,2))];

   tformInv = invert(tform);
   uvw = tformInv.T * xyz;
   % avoid homogeneous coordinate  
   uvw = uvw(1:3,:)';
   xi = reshape(uvw(:,1), length(range_x),length(range_y),length(range_z));
   yi = reshape(uvw(:,2), length(range_x),length(range_y),length(range_z));
   zi = reshape(uvw(:,3), length(range_x),length(range_y),length(range_z));
   old_img = single(old_img);
   new_img = interp3(old_img,yi,xi,zi,'linear');
   ii = find(isnan(new_img));
   if(~isempty(ii))
      new_img(ii) = 0;
   end
end

在您的代码中,您在 old_img 中进行插值以尝试找到已变形的 new_img 。这意味着您想要做的是使用从输出图像空间映射到输入图像空间的逆映射。您似乎正在使用点的前向映射来插值旧图像,这是不正确的。

http://blogs.mathworks.com/steve/2006/04/28/spatial-transforms-forward-mapping/ http://blogs.mathworks.com/steve/2006/04/28/spatial-transforms-forward-mapping/ http://blogs.mathworks.com/steve/2006/05/05/spatial-transformations-inverse-mapping/ http://blogs.mathworks.com/steve/2006/05/05/spatial-transformations-inverse-mapping/

我将使用上面的链接来回顾正向映射与逆向映射。 IMWARP 使用逆映射。

造成混乱的部分原因是,当人们想到几何变换时,他们通常会考虑点如何从旧图像映射到新图像的前向映射。因此,仿射三维变换的“T”属性是根据前向映射来表述的。

当需要在软件中实现几何变换时,根据逆映射来实现会更容易/更好。这就是 imwarp 的作用,这就是为什么在尝试重现 imwarp 行为时需要反转转换。如果您阅读了有关逆映射的博客文章,就会发现该算法正是 IMWARP 正在做的事情。

您需要解决的唯一问题是在 WorldLimit 不能被离散像素网格整除的情况下,IMWARP 在非默认坐标系(使用非默认空间参考对象)中执行的操作。这种行为是任意的,没有“正确”的行为。在这种情况下,IMWARP 行为是为了满足请求的分辨率 (PixelExtentInWorld) 并稍微调整世界限制。

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

Matlab中如何imwarp转点? 的相关文章

  • 将多页 PDF 转换为单个图像

    我必须将多页 PDF 文档转换为 png 图像 我尝试使用 ImageMagick 但无法获得最终结果 convert document pdf document png or convert adjoin document pdf doc
  • iOS - 异步图像下载

    我正在编写一个应用程序 它将在 UIImageView 中显示在我的服务器上找到的图像 我需要一些能够异步下载图像并缓存它的东西 同时将其放入 UIImageView 中 当我按下按钮时 下载也需要能够取消 谁能指出我可以做到这一点的方向吗
  • matlab中的分箱

    我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作 我有一个两列的矩阵 m x 和 y 值 我知道我可以通过执行 m 1 或 m 2 来提取列 我想将其分成 可能 大小相等的较小矩阵 并绘制这些矩阵的平均值 换句话说
  • 如何让 XAML 中的图像显示为实际大小?

    我有一个27 x 27我在 WPF 中显示的像素图像 但它显示larger比大小window 如何让它显示实际尺寸 替代文本 http www deviantsart com upload m20dk6 png http www devia
  • 使用 sprintf 打印元素数量可变的向量

    在下面的代码中 我可以打印向量中的所有元素item用空格分隔为 item 123 456 789 sprintf d d d item ans 123 456 789 我怎样才能做到这一点而不必输入那么多 d作为元素的数量item 最简单的
  • 如何在终端中显示图像?

    是否有任何类型的实用程序可以用来将图像转换为 ASCII 然后在我的终端中打印 我寻找过 但似乎没有找到 一个名为cacaview http linux die net man 1 cacaview允许您执行此操作 它是交互式的 允许您平移
  • 使用 openGL、SOIL 加载图像

    我尝试了很多使用 SOIL 在 openGL 中加载和显示图像的示例 运行下面的源代码时 它仅显示一个没有图像的白色四边形 我尝试打开一个名为 foto 的图像 我将图像文件放在程序的文件夹中 bool keyStates new bool
  • 在 div 标签中垂直居中图像[重复]

    这个问题在这里已经有答案了 可能的重复 图像垂直和水平居中 CSS https stackoverflow com questions 2478434 center an image vertically and horizontally
  • 如何从矩阵的每一行中减去一个向量? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将矩阵的每一行除以固定行 https stackoverflow com questions 4723824 how can i divide each row of a matrix by a
  • KineticJS - 如何在按钮单击时更改图像 src

    我试图通过单击按钮来更改kineticjs阶段中图像的src 我有一个可拖动的图像 在本例中为达斯维德 和顶部的静态图像 在本例中为猴子 单击按钮后 我希望能够用新图像替换可拖动图像 yoda JSFiddle 可以在这里看到 http j
  • 同时使用两个数组中的元素的过滤器

    假设我们有两个大小相同的数组 A and B 现在 我们需要一个过滤器 对于给定的掩码大小 从以下位置选择元素A 但删除掩码的中心元素 并在其中插入相应的元素B 所以 3x3 伪掩码 看起来类似于 A A A A B A A A A 对平均
  • 在php中生成随机字符串作为文件名[重复]

    这个问题在这里已经有答案了 我将如何创建与文件名一起使用的随机文本字符串 我正在上传照片并在完成后重命名它们 所有照片都将存储在一个目录中 因此它们的文件名必须是唯一的 有这样做的标准方法吗 有没有办法在尝试覆盖之前检查文件名是否已经存在
  • 用Java从剪贴板中提取所有图像和文本

    例如 如果我打开浏览器并复制页面的所有文本和图像 CTRL A 然后粘贴到 Microsoft Word 中 则文本和图像都会被粘贴 我正在尝试编写 Java 代码 从剪贴板内容中提取文本和所有图像 以便在程序中使用文本 图像 例如稍后在
  • Android:实时图像处理

    我有一个应用程序 它进行相机预览 对每一帧执行一些基本的图像处理功能 例如边缘检测 颜色变化 图像扭曲等 并 实时 将修改后的帧显示到屏幕上 类似于Android Market中的 Paper Camera 应用程序 我的方法总结 我也做过
  • 使用每个实体包含许多图像的核心数据?

    我是 Core Data 的新手 正在开发我的第一个个人 iOS 应用程序 我有一个实体 我们称之为Car 其中有一个缩略图以及与其关联的其他图像库 数据使用同步到在线服务ASIHTTPRequest and JSONKit 该应用程序不需
  • 读取 MEX 文件中的 4D 数组

    我在 MATLAB 中有一个 4 维数组 我正在尝试访问 MEX 函数中的数组 下面创建 testmatrix 一个 4 维矩阵 已知数据为uint8 type Create a 4D array 2x 2y rgb 3 framenumb
  • 如何使用 C# 从数据库中检索多个图像

    我有一个包含9张图像的数据库 这些图像不断变化 所以我无法直接设置src在 HTML 中 img 标签来显示 9 个图像 我必须从数据库中选择它们并相应地绑定它们 我可以使用以下命令检索并打印 1 张图像Response BinaryWri
  • android中如何处理图片下载不完整的情况?

    我正在应用程序中下载图像以将其填充到用户界面上 这是我用来下载该图像并将其保存到设备外部存储器的代码 File firstDirectory new File Environment getExternalStorageDirectory
  • MATLAB 黑洞变量

    MATLAB 是否有 黑洞 或丢弃变量 假设我正在做类似的事情 rows cols size A 但我不想存储行 是否有一个 黑洞 变量可以让我发送值去死 所以任务就像 BLACKHOLE cols size A 其中 BLACKHOLE
  • 如何在matlab中显示图像上的点?

    我有一些像素点 比如 p1 1 1 和 p2 1 10 等等 我想以任何颜色在图像上显示这些点 这个怎么做 MATLAB plot http www mathworks com help techdoc ref plot html文档非常全

随机推荐

  • 如何在grails shiro中使用缓存权限

    每次我打电话subject isPermitted 它向数据库发送一条sql 我怎样才能缓存它 有什么例子吗 谢谢 我阅读了 shiro grails 插件的文档 但无法解决它 数据源 hibernate cache use second
  • 删除 Ruby 中的换行符

    我在删除时遇到问题 n and r标签 当我使用双引号时 它工作正常 否则它会离开 With gsub 如果没有双引号 它根本不起作用 为什么 Remove n delete n result Remove Remove n delete
  • 调用 MVC4 Razor DisplayTemplate,生成 HTML,但未渲染到浏览器

    我有一个迭代集合并调用的视图DisplayFor 对于集合中的每个元素 我需要手动迭代 而不是将集合传递给 DisplayFor 以便告诉模板是否应该在列表中绘制中断 列表中的项目只有两种类型 按它们排序 因此我只需要显示此中断一次 我的模
  • 具有高级混合索引的 Numpy 子数组分配

    原问题 当我尝试分配数组的某些元素时 我收到一条非常奇怪的错误消息 我使用切片和一组索引的组合 请参阅以下简单示例 import scipy as sp a sp zeros 3 4 5 b sp ones 4 5 I sp array 0
  • 本地主机和带有 Auth0 的 CORS 不允许我登录

    我正在制作一个 React 应用程序并尝试使用 Auth0 进行身份验证 尝试登录后 它返回 XMLHttpRequest 无法加载https my domain auth0 com 用户名密码 登录 https my domain aut
  • 了解 matplotlib:plt、figure、ax(arr)?

    我并不是很陌生matplotlib我非常羞愧地承认我一直使用它作为尽可能快速 轻松地获得解决方案的工具 所以我知道如何获得基本的情节 子情节和东西 并且有相当多的代码可以不时地重用 但我没有 深入的 呃 知识 matplotlib 最近我想
  • R 中的 Reduce() 对相似变量名导致错误

    我有 19 个由 lapply 和 split 操作生成的嵌套列表 这些列表的形式如下 list1 Var col1 col2 col3 A 2 3 4 B 3 4 5 list2 Var col1 col2 col3 A 5 6 7 B
  • MYSQL 选择一列中的两个值

    我需要从 mysql 表中选择一行 该表中有两行具有相同的值 TABLE articleId keywordId 现在我需要选择一篇文章 其关键字 Id 1 以及关键字 Id 12 每个关键字的链接都有自己的记录 如何执行一个选择查询来知道
  • tomcat 7.0.42 上的 403 访问被拒绝

    我有错误tomcat 7 0 42 上的 403 访问被拒绝访问 Tomcat Manager 应用程序时 这就是我所拥有的tomcat 用户 xml文件 我曾多次尝试更换角色 但没有成功 注意 我从 NetBeans 7 3 1 启动 停
  • 获取 icloud Web 服务端点以获取数据

    我的问题可能看起来很愚蠢 但我在谷歌上进行了太多搜索后才问这个问题 但没有任何线索 我正在使用 iCloud 网络服务 为此 我已将此 Python 代码转换为 PHP https github com picklepete pyiclou
  • ASP.NET Identity 的 IUserSecurityStampStore 接口是什么?

    查看 ASP NET Identity ASP NET 中的新成员身份实现 我在实现自己的接口时遇到了这个接口UserStore Microsoft AspNet Identity Core dll namespace Microsoft
  • 检查 bash 中的索引数组是稀疏还是密集

    我在 bash 中有一个动态生成的索引数组 想知道它是否是sparse or dense 如果在最后一个条目之前有未设置的索引 则数组是稀疏的 否则数组是密集的 该检查应该在每种情况下都有效 即使是空数组 非常大的数组 扩展时超过 ARG
  • 如何聚焦未停靠的 Chrome 调试窗口的相应选项卡?

    在开发时 我经常在 Chrome 浏览器中打开很多选项卡 我总是在单独的窗口中使用未固定的 Chrome DevTools 假设我已经打开给定选项卡的 DevTools 然后在另一个选项卡中对 SO 进行了一些搜索 那么 如果我再次聚焦 C
  • 我可以解析外部网页的目录列表吗?

    是否可以解析外部网页的目录列表 因为该网页是可访问的 并且当我访问它时它会显示文件列表 我只想知道是否可以在 PHP 中动态解析文件以及如何解析 谢谢 抱歉不清楚 我的意思是目录列表 例如 http www ibiblio org pub
  • JComboBox 弹出菜单不出现

    我在 JPanel 中有一个 JComboBox 它本身嵌套在其他几个 JPanel 中 它填充了枚举的成员 我遇到了一个问题 当我单击展开按钮时 弹出菜单不会出现 以下是我迄今为止收集到的信息 1 第一次点击展开按钮没有任何反应 第二次单
  • LINQ 基于 IList 从 IList 中删除某些元素 [重复]

    这个问题在这里已经有答案了 如何使用 LINQ 从一个基于另一个 IList 的 IList 中删除某些元素 我需要从 list1 中删除 ID 出现在 list2 中的记录 下面是代码示例 class DTO Prop int ID Pr
  • 如何在 Windows 10 Universal 中获取设备的唯一标识符?

    这是我为 Windows Universal 8 1 获取唯一 DeviceID 的旧实现 但 HardwareIdentification 类型不再存在 private static string GetId var token Hard
  • 如何在android应用程序中从twitter获取用户信息?

    我正在将 Twitter 集成到我的 Android 应用程序中 我可以为用户授权该应用程序 现在 我正在寻找一个 API 它可以为我提供登录用户的信息 如名字 姓氏 电子邮件等 我已经为 Facebook 做了这个 facebook re
  • Java中如何查找未关闭的I/O资源?

    Java 中的许多 I O 资源 例如 InputStream 和 OutputStream 在使用完毕后需要关闭 如前所述here http www coderanch com t 202922 Performance java Uncl
  • Matlab中如何imwarp转点?

    我正在使用 Matlab 将图像转换为目标图像 我有几何变换 tform 例如这是我的 tform 1 0235 0 0022 0 0607 0 0 0276 1 0002 0 0089 0 0 0170 0 0141 1 1685 0 1