图像处理与MATLAB

概念、算法与MATLAB

imshowpair和imfuse如何工作

在这篇文章中,我将探讨如何 imshowpair imfuse 工作
原因:我很好奇。
上个月,我写了一篇关于一起注册几张手持照片的文章 imshowpair 好几次。
以下是其中两幅图像:
A=imread(“A.jpg”);
imshow(“A.jpg”)
B=imread(“B.jpg”);
imshow(B)
这是 imshowpair 使用中:
imshowpair(A,B)
我想知道这个函数是如何工作的。今天,我想和大家分享我的发现和我是如何发现它的。
图像处理工具箱中的许多函数都作为MATLAB源代码提供。在这种情况下,我总是通过使用调试器一步一步地跟踪代码执行来开始代码探索。以下是我的代码潜水的开始:
imshowpair-screenshot-1.png
我注意到的第一件事是,解析后的输入参数都会立即传递给 imfuse .几行之后,结果来自 imfuse 使用 显示图像 .
啊哈!函数 imfuse 一定是这样计算出来的。所以,我继续在调试器中通过进入 imfuse :
imfuse-screenshot-1.png
第一个看起来有趣的步骤是 计算覆盖图像 (注:变量 类风湿关节炎 是吗 空间参照 定义每个图像在空间中的位置。因为我没有提供这些信息作为输入参数,所以这些参数只是设置默认的空间参考,其中水平和垂直坐标与像素下标相同。)这是 imfuse.m .通过查看其代码,我可以看到它执行以下操作:
  1. 在足够大的空间中查找输出栅格,以覆盖图像A和图像B的位置。
  2. 将输出网格中的每个像素大小(宽度和高度)设置为A和B中相应像素大小中的最小值。
  3. 将每个图像重新采样到该输出网格中。
  4. 计算与输出网格中图像A和B的位置相对应的两个遮罩图像。
继续关注代码执行,我发现下一个有趣的点是对本地函数的调用 本地创建RGB .以下是该函数:
imfuse-screenshot-3.png
这两幅图像都被转换为灰度(如果需要的话),然后每个图像都被缩放。我也看到了独立的缩放方法,它简单地缩放每个图像以占据整个黑白动态范围。然后,图像被转换为 uint8 使用由提供的适当类型特定缩放的数据类型 im2uint8 .
最后,现在的灰度图像A和B直接插入到输出图像的红色、绿色和蓝色通道中。默认情况下,图像A插入到绿色通道中,图像B插入到红色和蓝色通道中。
功能 imshowpair 当您只想显示融合结果,但不需要保存结果或进行进一步计算时,此功能非常方便。如果需要融合结果,请调用 imfuse 直接地
功能 imshowpair imfuse 万博1manbetx也支持其他融合方法。我会把调查结果留给你 “棋盘” 方法
(A,B,“棋盘”)
|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。