问题标签 [image-registration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
873 浏览

c# - 相对无特征对象的图像配准技术

我正在尝试执行图像注册,但运气不佳。

下面的图片是我的“参考”图片。我使用网络摄像头获取同一对象在不同方向的图像,然后需要对这些图像执行转换,以使它们看起来尽可能接近参考图像。

检测对象

我一直在使用Aforge.NETAccord.NET库来解决这个问题。

特征检测/提取

到目前为止,我已经尝试过本文中使用的图像拼接方法。它适用于某些类型的图像,但不幸的是它似乎不适用于我的示例图像。对象本身相当平淡,没有太多特征,因此算法找不到很多相关点。我尝试了上述方法的两种版本,一种使用 Harris 角检测器,另一种使用SURF,这两种方法都没有为我提供所需的结果。

一种选择可能是“人为地”为对象添加更多功能(即贴纸、标记),但如果可能的话,我想避免这种情况。

形状检测

我还尝试了本文中使用的形状检测方法的几种变。理想情况下,我想检测物体上四个定义明确的圆圈/孔。然后我可以使用这些坐标来创建一个转换矩阵(单应性?),我可以用它来转换图像。

不幸的是,我无法可靠地检测到所有四个圆圈。我已经尝试了无数不同的方法来预处理图像以获得更好的圆形检测,但无法找到完美的序列。我的正常操作是:

  • 转图像灰度
  • 应用过滤器(均值、中值、保守平滑、自适应平滑等)
  • 应用边缘检测(同质性、Sobel、差异性、Canny 等)
  • 应用颜色过滤
  • 运行形状/圆形检测器

我只是找不到合适的过滤器系列来可靠地检测四个圆圈。

图像/模板匹配

同样,我想检测对象中的四个圆圈/孔,所以我尝试了一种图像/模板匹配技术,但收效甚微。我创建了一个模板(其中一个圆圈的小图像)并运行了详尽的模板匹配算法,但没有取得多大成功。通常它只检测其中一个孔,通常是创建模板的那个孔!

总之

我觉得我正在使用正确的技术来解决这个问题,我只是不确定我哪里出错了,或者我应该进一步关注哪里。

任何帮助或指示将不胜感激。

0 投票
2 回答
367 浏览

opencv - 评估图像配准过程的置信度

背景:

假设从两个不同的角度对同一场景有两个镜头。对它们应用配准算法将产生表示它们之间关系的单应矩阵。通过使用此 Homography Matrix 扭曲其中一个,将(理论上)产生两个相同的图像(如果忽略非共享区域)。

由于不存在完美,所以两幅图像可能并不完全相同,我们可能会发现它们之间存在一些差异,并且在减去它们时可以明显地显示出这种差异。

例子:

场景 1 场景 2

场景 2 扭曲到场景 1

AbsDiff(场景 1,场景 2 扭曲到场景 1)

此外,光照条件可能会导致减法时的巨大差异。

问题:

我正在寻找一个可以评估注册过程准确性的指标。该指标应为:

  1. 归一化: 0->1 测量,与图像类型(自然场景、文本、人类......)无关。例如,如果在完全不同的一对照片上的两个完全不同的注册过程具有相同的置信度,假设为 0.5,这意味着发生了相同的好(或坏)注册。这应该适用,即使其中一张是非常详细的照片,另一张是白色背景,黑色写有“你好”。

  2. 区分错误配准精度和不同照明条件:虽然有很多方法可以消除这种差异并使两个图像看起来大致相同,但我正在寻找不计算它们而不是修复它们的测量(性能问题)。

想到的第一件事就是总结两个图像的绝对差异。但是,这将产生一个代表错误的数字。当您想将它与另一个配准过程进行比较时,这个数字没有任何意义,因为另一个配准更好但细节更多的图像可能会产生更大的错误而不是更小的错误。

对不起,很长的帖子。我很高兴提供任何进一步的信息并合作寻找解决方案。

PS 使用 OpenCV 是可以接受的,也是可取的。

0 投票
1 回答
324 浏览

opencv - OpenCV 图像匹配

我有两个来自同一场景的立体相机的图像,但很少有不同的视角(imgLeft 和 imgRight)。现在,我想在左侧找到右侧图像的 ROI(下图中的红色矩形)。我需要非常快地做到这一点,因为我在视频中这样做。我怎样才能做到这一点?我没有 OpenCV 的 nonfree;但我安装了 CUDA。

右图:在此处输入图像描述

左图:在此处输入图像描述

0 投票
0 回答
222 浏览

image-processing - ImageJ:使用 1 层作为参考的 2 个多页 TIF 图像的图像配准

我正在寻找一种方法来注册 2 个 TIF 图像(没有堆栈,只有 4 个颜色通道)。

图像1:L1,L2,L3,L4

图像2:L1*,L5,L6,L7

第 1 层用作图像之间的参考层。所以我想使用 L1 和 L1* 计算变换矩阵,并将变换应用于 image2 的 L5、L6、L7。

哪个插件可以做到这一点,优先使用批处理功能?我发现的那些(例如turboreg、stackreg、bunwarpJ)要么不能处理非堆栈或“彩色”图像,要么两者都不能处理,而且它们中的大多数都不能处理批处理。

非常感谢,马里奥

0 投票
1 回答
504 浏览

matlab - 如何保存修改后的 3D 原始文件?

我正在尝试在 Matlab 中读取一个原始文件(float64,这是一个变形矢量场,即图像配准的结果),具有 3 个维度 304 x 224 x 52。

然后我想通过将它们除以 10 来更改此文件中的所有值。

之后,我想将修改后的文件再次保存为具有相同规格的原始文件。我写了一个代码,但我无法保存文件。我想以原始格式再次保存它。我想我可能会遗漏一些东西。我是 Matlab 的初学者,非常感谢您的帮助和耐心。谢谢你。

0 投票
2 回答
737 浏览

python - 如何在 Python 中扩展 ITK 类?

SimpleITK 提供易于使用的 Python 接口。我可以从那里扩展课程吗?

我需要解决一个注册问题,这需要我编写自定义的注册类,尤其是相似度度量。如何在 Python 中扩展 SimpleITK 以供我使用?

0 投票
1 回答
259 浏览

matlab - 评估图像配准的准确性

我正在通过在 Matlab 中从 2 个多时相卫星图像中提取 SURF 特征来执行图像配准,如此所述。

提供的步骤对我来说似乎很有效,我可以直观地看到目标图像与固定图像正确对齐。

如何访问该方法的准确性?换句话说,有没有办法做出这样的声明,例如“这 2 个图像是“XX”% 彼此对齐的

0 投票
2 回答
4412 浏览

matlab - 对齐已捕获的 rgb 和深度图像

我正在尝试使用 MATLAB 对齐两个图像 - 一个 rgb 和另一个深度。请注意,我已经检查了几个地方——比如这里这里需要一个 kinect 设备,这里 校准需要相机参数。我也被建议使用 EPIPOLAR GEOMETRY 来匹配这两个图像,虽然我不知道如何。我所指的数据集在rgb-dt face dataset中给出。一个这样的例子如下所示:

图片

基本事实基本上意味着已经提供了指定感兴趣的面部区域的边界框,我只使用它们来裁剪面部区域。matlab代码如下图所示:

两个裁剪后的图像 rgb 和深度如下所示:裁剪图像


有什么方法可以注册/对齐图像。我从 这里得到了提示,在 rgb 和深度图像上都使用了基本的 sobel 算子来生成边缘图,然后需要生成关键点来进行匹配。两个图像的边缘图都是在这里生成的。

edge_map.

但是它们太吵了,我认为我们无法对这些图像进行关键点匹配。

有人可以建议matlab中的一些算法来做同样的事情吗?

0 投票
1 回答
2685 浏览

python - 如何在 python 中以超像素精度移动图像数组?

我正在尝试使用 2D FFT 和傅里叶变换移位定理来移位表示具有亚像素精度的图像的 2D 数组。当移位值是整数(像素精度)时效果很好,但是当移位值不是整数时,我会得到很多伪像,即像素的一小部分。代码如下:

因此, shift_fft(input_array,[2,0]) 将起作用,但 shift_fft(input_array,[2.4,0]) 在没有工件的情况下将不起作用。我做错了什么?例如,考虑 128x128 像素的 Lena 图像。如果我想在每个方向上移动 10.4 像素,我会得到一些图像的摆动调制。图像如下:

前:

莉娜,换班前

后:

莉娜,换班后

0 投票
1 回答
1690 浏览

dicom - 查找在同一扫描会话中获取的两个 MR 数据集的相同切片位置的坐标 (mm)

我有两个 MR 采集,第一个是 3D 采集(1x1x1 mm3),第二个是 2D 采集(2.24 x 2.24 x 5.00 mm,轴向切片)。高分辨率数据集是一个完整的头部 3D 采集,如果在轴向方向上重新切片(方向最初是采集中的矢状),则可提供 176 个切片。2D 采集仅包含 3 个轴向切片,这些切片被选择以针对大脑中的特定区域并连续采集。

是否有可能知道 3D 高分辨率数据集中的哪些切片与 2D 数据集中的 3 个切片准确对应,假设受试者在两次扫描之间没有移动,并且这些数据集是在同一扫描会话中获取的?我正在查看这两个数据集的 dicom,并尝试使用 ImageOrientationPatient 和 ImagePositionPatient 标签来尝试准确找出二维扫描中切片相对于磁体等中心的坐标。这样我就可以知道 2D 采集中第一个切片相对于磁体等中心的精确坐标,并假设两次扫描共享相同的原点,然后我可以确切地知道坐标对应于 3D 扫描中的哪个轴向切片?我面临的问题是两次采集的 ImageOrientationPatient 向量是不同的,因为高分辨率是通过矢状方向规范获得的(尽管是 3d 并且可以在任何方向获得切片),而 2D 数据是专门作为轴向切片采集的。

有dicom处理经验的人能否请教一下我如何链接这两个扫描?由于它是相同的扫描会话,我假设这两个采集的参考位置应该相同。那是对的吗?