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