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